{"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-648c2d60aa6cfc84", "name": "Stray `console.log` in TS/JS \u2014 backend/src/server.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/server.js:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f61d440c0a5bdc31", "name": "Icon-only button without accessible name \u2014 docs/app.js:303", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/app.js:303"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9086ceabe2e04e87", "name": "Icon-only button without accessible name \u2014 docs/lessons/engine.js:1459", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/lessons/engine.js:1459"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3124eb6a7b9ebe5e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/tours/engine.js:536", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/tours/engine.js:536"}, "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-44cff1374cffcefc", "name": "Stray `console.log` in TS/JS \u2014 docs/games/duel/rt-firebase.js:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/rt-firebase.js:139"}, "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-09d665bdd60be6ff", "name": "Stray `console.log` in TS/JS \u2014 docs/games/duel/trivia-bank.js:338", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/trivia-bank.js:338"}, "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-d6285b7905f49bf2", "name": "Stray `console.log` in TS/JS \u2014 docs/games/duel/duel-page.js:1017", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/duel-page.js:1017"}, "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-c8d0b57b63ad0945", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/games/duel/duel-page.js:2193", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/games/duel/duel-page.js:2193"}, "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-90ba83072c675daa", "name": "Stray `console.log` in TS/JS \u2014 docs/games/duel/turnir-engine.js:1483", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/turnir-engine.js:1483"}, "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-8bb7189bd14c6535", "name": "Stray `console.log` in TS/JS \u2014 docs/games/duel/v2/trivia-bank.js:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/v2/trivia-bank.js:185"}, "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-2b179aa94aee8147", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/core/site-nav.js:5", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/core/site-nav.js:5"}, "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-416006913279b1b7", "name": "Icon-only button without accessible name \u2014 docs/core/dialogs.js:19", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/core/dialogs.js:19"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ccd42c99664457ff", "name": "Icon-only button without accessible name \u2014 docs/core/info-card.js:222", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/core/info-card.js:222"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce6a95a47c607139", "name": "Icon-only button without accessible name \u2014 docs/core/verification.js:287", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/core/verification.js:287"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e5f41b81f4b9f75", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/core/verification.js:57", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/core/verification.js:57"}, "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-ce8ac679803d3a95", "name": "Icon-only button without accessible name \u2014 docs/preview/app.js:303", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/preview/app.js:303"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb8638a8f72caba8", "name": "Icon-only button without accessible name \u2014 docs/preview/lessons/engine.js:1459", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/preview/lessons/engine.js:1459"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-013d5bb6ed822102", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/tours/engine.js:536", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/tours/engine.js:536"}, "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-b29c9ef20d37746d", "name": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/rt-firebase.js:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/rt-firebase.js:139"}, "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-266c913bdbc4fd1a", "name": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/trivia-bank.js:338", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/trivia-bank.js:338"}, "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-cf438830a22fc9ba", "name": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/duel-page.js:1017", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/duel-page.js:1017"}, "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-91d212d60561fd02", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/games/duel/duel-page.js:2193", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/games/duel/duel-page.js:2193"}, "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-a4329f31c3de8c64", "name": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/turnir-engine.js:1483", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/turnir-engine.js:1483"}, "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-e13038021ad61195", "name": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/v2/trivia-bank.js:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/v2/trivia-bank.js:185"}, "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-de3e98dcbd13b0e1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/core/site-nav.js:5", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/core/site-nav.js:5"}, "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-bb7affb6d7f79dd4", "name": "Icon-only button without accessible name \u2014 docs/preview/core/dialogs.js:19", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/preview/core/dialogs.js:19"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9225e342b5eb816b", "name": "Icon-only button without accessible name \u2014 docs/preview/core/verification.js:287", "shortDescription": {"text": "Icon-only button without accessible name \u2014 docs/preview/core/verification.js:287"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-87c7fb7a9320fc0f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/core/verification.js:57", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/core/verification.js:57"}, "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-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0939562f4fcf1329", "name": "Insecure pattern 'cors_wildcard' in backend/src/server.js:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in backend/src/server.js:5"}, "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-9ae26b056aa45818", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/learn.html:1423", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/learn.html:1423"}, "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-42932f0693c46d93", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/index.html:114", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/index.html:114"}, "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-353826792d186e67", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/negotiations/trainer.js:44", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/negotiations/trainer.js:44"}, "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-518c42f67cb2ab27", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/negotiations/contact-trainer.js:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/negotiations/contact-trainer.js:20"}, "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-87614e22565a7f6c", "name": "Insecure pattern 'dangerous_innerhtml' in docs/tours/engine.js:536", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/tours/engine.js:536"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4c7d9200d4aabf0f", "name": "Possible secret in docs/games/duel/rt-firebase.js", "shortDescription": {"text": "Possible secret in docs/games/duel/rt-firebase.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-5c8a32543fd0d985", "name": "Insecure pattern 'dangerous_innerhtml' in docs/games/duel/duel-page.js:2193", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/games/duel/duel-page.js:2193"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-75ff7e09fc012a6f", "name": "Insecure pattern 'dangerous_innerhtml' in docs/core/site-nav.js:5", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/core/site-nav.js:5"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-214fc69f608d7d11", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/core/site-nav.js:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/core/site-nav.js:38"}, "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-978210052d92d5ef", "name": "Insecure pattern 'dangerous_innerhtml' in docs/core/verification.js:57", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/core/verification.js:57"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a891927080190ec0", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/learn.html:1404", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/learn.html:1404"}, "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-b9ddd285517f8495", "name": "Insecure pattern 'dangerous_innerhtml' in docs/preview/proposed-mechanics.html:277", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/proposed-mechanics.html:277"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef3fdedbd69aecea", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/index.html:115", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/index.html:115"}, "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-8d63778a892f10ee", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/negotiations/trainer.js:44", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/negotiations/trainer.js:44"}, "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-63ab7608e1c8611f", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/negotiations/contact-trainer.js:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/negotiations/contact-trainer.js:20"}, "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-30ed34932a5366bd", "name": "Insecure pattern 'dangerous_innerhtml' in docs/preview/tours/engine.js:536", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/tours/engine.js:536"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-01631c462e9bcbf8", "name": "Possible secret in docs/preview/games/duel/rt-firebase.js", "shortDescription": {"text": "Possible secret in docs/preview/games/duel/rt-firebase.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-0eb5d5213e173d9b", "name": "Insecure pattern 'dangerous_innerhtml' in docs/preview/games/duel/duel-page.js:2193", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/games/duel/duel-page.js:2193"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-830035fa330ad591", "name": "Insecure pattern 'dangerous_innerhtml' in docs/preview/core/site-nav.js:5", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/core/site-nav.js:5"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9c97ac7ee55bc2d", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/core/site-nav.js:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/core/site-nav.js:38"}, "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-b39129e10a7aa9e0", "name": "Insecure pattern 'dangerous_innerhtml' in docs/preview/core/verification.js:57", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/core/verification.js:57"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7efbda965f283c17", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad6701f0a8405e22", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bc0d1d336ae8cdf5", "name": "Very large file: docs/app.js (1288 lines)", "shortDescription": {"text": "Very large file: docs/app.js (1288 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-63ca0e7aab36757a", "name": "Very large file: docs/lessons/engine.js (1523 lines)", "shortDescription": {"text": "Very large file: docs/lessons/engine.js (1523 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-246ccb20396e1e80", "name": "Very large file: docs/games/duel/content.bundle.js (14621 lines)", "shortDescription": {"text": "Very large file: docs/games/duel/content.bundle.js (14621 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-6eec856c6f914214", "name": "Very large file: docs/games/duel/duel.js (2318 lines)", "shortDescription": {"text": "Very large file: docs/games/duel/duel.js (2318 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-13cd335e26022508", "name": "Very large file: docs/games/duel/duel-page.js (2279 lines)", "shortDescription": {"text": "Very large file: docs/games/duel/duel-page.js (2279 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-4f6e120b1b341e41", "name": "Very large file: docs/games/duel/turnir-engine.js (1880 lines)", "shortDescription": {"text": "Very large file: docs/games/duel/turnir-engine.js (1880 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-3c870ad39790cbb6", "name": "Very large file: docs/core/yasna-3d.js (1524 lines)", "shortDescription": {"text": "Very large file: docs/core/yasna-3d.js (1524 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-c24d64038f6e0c9e", "name": "Very large file: docs/preview/app.js (1268 lines)", "shortDescription": {"text": "Very large file: docs/preview/app.js (1268 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-6537ab981767dccc", "name": "Very large file: docs/preview/lessons/engine.js (1519 lines)", "shortDescription": {"text": "Very large file: docs/preview/lessons/engine.js (1519 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-6d8370f6e3537c48", "name": "Very large file: docs/preview/games/duel/content.bundle.js (14621 lines)", "shortDescription": {"text": "Very large file: docs/preview/games/duel/content.bundle.js (14621 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-8fe6c0c1408141f0", "name": "Very large file: docs/preview/games/duel/duel.js (2318 lines)", "shortDescription": {"text": "Very large file: docs/preview/games/duel/duel.js (2318 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-7ed268e297632daa", "name": "Very large file: docs/preview/games/duel/duel-page.js (2279 lines)", "shortDescription": {"text": "Very large file: docs/preview/games/duel/duel-page.js (2279 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-9bb83694c5325d35", "name": "Very large file: docs/preview/games/duel/turnir-engine.js (1880 lines)", "shortDescription": {"text": "Very large file: docs/preview/games/duel/turnir-engine.js (1880 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-7602b9b5edb57379", "name": "Very large file: docs/preview/core/yasna-3d.js (1524 lines)", "shortDescription": {"text": "Very large file: docs/preview/core/yasna-3d.js (1524 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "3 test file(s) for 101 source file(s) (ratio 0.03). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a092b5c39e242a1", "name": "Node manifest has dependencies but no lockfile: backend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: backend/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-0e8a76eb13fd3249", "name": "Node manifest has dependencies but no lockfile: frontend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: frontend/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 84 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 102 placeholder/mock markers across 30 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-7cc8061c9a425cf6", "name": "Commented-code block (12 lines) in tests/nav-responsive.spec.mjs:3", "shortDescription": {"text": "Commented-code block (12 lines) in tests/nav-responsive.spec.mjs: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-a310ce1cb1149303", "name": "Legacy-named symbol `yasna_custom_v1` in tests/custom-yasna.spec.mjs:6", "shortDescription": {"text": "Legacy-named symbol `yasna_custom_v1` in tests/custom-yasna.spec.mjs:6"}, "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-eb354984bc306c6d", "name": "Commented-code block (7 lines) in tests/custom-yasna.spec.mjs:3", "shortDescription": {"text": "Commented-code block (7 lines) in tests/custom-yasna.spec.mjs: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-03ec47e38e23ab80", "name": "Commented-code block (6 lines) in tests/smoke.spec.mjs:7", "shortDescription": {"text": "Commented-code block (6 lines) in tests/smoke.spec.mjs:7"}, "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-ce9160bca2644c2f", "name": "Commented-code block (5 lines) in scripts/serve.mjs:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/serve.mjs: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-c10e0ce9619d4cb3", "name": "Commented-code block (8 lines) in scripts/validate-content.mjs:4", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/validate-content.mjs: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}}, {"id": "scanner-1f4c8b28ae721355", "name": "Legacy-named symbol `themesWithoutLegacy` in scripts/build-content.mjs:212", "shortDescription": {"text": "Legacy-named symbol `themesWithoutLegacy` in scripts/build-content.mjs:212"}, "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-8b985b1ed995a616", "name": "Commented-code block (6 lines) in scripts/build-content.mjs:4", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/build-content.mjs: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}}, {"id": "scanner-a9dcdd081f4b9d61", "name": "Commented-code block (8 lines) in scripts/build.mjs:8", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/build.mjs: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-3ebf1fa7e8d8bd4b", "name": "Commented-code block (8 lines) in scripts/convert-unsupported.mjs:6", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/convert-unsupported.mjs: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-afee8a4fa71bbd8d", "name": "Commented-code block (7 lines) in server/content-publish.js:16", "shortDescription": {"text": "Commented-code block (7 lines) in server/content-publish.js:16"}, "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-441f32b06a66ffbf", "name": "Commented-code block (6 lines) in server/leaderboard.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in server/leaderboard.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-3c8c164ff7aec2d2", "name": "Commented-code block (5 lines) in server/content-fetch.js:9", "shortDescription": {"text": "Commented-code block (5 lines) in server/content-fetch.js:9"}, "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-2d69244ecccd1c98", "name": "Commented-code block (10 lines) in server/auth-telegram.js:1", "shortDescription": {"text": "Commented-code block (10 lines) in server/auth-telegram.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-d97589e22f9c519f", "name": "Legacy-named symbol `yasna_custom_v1` in docs/app.js:776", "shortDescription": {"text": "Legacy-named symbol `yasna_custom_v1` in docs/app.js:776"}, "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-180da20329d5c08f", "name": "Commented-code block (5 lines) in docs/app.js:9", "shortDescription": {"text": "Commented-code block (5 lines) in docs/app.js:9"}, "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-8bea8815e8eafbf2", "name": "Legacy-named symbol `yasna_admin_pwd_v1` in docs/admin.js:362", "shortDescription": {"text": "Legacy-named symbol `yasna_admin_pwd_v1` in docs/admin.js:362"}, "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-b9c0f9969e23d98d", "name": "Commented-code block (7 lines) in docs/admin.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in docs/admin.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}}, {"id": "scanner-caf51f8cd28e1261", "name": "Commented-code block (11 lines) in docs/lessons/lesson-4-line-names.js:5", "shortDescription": {"text": "Commented-code block (11 lines) in docs/lessons/lesson-4-line-names.js:5"}, "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-5d6b93333832d3b7", "name": "Commented-code block (5 lines) in docs/lessons/lesson-l3-morning.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in docs/lessons/lesson-l3-morning.js:5"}, "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-7182777cf959f4fa", "name": "Commented-code block (9 lines) in docs/lessons/lesson-2-four-pillars.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in docs/lessons/lesson-2-four-pillars.js:5"}, "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-59e9c10a9a896bc5", "name": "Commented-code block (6 lines) in docs/lessons/engine.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/lessons/engine.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-d9cb6a0632d74c14", "name": "Commented-code block (9 lines) in docs/lessons/lesson-3-two-lines.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in docs/lessons/lesson-3-two-lines.js:5"}, "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-c1f2dfe7106df6bf", "name": "Legacy-named symbol `yasna_neg_progress_v1` in docs/negotiations/trainer.js:27", "shortDescription": {"text": "Legacy-named symbol `yasna_neg_progress_v1` in docs/negotiations/trainer.js:27"}, "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-80cf95024c19aae4", "name": "Legacy-named symbol `yasna_negc_v1` in docs/negotiations/contact-trainer.js:36", "shortDescription": {"text": "Legacy-named symbol `yasna_negc_v1` in docs/negotiations/contact-trainer.js:36"}, "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-f2a1a04a02e5790f", "name": "Commented-code block (7 lines) in docs/tours/tour-zhizni.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/tours/tour-zhizni.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-558f2d6d0d814dd2", "name": "Commented-code block (5 lines) in docs/tours/tour-goda.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/tours/tour-goda.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-dc100c9cca78f457", "name": "Commented-code block (8 lines) in docs/tours/tour-atm.js:1", "shortDescription": {"text": "Commented-code block (8 lines) in docs/tours/tour-atm.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-da56ce262e8d2698", "name": "Commented-code block (5 lines) in docs/tours/engine.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in docs/tours/engine.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}}, {"id": "scanner-b3f73e7d0bc789f3", "name": "Commented-code block (9 lines) in docs/tours/tour-peregovorov.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in docs/tours/tour-peregovorov.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-05f38114aeef109f", "name": "Commented-code block (7 lines) in docs/tours/tour-atm-skrytyh.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/tours/tour-atm-skrytyh.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-fd657cfc34707295", "name": "Commented-code block (5 lines) in docs/games/duel/duel-game-quiz.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/games/duel/duel-game-quiz.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-f02d3b9ea0929f3f", "name": "Legacy-named symbol `questionsLegacy` in docs/games/duel/content.bundle.js:8", "shortDescription": {"text": "Legacy-named symbol `questionsLegacy` in docs/games/duel/content.bundle.js:8"}, "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-972a21cbcd0e8cba", "name": "Commented-code block (5 lines) in docs/games/duel/content.bundle.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/games/duel/content.bundle.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-ece683a311611b36", "name": "Legacy-named symbol `tryLegacy` in docs/games/duel/duel.js:103", "shortDescription": {"text": "Legacy-named symbol `tryLegacy` in docs/games/duel/duel.js:103"}, "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-945bcb78ccb04863", "name": "Commented-code block (7 lines) in docs/games/duel/duel.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in docs/games/duel/duel.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}}, {"id": "scanner-c3f28a5e53e58f1e", "name": "Commented-code block (6 lines) in docs/games/duel/rt-firebase.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in docs/games/duel/rt-firebase.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}}, {"id": "scanner-3911a0f310f2b474", "name": "Commented-code block (5 lines) in docs/games/duel/duel-games.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/games/duel/duel-games.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-f680ad50ebb265b3", "name": "Legacy-named symbol `questionsLegacy` in docs/games/duel/trivia-bank.js:399", "shortDescription": {"text": "Legacy-named symbol `questionsLegacy` in docs/games/duel/trivia-bank.js:399"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-146f95cbef42b1ef", "name": "Commented-code block (6 lines) in docs/games/duel/trivia-bank.js:268", "shortDescription": {"text": "Commented-code block (6 lines) in docs/games/duel/trivia-bank.js:268"}, "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-e4a1e79c249a5d0e", "name": "Commented-code block (6 lines) in docs/games/duel/duel-page.js:101", "shortDescription": {"text": "Commented-code block (6 lines) in docs/games/duel/duel-page.js:101"}, "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-e962faeac2315315", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/games/duel/duel-page.js:900", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/games/duel/duel-page.js:900"}, "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-7de116cd9e5ffd31", "name": "Commented-code block (5 lines) in docs/games/duel/group-engine.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/games/duel/group-engine.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-220b98d60a5fc9cd", "name": "Commented-code block (5 lines) in docs/games/duel/turnir-engine.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/games/duel/turnir-engine.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-c717a19971364c7b", "name": "Commented-code block (13 lines) in docs/core/sky-real.js:1", "shortDescription": {"text": "Commented-code block (13 lines) in docs/core/sky-real.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-2353574ddb409f7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/core/sky-real.js:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/core/sky-real.js:28"}, "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-42d49faaabe6266c", "name": "Commented-code block (7 lines) in docs/core/yasna-3d.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/core/yasna-3d.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-bb775ac1b637be8b", "name": "Commented-code block (8 lines) in docs/core/astro-panel.js:4", "shortDescription": {"text": "Commented-code block (8 lines) in docs/core/astro-panel.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}}, {"id": "scanner-a58aebf74891c1a8", "name": "Commented-code block (6 lines) in docs/core/yasna-star.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/core/yasna-star.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-9e14c7d48722ff50", "name": "Legacy-named symbol `yasna_content_overrides_cache_v1` in docs/core/content-store.js:30", "shortDescription": {"text": "Legacy-named symbol `yasna_content_overrides_cache_v1` in docs/core/content-store.js:30"}, "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-6373d58ba0cd8a1b", "name": "Commented-code block (7 lines) in docs/core/content-store.js:9", "shortDescription": {"text": "Commented-code block (7 lines) in docs/core/content-store.js:9"}, "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-8d3d1075f1b03da0", "name": "Legacy-named symbol `yasna_custom_v1` in docs/core/dialogs.js:204", "shortDescription": {"text": "Legacy-named symbol `yasna_custom_v1` in docs/core/dialogs.js:204"}, "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-bd973d5cea9587a6", "name": "Commented-code block (6 lines) in docs/core/dialogs.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/core/dialogs.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-9e092ee16bd5df35", "name": "Commented-code block (7 lines) in docs/core/data.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/core/data.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-48f2394720c152dc", "name": "Commented-code block (7 lines) in docs/core/info-card.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/core/info-card.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-cdc185e3543ed46a", "name": "Commented-code block (6 lines) in docs/core/verification.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/core/verification.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-217a418a03f47edb", "name": "Legacy-named symbol `yasna_custom_v1` in docs/preview/app.js:776", "shortDescription": {"text": "Legacy-named symbol `yasna_custom_v1` in docs/preview/app.js:776"}, "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-90fa59fb90f35439", "name": "Commented-code block (5 lines) in docs/preview/app.js:9", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/app.js:9"}, "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-fe678df3bb006e5f", "name": "Legacy-named symbol `yasna_admin_pwd_v1` in docs/preview/admin.js:362", "shortDescription": {"text": "Legacy-named symbol `yasna_admin_pwd_v1` in docs/preview/admin.js:362"}, "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-36d7dd3ff9dbbd4e", "name": "Commented-code block (7 lines) in docs/preview/admin.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in docs/preview/admin.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}}, {"id": "scanner-89c90ced05028cc7", "name": "Commented-code block (11 lines) in docs/preview/lessons/lesson-4-line-names.js:5", "shortDescription": {"text": "Commented-code block (11 lines) in docs/preview/lessons/lesson-4-line-names.js:5"}, "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-6584a38028d18881", "name": "Commented-code block (5 lines) in docs/preview/lessons/lesson-l3-morning.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/lessons/lesson-l3-morning.js:5"}, "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-c538963d618a3058", "name": "Commented-code block (9 lines) in docs/preview/lessons/lesson-2-four-pillars.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in docs/preview/lessons/lesson-2-four-pillars.js:5"}, "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-39bb81ce916aadf8", "name": "Commented-code block (6 lines) in docs/preview/lessons/engine.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/preview/lessons/engine.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-ee6aa2e1834c484c", "name": "Commented-code block (9 lines) in docs/preview/lessons/lesson-3-two-lines.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in docs/preview/lessons/lesson-3-two-lines.js:5"}, "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-b0694b286a3a5ce6", "name": "Legacy-named symbol `yasna_neg_progress_v1` in docs/preview/negotiations/trainer.js:27", "shortDescription": {"text": "Legacy-named symbol `yasna_neg_progress_v1` in docs/preview/negotiations/trainer.js:27"}, "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-73212b45b092778e", "name": "Legacy-named symbol `yasna_negc_v1` in docs/preview/negotiations/contact-trainer.js:36", "shortDescription": {"text": "Legacy-named symbol `yasna_negc_v1` in docs/preview/negotiations/contact-trainer.js:36"}, "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-33608f97b8909244", "name": "Commented-code block (7 lines) in docs/preview/tours/tour-zhizni.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/preview/tours/tour-zhizni.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-0002474bb8b2a71b", "name": "Commented-code block (5 lines) in docs/preview/tours/tour-goda.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/tours/tour-goda.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-e5be00782231a2e8", "name": "Commented-code block (8 lines) in docs/preview/tours/tour-atm.js:1", "shortDescription": {"text": "Commented-code block (8 lines) in docs/preview/tours/tour-atm.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-fa190cf16b179c11", "name": "Commented-code block (5 lines) in docs/preview/tours/engine.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/tours/engine.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}}, {"id": "scanner-0d8de58756aead07", "name": "Commented-code block (9 lines) in docs/preview/tours/tour-peregovorov.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in docs/preview/tours/tour-peregovorov.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-251e9464d0d562d3", "name": "Commented-code block (7 lines) in docs/preview/tours/tour-atm-skrytyh.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/preview/tours/tour-atm-skrytyh.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-dc9bbfda0f0665c3", "name": "Commented-code block (5 lines) in docs/preview/games/duel/duel-game-quiz.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/duel-game-quiz.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-89109ad948f4d745", "name": "Legacy-named symbol `questionsLegacy` in docs/preview/games/duel/content.bundle.js:8", "shortDescription": {"text": "Legacy-named symbol `questionsLegacy` in docs/preview/games/duel/content.bundle.js:8"}, "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-0404f4b3bd914d4a", "name": "Commented-code block (5 lines) in docs/preview/games/duel/content.bundle.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/content.bundle.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-b96ca62039bacfa7", "name": "Legacy-named symbol `tryLegacy` in docs/preview/games/duel/duel.js:103", "shortDescription": {"text": "Legacy-named symbol `tryLegacy` in docs/preview/games/duel/duel.js:103"}, "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-e406b9fa0223d892", "name": "Commented-code block (7 lines) in docs/preview/games/duel/duel.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in docs/preview/games/duel/duel.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}}, {"id": "scanner-2867d98a036ddde0", "name": "Commented-code block (6 lines) in docs/preview/games/duel/rt-firebase.js:4", "shortDescription": {"text": "Commented-code block (6 lines) in docs/preview/games/duel/rt-firebase.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}}, {"id": "scanner-029c3a8e434ec243", "name": "Commented-code block (5 lines) in docs/preview/games/duel/duel-games.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/duel-games.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-9adb68dc4d187982", "name": "Legacy-named symbol `questionsLegacy` in docs/preview/games/duel/trivia-bank.js:399", "shortDescription": {"text": "Legacy-named symbol `questionsLegacy` in docs/preview/games/duel/trivia-bank.js:399"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5432456c2878832d", "name": "Commented-code block (6 lines) in docs/preview/games/duel/trivia-bank.js:268", "shortDescription": {"text": "Commented-code block (6 lines) in docs/preview/games/duel/trivia-bank.js:268"}, "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-24b4c445de01568a", "name": "Commented-code block (6 lines) in docs/preview/games/duel/duel-page.js:101", "shortDescription": {"text": "Commented-code block (6 lines) in docs/preview/games/duel/duel-page.js:101"}, "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-1634af31c3938b48", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/preview/games/duel/duel-page.js:900", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/preview/games/duel/duel-page.js:900"}, "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-b759592439c62a1c", "name": "Commented-code block (5 lines) in docs/preview/games/duel/group-engine.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/group-engine.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-1c1804def45381c4", "name": "Commented-code block (5 lines) in docs/preview/games/duel/turnir-engine.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/turnir-engine.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-da630868de664f39", "name": "Commented-code block (13 lines) in docs/preview/core/sky-real.js:1", "shortDescription": {"text": "Commented-code block (13 lines) in docs/preview/core/sky-real.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-50f747406e8ae4f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/preview/core/sky-real.js:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/preview/core/sky-real.js:28"}, "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-c4dfc2fd3ef2a73b", "name": "Commented-code block (7 lines) in docs/preview/core/yasna-3d.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/preview/core/yasna-3d.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-1a32dcbd726131b8", "name": "Commented-code block (8 lines) in docs/preview/core/astro-panel.js:4", "shortDescription": {"text": "Commented-code block (8 lines) in docs/preview/core/astro-panel.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}}, {"id": "scanner-43e3a111de46ed6d", "name": "Commented-code block (6 lines) in docs/preview/core/yasna-star.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/preview/core/yasna-star.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-f17eb1e26e2c689d", "name": "Legacy-named symbol `yasna_content_overrides_cache_v1` in docs/preview/core/content-store.js:30", "shortDescription": {"text": "Legacy-named symbol `yasna_content_overrides_cache_v1` in docs/preview/core/content-store.js:30"}, "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-1a86c362c4b425e3", "name": "Commented-code block (7 lines) in docs/preview/core/content-store.js:9", "shortDescription": {"text": "Commented-code block (7 lines) in docs/preview/core/content-store.js:9"}, "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-d907c45d23a3ce58", "name": "Legacy-named symbol `yasna_custom_v1` in docs/preview/core/dialogs.js:204", "shortDescription": {"text": "Legacy-named symbol `yasna_custom_v1` in docs/preview/core/dialogs.js:204"}, "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-0a778cca3e79507b", "name": "Commented-code block (6 lines) in docs/preview/core/dialogs.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/preview/core/dialogs.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-60bcf173da45081b", "name": "Commented-code block (7 lines) in docs/preview/core/data.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/preview/core/data.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-2b14c91fa979c483", "name": "Commented-code block (7 lines) in docs/preview/core/info-card.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in docs/preview/core/info-card.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-6dfa018f041e36df", "name": "Commented-code block (6 lines) in docs/preview/core/verification.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in docs/preview/core/verification.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-e3d879e4d82553d1", "name": "Dangling fetch: POST /submit (docs/games/duel/duel.js:434)", "shortDescription": {"text": "Dangling fetch: POST /submit (docs/games/duel/duel.js:434)"}, "fullDescription": {"text": "`docs/games/duel/duel.js:434` calls `POST /submit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/submit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd62edab7e0cf6dd", "name": "Dangling fetch: POST /submit (docs/preview/games/duel/duel.js:434)", "shortDescription": {"text": "Dangling fetch: POST /submit (docs/preview/games/duel/duel.js:434)"}, "fullDescription": {"text": "`docs/preview/games/duel/duel.js:434` calls `POST /submit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/submit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-432b1196b96760fb", "name": "Unused endpoint: GET /api/engine/position/:i", "shortDescription": {"text": "Unused endpoint: GET /api/engine/position/:i"}, "fullDescription": {"text": "`backend/src/server.js` declares `GET /api/engine/position/:i` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d33aab886b44a918", "name": "Unused endpoint: GET /api/engine/crosses", "shortDescription": {"text": "Unused endpoint: GET /api/engine/crosses"}, "fullDescription": {"text": "`backend/src/server.js` declares `GET /api/engine/crosses` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f731c0760edac8db", "name": "Unused endpoint: GET /api/engine/pranas", "shortDescription": {"text": "Unused endpoint: GET /api/engine/pranas"}, "fullDescription": {"text": "`backend/src/server.js` declares `GET /api/engine/pranas` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24412"}, "properties": {"repository": "Avvacumrechevoi/yasnanegotiations", "repoUrl": "https://github.com/Avvacumrechevoi/yasnanegotiations", "branch": "main"}, "results": [{"ruleId": "scanner-648c2d60aa6cfc84", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/src/server.js:50"}, "properties": {"repobilityId": "d7f22f465aadd584", "scanner": "scanner-primary", "fingerprint": "648c2d60aa6cfc84", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f61d440c0a5bdc31", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/app.js:303"}, "properties": {"repobilityId": "594c59a9d7aeede7", "scanner": "scanner-primary", "fingerprint": "f61d440c0a5bdc31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9086ceabe2e04e87", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/lessons/engine.js:1459"}, "properties": {"repobilityId": "3d598f53e110083b", "scanner": "scanner-primary", "fingerprint": "9086ceabe2e04e87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-3124eb6a7b9ebe5e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/tours/engine.js:536"}, "properties": {"repobilityId": "18c22220b64d8396", "scanner": "scanner-primary", "fingerprint": "3124eb6a7b9ebe5e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-44cff1374cffcefc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/rt-firebase.js:139"}, "properties": {"repobilityId": "64ab29d0c23809e3", "scanner": "scanner-primary", "fingerprint": "44cff1374cffcefc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09d665bdd60be6ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/trivia-bank.js:338"}, "properties": {"repobilityId": "3ba0c0cfd2da691d", "scanner": "scanner-primary", "fingerprint": "09d665bdd60be6ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6285b7905f49bf2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/duel-page.js:1017"}, "properties": {"repobilityId": "36b689224045504b", "scanner": "scanner-primary", "fingerprint": "d6285b7905f49bf2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8d0b57b63ad0945", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/games/duel/duel-page.js:2193"}, "properties": {"repobilityId": "80a532494fda1b48", "scanner": "scanner-primary", "fingerprint": "c8d0b57b63ad0945", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-90ba83072c675daa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/turnir-engine.js:1483"}, "properties": {"repobilityId": "3ba60a97b7f1fed9", "scanner": "scanner-primary", "fingerprint": "90ba83072c675daa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8bb7189bd14c6535", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/games/duel/v2/trivia-bank.js:185"}, "properties": {"repobilityId": "0a07b25ce3ee2912", "scanner": "scanner-primary", "fingerprint": "8bb7189bd14c6535", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b179aa94aee8147", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/core/site-nav.js:5"}, "properties": {"repobilityId": "f86cc608cf891147", "scanner": "scanner-primary", "fingerprint": "2b179aa94aee8147", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-416006913279b1b7", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/core/dialogs.js:19"}, "properties": {"repobilityId": "0a345d461ab99a75", "scanner": "scanner-primary", "fingerprint": "416006913279b1b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ccd42c99664457ff", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/core/info-card.js:222"}, "properties": {"repobilityId": "80034f657b5c47af", "scanner": "scanner-primary", "fingerprint": "ccd42c99664457ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-ce6a95a47c607139", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/core/verification.js:287"}, "properties": {"repobilityId": "37bfad8eccdbe6ac", "scanner": "scanner-primary", "fingerprint": "ce6a95a47c607139", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9e5f41b81f4b9f75", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/core/verification.js:57"}, "properties": {"repobilityId": "73674767bddd88af", "scanner": "scanner-primary", "fingerprint": "9e5f41b81f4b9f75", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ce8ac679803d3a95", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/preview/app.js:303"}, "properties": {"repobilityId": "0e786f92adcc3416", "scanner": "scanner-primary", "fingerprint": "ce8ac679803d3a95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-fb8638a8f72caba8", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/preview/lessons/engine.js:1459"}, "properties": {"repobilityId": "319a0e8f619c4c37", "scanner": "scanner-primary", "fingerprint": "fb8638a8f72caba8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-013d5bb6ed822102", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/tours/engine.js:536"}, "properties": {"repobilityId": "e07f9f80d1f8e3c9", "scanner": "scanner-primary", "fingerprint": "013d5bb6ed822102", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b29c9ef20d37746d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/rt-firebase.js:139"}, "properties": {"repobilityId": "a48ab17560295a39", "scanner": "scanner-primary", "fingerprint": "b29c9ef20d37746d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-266c913bdbc4fd1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/trivia-bank.js:338"}, "properties": {"repobilityId": "a819d059735759ef", "scanner": "scanner-primary", "fingerprint": "266c913bdbc4fd1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf438830a22fc9ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/duel-page.js:1017"}, "properties": {"repobilityId": "171d9c0c925beb16", "scanner": "scanner-primary", "fingerprint": "cf438830a22fc9ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-91d212d60561fd02", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/games/duel/duel-page.js:2193"}, "properties": {"repobilityId": "ef71e66ed8cb0fd8", "scanner": "scanner-primary", "fingerprint": "91d212d60561fd02", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a4329f31c3de8c64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/turnir-engine.js:1483"}, "properties": {"repobilityId": "1facfc5a59ce9e57", "scanner": "scanner-primary", "fingerprint": "a4329f31c3de8c64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e13038021ad61195", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 docs/preview/games/duel/v2/trivia-bank.js:185"}, "properties": {"repobilityId": "8fbc60b3c6117978", "scanner": "scanner-primary", "fingerprint": "e13038021ad61195", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de3e98dcbd13b0e1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/core/site-nav.js:5"}, "properties": {"repobilityId": "5b52c539da561f3c", "scanner": "scanner-primary", "fingerprint": "de3e98dcbd13b0e1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-bb7affb6d7f79dd4", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/preview/core/dialogs.js:19"}, "properties": {"repobilityId": "9defbd2f6b0b0d0b", "scanner": "scanner-primary", "fingerprint": "bb7affb6d7f79dd4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9225e342b5eb816b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 docs/preview/core/verification.js:287"}, "properties": {"repobilityId": "337f8926a353cc20", "scanner": "scanner-primary", "fingerprint": "9225e342b5eb816b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-87c7fb7a9320fc0f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/preview/core/verification.js:57"}, "properties": {"repobilityId": "e9fb152f972a1456", "scanner": "scanner-primary", "fingerprint": "87c7fb7a9320fc0f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-0939562f4fcf1329", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in backend/src/server.js:5"}, "properties": {"repobilityId": "228d2a37764ba7ad", "scanner": "scanner-primary", "fingerprint": "0939562f4fcf1329", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/src/server.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-9ae26b056aa45818", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/learn.html:1423"}, "properties": {"repobilityId": "7d1753d923786ce2", "scanner": "scanner-primary", "fingerprint": "9ae26b056aa45818", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/learn.html"}, "region": {"startLine": 1423}}}]}, {"ruleId": "scanner-42932f0693c46d93", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/index.html:114"}, "properties": {"repobilityId": "cba7363c134f7b1d", "scanner": "scanner-primary", "fingerprint": "42932f0693c46d93", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/index.html"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-353826792d186e67", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/negotiations/trainer.js:44"}, "properties": {"repobilityId": "cb473120c36c586f", "scanner": "scanner-primary", "fingerprint": "353826792d186e67", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/negotiations/trainer.js"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-518c42f67cb2ab27", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/negotiations/contact-trainer.js:20"}, "properties": {"repobilityId": "5e1a82af5f766c79", "scanner": "scanner-primary", "fingerprint": "518c42f67cb2ab27", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/negotiations/contact-trainer.js"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-87614e22565a7f6c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/tours/engine.js:536"}, "properties": {"repobilityId": "8f57f1e036516a03", "scanner": "scanner-primary", "fingerprint": "87614e22565a7f6c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/tours/engine.js"}, "region": {"startLine": 536}}}]}, {"ruleId": "scanner-4c7d9200d4aabf0f", "level": "error", "message": {"text": "Possible secret in docs/games/duel/rt-firebase.js"}, "properties": {"repobilityId": "aaca99c2af19a548", "scanner": "scanner-primary", "fingerprint": "4c7d9200d4aabf0f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/games/duel/rt-firebase.js"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-5c8a32543fd0d985", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/games/duel/duel-page.js:2193"}, "properties": {"repobilityId": "c390bcdeb3733029", "scanner": "scanner-primary", "fingerprint": "5c8a32543fd0d985", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/games/duel/duel-page.js"}, "region": {"startLine": 2193}}}]}, {"ruleId": "scanner-75ff7e09fc012a6f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/core/site-nav.js:5"}, "properties": {"repobilityId": "4dc60dce0b4d85f1", "scanner": "scanner-primary", "fingerprint": "75ff7e09fc012a6f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/core/site-nav.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-214fc69f608d7d11", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/core/site-nav.js:38"}, "properties": {"repobilityId": "05bd71e815db491c", "scanner": "scanner-primary", "fingerprint": "214fc69f608d7d11", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/core/site-nav.js"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-978210052d92d5ef", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/core/verification.js:57"}, "properties": {"repobilityId": "d79dfadb6b40cb6a", "scanner": "scanner-primary", "fingerprint": "978210052d92d5ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/core/verification.js"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-a891927080190ec0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/learn.html:1404"}, "properties": {"repobilityId": "d462a55dd302a596", "scanner": "scanner-primary", "fingerprint": "a891927080190ec0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/learn.html"}, "region": {"startLine": 1404}}}]}, {"ruleId": "scanner-b9ddd285517f8495", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/proposed-mechanics.html:277"}, "properties": {"repobilityId": "a5162aa07dccbef6", "scanner": "scanner-primary", "fingerprint": "b9ddd285517f8495", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/proposed-mechanics.html"}, "region": {"startLine": 277}}}]}, {"ruleId": "scanner-ef3fdedbd69aecea", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/index.html:115"}, "properties": {"repobilityId": "ff337337f2330faa", "scanner": "scanner-primary", "fingerprint": "ef3fdedbd69aecea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/index.html"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-8d63778a892f10ee", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/negotiations/trainer.js:44"}, "properties": {"repobilityId": "70e6dbc9a85b646b", "scanner": "scanner-primary", "fingerprint": "8d63778a892f10ee", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/negotiations/trainer.js"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-63ab7608e1c8611f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/negotiations/contact-trainer.js:20"}, "properties": {"repobilityId": "5df75313df01d519", "scanner": "scanner-primary", "fingerprint": "63ab7608e1c8611f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/negotiations/contact-trainer.js"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-30ed34932a5366bd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/tours/engine.js:536"}, "properties": {"repobilityId": "16c3707ceffc37b9", "scanner": "scanner-primary", "fingerprint": "30ed34932a5366bd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/tours/engine.js"}, "region": {"startLine": 536}}}]}, {"ruleId": "scanner-01631c462e9bcbf8", "level": "error", "message": {"text": "Possible secret in docs/preview/games/duel/rt-firebase.js"}, "properties": {"repobilityId": "6c911ea097df5377", "scanner": "scanner-primary", "fingerprint": "01631c462e9bcbf8", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/games/duel/rt-firebase.js"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-0eb5d5213e173d9b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/games/duel/duel-page.js:2193"}, "properties": {"repobilityId": "cacb14a63a95ba6b", "scanner": "scanner-primary", "fingerprint": "0eb5d5213e173d9b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/games/duel/duel-page.js"}, "region": {"startLine": 2193}}}]}, {"ruleId": "scanner-830035fa330ad591", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/core/site-nav.js:5"}, "properties": {"repobilityId": "187046bc7c901ea0", "scanner": "scanner-primary", "fingerprint": "830035fa330ad591", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/core/site-nav.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-d9c97ac7ee55bc2d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/preview/core/site-nav.js:38"}, "properties": {"repobilityId": "692d6ac54458a717", "scanner": "scanner-primary", "fingerprint": "d9c97ac7ee55bc2d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/core/site-nav.js"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-b39129e10a7aa9e0", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/preview/core/verification.js:57"}, "properties": {"repobilityId": "5fd6b5572f06e409", "scanner": "scanner-primary", "fingerprint": "b39129e10a7aa9e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/preview/core/verification.js"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c7b0656e54a8a817", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bee6b8956e03198c", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8ef93418bde27bdb", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b70dbcc8f54d72ab", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "419d1ec7943efec2", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-ad6701f0a8405e22", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8384c23520d55657", "scanner": "scanner-primary", "fingerprint": "ad6701f0a8405e22", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bc0d1d336ae8cdf5", "level": "note", "message": {"text": "Very large file: docs/app.js (1288 lines)"}, "properties": {"repobilityId": "2d8658c867c20fe5", "scanner": "scanner-primary", "fingerprint": "bc0d1d336ae8cdf5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-63ca0e7aab36757a", "level": "note", "message": {"text": "Very large file: docs/lessons/engine.js (1523 lines)"}, "properties": {"repobilityId": "21e5da0fd9cee0ce", "scanner": "scanner-primary", "fingerprint": "63ca0e7aab36757a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-246ccb20396e1e80", "level": "note", "message": {"text": "Very large file: docs/games/duel/content.bundle.js (14621 lines)"}, "properties": {"repobilityId": "22db6c91272fcdbe", "scanner": "scanner-primary", "fingerprint": "246ccb20396e1e80", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6eec856c6f914214", "level": "note", "message": {"text": "Very large file: docs/games/duel/duel.js (2318 lines)"}, "properties": {"repobilityId": "95dee42fb9bb2ac5", "scanner": "scanner-primary", "fingerprint": "6eec856c6f914214", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-13cd335e26022508", "level": "note", "message": {"text": "Very large file: docs/games/duel/duel-page.js (2279 lines)"}, "properties": {"repobilityId": "e3b1a12f2aef98a8", "scanner": "scanner-primary", "fingerprint": "13cd335e26022508", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4f6e120b1b341e41", "level": "note", "message": {"text": "Very large file: docs/games/duel/turnir-engine.js (1880 lines)"}, "properties": {"repobilityId": "a51f10721baccee1", "scanner": "scanner-primary", "fingerprint": "4f6e120b1b341e41", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3c870ad39790cbb6", "level": "note", "message": {"text": "Very large file: docs/core/yasna-3d.js (1524 lines)"}, "properties": {"repobilityId": "04a5a727a7a045a1", "scanner": "scanner-primary", "fingerprint": "3c870ad39790cbb6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c24d64038f6e0c9e", "level": "note", "message": {"text": "Very large file: docs/preview/app.js (1268 lines)"}, "properties": {"repobilityId": "e395af2193283d0a", "scanner": "scanner-primary", "fingerprint": "c24d64038f6e0c9e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6537ab981767dccc", "level": "note", "message": {"text": "Very large file: docs/preview/lessons/engine.js (1519 lines)"}, "properties": {"repobilityId": "55377fdd898dc3f8", "scanner": "scanner-primary", "fingerprint": "6537ab981767dccc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6d8370f6e3537c48", "level": "note", "message": {"text": "Very large file: docs/preview/games/duel/content.bundle.js (14621 lines)"}, "properties": {"repobilityId": "bc653bd4393aaacf", "scanner": "scanner-primary", "fingerprint": "6d8370f6e3537c48", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8fe6c0c1408141f0", "level": "note", "message": {"text": "Very large file: docs/preview/games/duel/duel.js (2318 lines)"}, "properties": {"repobilityId": "fd62fd22f1a1e5c2", "scanner": "scanner-primary", "fingerprint": "8fe6c0c1408141f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7ed268e297632daa", "level": "note", "message": {"text": "Very large file: docs/preview/games/duel/duel-page.js (2279 lines)"}, "properties": {"repobilityId": "fe00dcde52407197", "scanner": "scanner-primary", "fingerprint": "7ed268e297632daa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9bb83694c5325d35", "level": "note", "message": {"text": "Very large file: docs/preview/games/duel/turnir-engine.js (1880 lines)"}, "properties": {"repobilityId": "4d75182fd1c850fb", "scanner": "scanner-primary", "fingerprint": "9bb83694c5325d35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7602b9b5edb57379", "level": "note", "message": {"text": "Very large file: docs/preview/core/yasna-3d.js (1524 lines)"}, "properties": {"repobilityId": "7b51a75c53397085", "scanner": "scanner-primary", "fingerprint": "7602b9b5edb57379", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"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-3a092b5c39e242a1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: backend/package.json"}, "properties": {"repobilityId": "fc853e57ce7048c4", "scanner": "scanner-primary", "fingerprint": "3a092b5c39e242a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e8a76eb13fd3249", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: frontend/package.json"}, "properties": {"repobilityId": "d8c65da5b68ee95b", "scanner": "scanner-primary", "fingerprint": "0e8a76eb13fd3249", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "3530caf4cde15f5f", "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": "67c60ffc69e7a3da", "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": "df58b03493343009", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-7cc8061c9a425cf6", "level": "none", "message": {"text": "Commented-code block (12 lines) in tests/nav-responsive.spec.mjs:3"}, "properties": {"repobilityId": "7c6760edb2e5b1c1", "scanner": "scanner-primary", "fingerprint": "7cc8061c9a425cf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a310ce1cb1149303", "level": "note", "message": {"text": "Legacy-named symbol `yasna_custom_v1` in tests/custom-yasna.spec.mjs:6"}, "properties": {"repobilityId": "75b8c7870045f073", "scanner": "scanner-primary", "fingerprint": "a310ce1cb1149303", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb354984bc306c6d", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/custom-yasna.spec.mjs:3"}, "properties": {"repobilityId": "bcff05cc7e37d012", "scanner": "scanner-primary", "fingerprint": "eb354984bc306c6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03ec47e38e23ab80", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/smoke.spec.mjs:7"}, "properties": {"repobilityId": "954dfb4f6ef66502", "scanner": "scanner-primary", "fingerprint": "03ec47e38e23ab80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce9160bca2644c2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/serve.mjs:1"}, "properties": {"repobilityId": "81f8b98b1fdde8d8", "scanner": "scanner-primary", "fingerprint": "ce9160bca2644c2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c10e0ce9619d4cb3", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/validate-content.mjs:4"}, "properties": {"repobilityId": "65c4436c47b17e15", "scanner": "scanner-primary", "fingerprint": "c10e0ce9619d4cb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f4c8b28ae721355", "level": "note", "message": {"text": "Legacy-named symbol `themesWithoutLegacy` in scripts/build-content.mjs:212"}, "properties": {"repobilityId": "05901d8a602953bf", "scanner": "scanner-primary", "fingerprint": "1f4c8b28ae721355", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8b985b1ed995a616", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/build-content.mjs:4"}, "properties": {"repobilityId": "6d893c864f2e17a2", "scanner": "scanner-primary", "fingerprint": "8b985b1ed995a616", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9dcdd081f4b9d61", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/build.mjs:8"}, "properties": {"repobilityId": "6c3760bcc8967f30", "scanner": "scanner-primary", "fingerprint": "a9dcdd081f4b9d61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ebf1fa7e8d8bd4b", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/convert-unsupported.mjs:6"}, "properties": {"repobilityId": "987e1d37cdf8bec4", "scanner": "scanner-primary", "fingerprint": "3ebf1fa7e8d8bd4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afee8a4fa71bbd8d", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/content-publish.js:16"}, "properties": {"repobilityId": "4822a5b4e613c255", "scanner": "scanner-primary", "fingerprint": "afee8a4fa71bbd8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-441f32b06a66ffbf", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/leaderboard.js:1"}, "properties": {"repobilityId": "6260a42715f2c74f", "scanner": "scanner-primary", "fingerprint": "441f32b06a66ffbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c8c164ff7aec2d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/content-fetch.js:9"}, "properties": {"repobilityId": "9457409fa1674c73", "scanner": "scanner-primary", "fingerprint": "3c8c164ff7aec2d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d69244ecccd1c98", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/auth-telegram.js:1"}, "properties": {"repobilityId": "77236b5069b73135", "scanner": "scanner-primary", "fingerprint": "2d69244ecccd1c98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d97589e22f9c519f", "level": "note", "message": {"text": "Legacy-named symbol `yasna_custom_v1` in docs/app.js:776"}, "properties": {"repobilityId": "2e959c92859a0a75", "scanner": "scanner-primary", "fingerprint": "d97589e22f9c519f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-180da20329d5c08f", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/app.js:9"}, "properties": {"repobilityId": "f071fa8a9b8820b6", "scanner": "scanner-primary", "fingerprint": "180da20329d5c08f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bea8815e8eafbf2", "level": "note", "message": {"text": "Legacy-named symbol `yasna_admin_pwd_v1` in docs/admin.js:362"}, "properties": {"repobilityId": "ca44ee79b66f22ac", "scanner": "scanner-primary", "fingerprint": "8bea8815e8eafbf2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b9c0f9969e23d98d", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/admin.js:4"}, "properties": {"repobilityId": "ab82ead2d7e577d8", "scanner": "scanner-primary", "fingerprint": "b9c0f9969e23d98d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-caf51f8cd28e1261", "level": "none", "message": {"text": "Commented-code block (11 lines) in docs/lessons/lesson-4-line-names.js:5"}, "properties": {"repobilityId": "ba0bc1f028797451", "scanner": "scanner-primary", "fingerprint": "caf51f8cd28e1261", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d6b93333832d3b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/lessons/lesson-l3-morning.js:5"}, "properties": {"repobilityId": "8c24aa67052f9d11", "scanner": "scanner-primary", "fingerprint": "5d6b93333832d3b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7182777cf959f4fa", "level": "none", "message": {"text": "Commented-code block (9 lines) in docs/lessons/lesson-2-four-pillars.js:5"}, "properties": {"repobilityId": "bbcdc1c67bc348e8", "scanner": "scanner-primary", "fingerprint": "7182777cf959f4fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59e9c10a9a896bc5", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/lessons/engine.js:1"}, "properties": {"repobilityId": "1e95b1242f7504d6", "scanner": "scanner-primary", "fingerprint": "59e9c10a9a896bc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9cb6a0632d74c14", "level": "none", "message": {"text": "Commented-code block (9 lines) in docs/lessons/lesson-3-two-lines.js:5"}, "properties": {"repobilityId": "7afa07e65bd9d14a", "scanner": "scanner-primary", "fingerprint": "d9cb6a0632d74c14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1f2dfe7106df6bf", "level": "note", "message": {"text": "Legacy-named symbol `yasna_neg_progress_v1` in docs/negotiations/trainer.js:27"}, "properties": {"repobilityId": "e4f79a62778b0850", "scanner": "scanner-primary", "fingerprint": "c1f2dfe7106df6bf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-80cf95024c19aae4", "level": "note", "message": {"text": "Legacy-named symbol `yasna_negc_v1` in docs/negotiations/contact-trainer.js:36"}, "properties": {"repobilityId": "6c6194d98c94c0ab", "scanner": "scanner-primary", "fingerprint": "80cf95024c19aae4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f2a1a04a02e5790f", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/tours/tour-zhizni.js:1"}, "properties": {"repobilityId": "289b7809e20a13e2", "scanner": "scanner-primary", "fingerprint": "f2a1a04a02e5790f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-558f2d6d0d814dd2", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/tours/tour-goda.js:1"}, "properties": {"repobilityId": "ffb9f3b97f76754c", "scanner": "scanner-primary", "fingerprint": "558f2d6d0d814dd2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc100c9cca78f457", "level": "none", "message": {"text": "Commented-code block (8 lines) in docs/tours/tour-atm.js:1"}, "properties": {"repobilityId": "12b926ed0420eac7", "scanner": "scanner-primary", "fingerprint": "dc100c9cca78f457", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da56ce262e8d2698", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/tours/engine.js:4"}, "properties": {"repobilityId": "78cb5dcff3e3062d", "scanner": "scanner-primary", "fingerprint": "da56ce262e8d2698", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3f73e7d0bc789f3", "level": "none", "message": {"text": "Commented-code block (9 lines) in docs/tours/tour-peregovorov.js:1"}, "properties": {"repobilityId": "5a946af5d57a461d", "scanner": "scanner-primary", "fingerprint": "b3f73e7d0bc789f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05f38114aeef109f", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/tours/tour-atm-skrytyh.js:1"}, "properties": {"repobilityId": "bd1ac8b2ff07dc68", "scanner": "scanner-primary", "fingerprint": "05f38114aeef109f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd657cfc34707295", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/games/duel/duel-game-quiz.js:1"}, "properties": {"repobilityId": "697062d18599dced", "scanner": "scanner-primary", "fingerprint": "fd657cfc34707295", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f02d3b9ea0929f3f", "level": "note", "message": {"text": "Legacy-named symbol `questionsLegacy` in docs/games/duel/content.bundle.js:8"}, "properties": {"repobilityId": "f72be3f3732a814f", "scanner": "scanner-primary", "fingerprint": "f02d3b9ea0929f3f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-972a21cbcd0e8cba", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/games/duel/content.bundle.js:1"}, "properties": {"repobilityId": "2cf192bbf17a7795", "scanner": "scanner-primary", "fingerprint": "972a21cbcd0e8cba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ece683a311611b36", "level": "note", "message": {"text": "Legacy-named symbol `tryLegacy` in docs/games/duel/duel.js:103"}, "properties": {"repobilityId": "89eb300180eeebed", "scanner": "scanner-primary", "fingerprint": "ece683a311611b36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-945bcb78ccb04863", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/games/duel/duel.js:4"}, "properties": {"repobilityId": "81d7722cce4be937", "scanner": "scanner-primary", "fingerprint": "945bcb78ccb04863", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3f28a5e53e58f1e", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/games/duel/rt-firebase.js:4"}, "properties": {"repobilityId": "b7bae1af24161374", "scanner": "scanner-primary", "fingerprint": "c3f28a5e53e58f1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3911a0f310f2b474", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/games/duel/duel-games.js:1"}, "properties": {"repobilityId": "831cd2469bc7dedd", "scanner": "scanner-primary", "fingerprint": "3911a0f310f2b474", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f680ad50ebb265b3", "level": "note", "message": {"text": "Legacy-named symbol `questionsLegacy` in docs/games/duel/trivia-bank.js:399"}, "properties": {"repobilityId": "abf4d7a09fe40e02", "scanner": "scanner-primary", "fingerprint": "f680ad50ebb265b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-146f95cbef42b1ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/games/duel/trivia-bank.js:268"}, "properties": {"repobilityId": "988f6ffd565bf8db", "scanner": "scanner-primary", "fingerprint": "146f95cbef42b1ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4a1e79c249a5d0e", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/games/duel/duel-page.js:101"}, "properties": {"repobilityId": "efcf9c09af47d14d", "scanner": "scanner-primary", "fingerprint": "e4a1e79c249a5d0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e962faeac2315315", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/games/duel/duel-page.js:900"}, "properties": {"repobilityId": "1244a912903c1e2a", "scanner": "scanner-primary", "fingerprint": "e962faeac2315315", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7de116cd9e5ffd31", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/games/duel/group-engine.js:1"}, "properties": {"repobilityId": "db3865ef5fb1c8ae", "scanner": "scanner-primary", "fingerprint": "7de116cd9e5ffd31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-220b98d60a5fc9cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/games/duel/turnir-engine.js:1"}, "properties": {"repobilityId": "2c472a5977c4e33b", "scanner": "scanner-primary", "fingerprint": "220b98d60a5fc9cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c717a19971364c7b", "level": "none", "message": {"text": "Commented-code block (13 lines) in docs/core/sky-real.js:1"}, "properties": {"repobilityId": "9b1b94ee848f44ec", "scanner": "scanner-primary", "fingerprint": "c717a19971364c7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2353574ddb409f7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/core/sky-real.js:28"}, "properties": {"repobilityId": "deae9ad424070f06", "scanner": "scanner-primary", "fingerprint": "2353574ddb409f7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-42d49faaabe6266c", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/core/yasna-3d.js:1"}, "properties": {"repobilityId": "19dcf359d4d82dcf", "scanner": "scanner-primary", "fingerprint": "42d49faaabe6266c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb775ac1b637be8b", "level": "none", "message": {"text": "Commented-code block (8 lines) in docs/core/astro-panel.js:4"}, "properties": {"repobilityId": "64c379008dc988dc", "scanner": "scanner-primary", "fingerprint": "bb775ac1b637be8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a58aebf74891c1a8", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/core/yasna-star.js:1"}, "properties": {"repobilityId": "38427a142a61ad87", "scanner": "scanner-primary", "fingerprint": "a58aebf74891c1a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e14c7d48722ff50", "level": "note", "message": {"text": "Legacy-named symbol `yasna_content_overrides_cache_v1` in docs/core/content-store.js:30"}, "properties": {"repobilityId": "40680eaf0b68b05c", "scanner": "scanner-primary", "fingerprint": "9e14c7d48722ff50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6373d58ba0cd8a1b", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/core/content-store.js:9"}, "properties": {"repobilityId": "9b653d51cbe92f5e", "scanner": "scanner-primary", "fingerprint": "6373d58ba0cd8a1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d3d1075f1b03da0", "level": "note", "message": {"text": "Legacy-named symbol `yasna_custom_v1` in docs/core/dialogs.js:204"}, "properties": {"repobilityId": "da79f7ae8bf93c50", "scanner": "scanner-primary", "fingerprint": "8d3d1075f1b03da0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bd973d5cea9587a6", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/core/dialogs.js:1"}, "properties": {"repobilityId": "412fe1d4a2df909e", "scanner": "scanner-primary", "fingerprint": "bd973d5cea9587a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e092ee16bd5df35", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/core/data.js:1"}, "properties": {"repobilityId": "25380e4ae2ba73d0", "scanner": "scanner-primary", "fingerprint": "9e092ee16bd5df35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48f2394720c152dc", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/core/info-card.js:1"}, "properties": {"repobilityId": "171ca4b9a08161d6", "scanner": "scanner-primary", "fingerprint": "48f2394720c152dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdc185e3543ed46a", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/core/verification.js:1"}, "properties": {"repobilityId": "71ae6be610b3ec02", "scanner": "scanner-primary", "fingerprint": "cdc185e3543ed46a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-217a418a03f47edb", "level": "note", "message": {"text": "Legacy-named symbol `yasna_custom_v1` in docs/preview/app.js:776"}, "properties": {"repobilityId": "83ad097d83c6b49b", "scanner": "scanner-primary", "fingerprint": "217a418a03f47edb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-90fa59fb90f35439", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/app.js:9"}, "properties": {"repobilityId": "dd3bafd6e40a3412", "scanner": "scanner-primary", "fingerprint": "90fa59fb90f35439", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe678df3bb006e5f", "level": "note", "message": {"text": "Legacy-named symbol `yasna_admin_pwd_v1` in docs/preview/admin.js:362"}, "properties": {"repobilityId": "f6023669edd16ac2", "scanner": "scanner-primary", "fingerprint": "fe678df3bb006e5f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-36d7dd3ff9dbbd4e", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/preview/admin.js:4"}, "properties": {"repobilityId": "04dd7b50956fdd96", "scanner": "scanner-primary", "fingerprint": "36d7dd3ff9dbbd4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89c90ced05028cc7", "level": "none", "message": {"text": "Commented-code block (11 lines) in docs/preview/lessons/lesson-4-line-names.js:5"}, "properties": {"repobilityId": "0fcc8ff178c7e369", "scanner": "scanner-primary", "fingerprint": "89c90ced05028cc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6584a38028d18881", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/lessons/lesson-l3-morning.js:5"}, "properties": {"repobilityId": "b0759c187ca9b668", "scanner": "scanner-primary", "fingerprint": "6584a38028d18881", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c538963d618a3058", "level": "none", "message": {"text": "Commented-code block (9 lines) in docs/preview/lessons/lesson-2-four-pillars.js:5"}, "properties": {"repobilityId": "b4b634c89304dfe2", "scanner": "scanner-primary", "fingerprint": "c538963d618a3058", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39bb81ce916aadf8", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/preview/lessons/engine.js:1"}, "properties": {"repobilityId": "af673bfc3d090c46", "scanner": "scanner-primary", "fingerprint": "39bb81ce916aadf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee6aa2e1834c484c", "level": "none", "message": {"text": "Commented-code block (9 lines) in docs/preview/lessons/lesson-3-two-lines.js:5"}, "properties": {"repobilityId": "2cf10d201bb42780", "scanner": "scanner-primary", "fingerprint": "ee6aa2e1834c484c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0694b286a3a5ce6", "level": "note", "message": {"text": "Legacy-named symbol `yasna_neg_progress_v1` in docs/preview/negotiations/trainer.js:27"}, "properties": {"repobilityId": "3a4c30b880315ea7", "scanner": "scanner-primary", "fingerprint": "b0694b286a3a5ce6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-73212b45b092778e", "level": "note", "message": {"text": "Legacy-named symbol `yasna_negc_v1` in docs/preview/negotiations/contact-trainer.js:36"}, "properties": {"repobilityId": "337eace4ba641b23", "scanner": "scanner-primary", "fingerprint": "73212b45b092778e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-33608f97b8909244", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/preview/tours/tour-zhizni.js:1"}, "properties": {"repobilityId": "6758f19d312a7ef9", "scanner": "scanner-primary", "fingerprint": "33608f97b8909244", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0002474bb8b2a71b", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/tours/tour-goda.js:1"}, "properties": {"repobilityId": "08d008fb3411a941", "scanner": "scanner-primary", "fingerprint": "0002474bb8b2a71b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5be00782231a2e8", "level": "none", "message": {"text": "Commented-code block (8 lines) in docs/preview/tours/tour-atm.js:1"}, "properties": {"repobilityId": "954e1dcb7e6906f6", "scanner": "scanner-primary", "fingerprint": "e5be00782231a2e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa190cf16b179c11", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/tours/engine.js:4"}, "properties": {"repobilityId": "ae688edf72cb9790", "scanner": "scanner-primary", "fingerprint": "fa190cf16b179c11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d8de58756aead07", "level": "none", "message": {"text": "Commented-code block (9 lines) in docs/preview/tours/tour-peregovorov.js:1"}, "properties": {"repobilityId": "ea65e93a8c68c5cf", "scanner": "scanner-primary", "fingerprint": "0d8de58756aead07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-251e9464d0d562d3", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/preview/tours/tour-atm-skrytyh.js:1"}, "properties": {"repobilityId": "c1f194895e6466fe", "scanner": "scanner-primary", "fingerprint": "251e9464d0d562d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc9bbfda0f0665c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/duel-game-quiz.js:1"}, "properties": {"repobilityId": "979bc07f2fb174d6", "scanner": "scanner-primary", "fingerprint": "dc9bbfda0f0665c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89109ad948f4d745", "level": "note", "message": {"text": "Legacy-named symbol `questionsLegacy` in docs/preview/games/duel/content.bundle.js:8"}, "properties": {"repobilityId": "a761800b41e9484e", "scanner": "scanner-primary", "fingerprint": "89109ad948f4d745", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0404f4b3bd914d4a", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/content.bundle.js:1"}, "properties": {"repobilityId": "c9029fe024935a20", "scanner": "scanner-primary", "fingerprint": "0404f4b3bd914d4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b96ca62039bacfa7", "level": "note", "message": {"text": "Legacy-named symbol `tryLegacy` in docs/preview/games/duel/duel.js:103"}, "properties": {"repobilityId": "6ae5b1318b1355fe", "scanner": "scanner-primary", "fingerprint": "b96ca62039bacfa7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e406b9fa0223d892", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/preview/games/duel/duel.js:4"}, "properties": {"repobilityId": "2faae27a48757665", "scanner": "scanner-primary", "fingerprint": "e406b9fa0223d892", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2867d98a036ddde0", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/preview/games/duel/rt-firebase.js:4"}, "properties": {"repobilityId": "fdcae6e54e53c124", "scanner": "scanner-primary", "fingerprint": "2867d98a036ddde0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-029c3a8e434ec243", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/duel-games.js:1"}, "properties": {"repobilityId": "a2d33dd33fcf6d31", "scanner": "scanner-primary", "fingerprint": "029c3a8e434ec243", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9adb68dc4d187982", "level": "note", "message": {"text": "Legacy-named symbol `questionsLegacy` in docs/preview/games/duel/trivia-bank.js:399"}, "properties": {"repobilityId": "28c91fef6e7c52c6", "scanner": "scanner-primary", "fingerprint": "9adb68dc4d187982", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5432456c2878832d", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/preview/games/duel/trivia-bank.js:268"}, "properties": {"repobilityId": "d0a45a2be3f02b8c", "scanner": "scanner-primary", "fingerprint": "5432456c2878832d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24b4c445de01568a", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/preview/games/duel/duel-page.js:101"}, "properties": {"repobilityId": "54793ffda2dfdbbb", "scanner": "scanner-primary", "fingerprint": "24b4c445de01568a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1634af31c3938b48", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/preview/games/duel/duel-page.js:900"}, "properties": {"repobilityId": "6bc74033eaaa1b0a", "scanner": "scanner-primary", "fingerprint": "1634af31c3938b48", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b759592439c62a1c", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/group-engine.js:1"}, "properties": {"repobilityId": "b3d9a95dfc7174c3", "scanner": "scanner-primary", "fingerprint": "b759592439c62a1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c1804def45381c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/preview/games/duel/turnir-engine.js:1"}, "properties": {"repobilityId": "251429064affcb28", "scanner": "scanner-primary", "fingerprint": "1c1804def45381c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da630868de664f39", "level": "none", "message": {"text": "Commented-code block (13 lines) in docs/preview/core/sky-real.js:1"}, "properties": {"repobilityId": "85839823f4235f43", "scanner": "scanner-primary", "fingerprint": "da630868de664f39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50f747406e8ae4f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/preview/core/sky-real.js:28"}, "properties": {"repobilityId": "31480e0137298baa", "scanner": "scanner-primary", "fingerprint": "50f747406e8ae4f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4dfc2fd3ef2a73b", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/preview/core/yasna-3d.js:1"}, "properties": {"repobilityId": "7f1729f014da7150", "scanner": "scanner-primary", "fingerprint": "c4dfc2fd3ef2a73b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a32dcbd726131b8", "level": "none", "message": {"text": "Commented-code block (8 lines) in docs/preview/core/astro-panel.js:4"}, "properties": {"repobilityId": "b55b25e58b96edc6", "scanner": "scanner-primary", "fingerprint": "1a32dcbd726131b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43e3a111de46ed6d", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/preview/core/yasna-star.js:1"}, "properties": {"repobilityId": "cf6fb6f9583bd03e", "scanner": "scanner-primary", "fingerprint": "43e3a111de46ed6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f17eb1e26e2c689d", "level": "note", "message": {"text": "Legacy-named symbol `yasna_content_overrides_cache_v1` in docs/preview/core/content-store.js:30"}, "properties": {"repobilityId": "ddc5eb0778f51ffa", "scanner": "scanner-primary", "fingerprint": "f17eb1e26e2c689d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a86c362c4b425e3", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/preview/core/content-store.js:9"}, "properties": {"repobilityId": "31186bcdfb76eef5", "scanner": "scanner-primary", "fingerprint": "1a86c362c4b425e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d907c45d23a3ce58", "level": "note", "message": {"text": "Legacy-named symbol `yasna_custom_v1` in docs/preview/core/dialogs.js:204"}, "properties": {"repobilityId": "3508ac6427f97114", "scanner": "scanner-primary", "fingerprint": "d907c45d23a3ce58", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0a778cca3e79507b", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/preview/core/dialogs.js:1"}, "properties": {"repobilityId": "091ea0d036cb8118", "scanner": "scanner-primary", "fingerprint": "0a778cca3e79507b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60bcf173da45081b", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/preview/core/data.js:1"}, "properties": {"repobilityId": "0d8ede90486b53d4", "scanner": "scanner-primary", "fingerprint": "60bcf173da45081b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b14c91fa979c483", "level": "none", "message": {"text": "Commented-code block (7 lines) in docs/preview/core/info-card.js:1"}, "properties": {"repobilityId": "01a0d2232ab0c0c1", "scanner": "scanner-primary", "fingerprint": "2b14c91fa979c483", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dfa018f041e36df", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/preview/core/verification.js:1"}, "properties": {"repobilityId": "132460305fcebcc8", "scanner": "scanner-primary", "fingerprint": "6dfa018f041e36df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e3d879e4d82553d1", "level": "error", "message": {"text": "Dangling fetch: POST /submit (docs/games/duel/duel.js:434)"}, "properties": {"repobilityId": "903e30b97d7c93a2", "scanner": "scanner-primary", "fingerprint": "e3d879e4d82553d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd62edab7e0cf6dd", "level": "error", "message": {"text": "Dangling fetch: POST /submit (docs/preview/games/duel/duel.js:434)"}, "properties": {"repobilityId": "ad66277e874baa77", "scanner": "scanner-primary", "fingerprint": "cd62edab7e0cf6dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-432b1196b96760fb", "level": "note", "message": {"text": "Unused endpoint: GET /api/engine/position/:i"}, "properties": {"repobilityId": "a933f37dc1b13be0", "scanner": "scanner-primary", "fingerprint": "432b1196b96760fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d33aab886b44a918", "level": "note", "message": {"text": "Unused endpoint: GET /api/engine/crosses"}, "properties": {"repobilityId": "3d87587cc140b299", "scanner": "scanner-primary", "fingerprint": "d33aab886b44a918", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f731c0760edac8db", "level": "note", "message": {"text": "Unused endpoint: GET /api/engine/pranas"}, "properties": {"repobilityId": "ee00a303f900b088", "scanner": "scanner-primary", "fingerprint": "f731c0760edac8db", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}