{"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-4a491b617c06d8eb", "name": "Stray `console.log` in TS/JS \u2014 server.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.ts:58"}, "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-85ccf1c0f342bde6", "name": "Stray `console.log` in TS/JS \u2014 nip46-bunker.js:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 nip46-bunker.js:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c72baf8aa56ed43", "name": "Stray `console.log` in TS/JS \u2014 src/main.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/main.ts:141"}, "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-09797d5abc2b46c0", "name": "Stray `console.log` in TS/JS \u2014 src/nostr-auth-security-kit.js:241", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr-auth-security-kit.js:241"}, "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-3b74350ef6973eb2", "name": "Icon-only button without accessible name \u2014 src/scenes/WoodsScene.ts:1474", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/scenes/WoodsScene.ts:1474"}, "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-14835b9d33eaf75e", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/feedService.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/feedService.ts: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-e1614ad2284c4929", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/presenceService.ts:442", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/presenceService.ts:442"}, "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-8ff825fc77e66018", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/channelService.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/channelService.ts:106"}, "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-0ad73ee5d9bf5858", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/nostrService.ts:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/nostrService.ts:204"}, "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-e64ea90e98fd07f6", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/dmService.ts:179", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/dmService.ts:179"}, "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-5b31a3601ffeef94", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/zapService.ts:497", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/zapService.ts:497"}, "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-9ff270a6138d588a", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/relayManager.ts:189", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/relayManager.ts:189"}, "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-0ef7bd4bb5ee323a", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/pollService.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/pollService.ts:69"}, "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-b431bf99520f8cb6", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/emojiService.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/emojiService.ts:111"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-750dffbb10ded27e", "name": "Stray `console.log` in TS/JS \u2014 src/nostr/sparkService.ts:241", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/sparkService.ts:241"}, "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-944f55d1763f96d5", "name": "TODO/FIXME marker in shipping code \u2014 src/stores/marketStore.ts:295", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/stores/marketStore.ts:295"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e6423176b465a16", "name": "Stray `console.log` in TS/JS \u2014 src/stores/tradeItemStore.ts:759", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/stores/tradeItemStore.ts:759"}, "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-14d78537d4a5d4c4", "name": "Stray `console.log` in TS/JS \u2014 src/stores/passkeyStore.ts:191", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/stores/passkeyStore.ts:191"}, "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-d1e88978d696c68d", "name": "Icon-only button without accessible name \u2014 src/ui/ComputerUI.ts:117", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/ComputerUI.ts:117"}, "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-80db3512bcfcaa3a", "name": "Icon-only button without accessible name \u2014 src/ui/WalletPanel.ts:229", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/WalletPanel.ts:229"}, "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-c964939e2dd9c82c", "name": "Icon-only button without accessible name \u2014 src/ui/BazaarPanel.ts:288", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/BazaarPanel.ts:288"}, "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-908e14d7e3ade39f", "name": "Icon-only button without accessible name \u2014 src/ui/PollBoard.ts:201", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/PollBoard.ts:201"}, "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-52e520b2467a4d44", "name": "Icon-only button without accessible name \u2014 src/ui/ZapModal.ts:57", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/ZapModal.ts:57"}, "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-cac859783f77c405", "name": "Icon-only button without accessible name \u2014 src/ui/FollowsPanel.ts:437", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/FollowsPanel.ts:437"}, "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-f17325cca4c24037", "name": "Icon-only button without accessible name \u2014 src/ui/DMPanel.ts:293", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/DMPanel.ts:293"}, "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-059ff34f1e0c963b", "name": "Icon-only button without accessible name \u2014 src/ui/MarketPanel.ts:279", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/MarketPanel.ts:279"}, "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-7c0e45f613aaa785", "name": "Stray `console.log` in TS/JS \u2014 src/ui/MarketPanel.ts:846", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/ui/MarketPanel.ts:846"}, "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-ce1362737ca2ec64", "name": "Icon-only button without accessible name \u2014 src/ui/NostrThemeBrowser.ts:237", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/NostrThemeBrowser.ts:237"}, "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-86ce6ab126a9695b", "name": "Icon-only button without accessible name \u2014 src/ui/CardTableModal.ts:126", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/CardTableModal.ts:126"}, "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-4b7ebb4cc79bd18d", "name": "Icon-only button without accessible name \u2014 src/ui/MuteList.ts:75", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/MuteList.ts:75"}, "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-314fa339a544765d", "name": "Icon-only button without accessible name \u2014 src/ui/HotkeyModal.ts:130", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/HotkeyModal.ts:130"}, "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-e61a56e52a58675a", "name": "Icon-only button without accessible name \u2014 src/ui/EmojiPackBrowser.ts:168", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/EmojiPackBrowser.ts:168"}, "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-b6d3216bf11de246", "name": "Icon-only button without accessible name \u2014 src/ui/SettingsPanel.ts:549", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/SettingsPanel.ts:549"}, "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-d781f3747c67abaf", "name": "Icon-only button without accessible name \u2014 src/ui/computer/WardrobeTab.ts:344", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/computer/WardrobeTab.ts:344"}, "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-9ee7c24783b91ca5", "name": "Icon-only button without accessible name \u2014 src/ui/market/MarketInvoice.ts:69", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/ui/market/MarketInvoice.ts:69"}, "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-83deff28a5de1e7b", "name": "Stray `console.log` in TS/JS \u2014 src/entities/avatar/devRefresh.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/entities/avatar/devRefresh.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d07b7835e0709e57", "name": "Insecure pattern 'direct_innerhtml_assignment' in nip46-bunker.js:167", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in nip46-bunker.js:167"}, "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-e92359a30873cfdd", "name": "Insecure pattern 'cors_wildcard' in functions/api/translate.js:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in functions/api/translate.js:20"}, "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-785d990594302c40", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/main.ts:110", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/main.ts:110"}, "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-0cc2336f742d8cc8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/BaseScene.ts:1430", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/BaseScene.ts:1430"}, "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-87b737c2a027e3d9", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/CabinScene.ts:748", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/CabinScene.ts:748"}, "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-b5d92c78b77c14ab", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/WoodsScene.ts:1471", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/WoodsScene.ts:1471"}, "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-afa14ce0e5e2c6ee", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/room/RoomRequestToast.ts:16", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/room/RoomRequestToast.ts:16"}, "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-c55824fca3b0e3c7", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/nostr/presenceService.ts:287", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/nostr/presenceService.ts:287"}, "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-a6bf6a6929a449d7", "name": "Possible secret in src/config/game.config.ts", "shortDescription": {"text": "Possible secret in src/config/game.config.ts"}, "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-c097a7eb4d2ddb65", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletInfo.ts:30", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletInfo.ts:30"}, "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-0da04aa834b7d477", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ZapToast.ts:91", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ZapToast.ts:91"}, "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-3fe3813e173e5d57", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ComputerUI.ts:111", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ComputerUI.ts:111"}, "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-ea68f818afe1c0ac", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BountyBoardPanel.ts:152", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BountyBoardPanel.ts:152"}, "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-efe58df99b423c7e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletPanel.ts:186", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletPanel.ts:186"}, "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-2db83802a4581a87", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BazaarPanel.ts:286", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BazaarPanel.ts:286"}, "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-10a6ff2442fd2fb7", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PollBoard.ts:115", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PollBoard.ts: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-e5bdf0f8b1681821", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ndConfirm.ts:116", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ndConfirm.ts:116"}, "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-3e42a03795707905", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ZapModal.ts:50", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ZapModal.ts:50"}, "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-309b566eacf31256", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletHUD.ts:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletHUD.ts:48"}, "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-c43ac1b7d3cfc83c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/CrewPanel.ts:136", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/CrewPanel.ts:136"}, "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-0791b1d2d9e1371f", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/FollowsPanel.ts:276", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/FollowsPanel.ts:276"}, "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-853096ffbbef7907", "name": "Insecure pattern 'direct_outerhtml_assignment' in src/ui/FollowsPanel.ts:291", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in src/ui/FollowsPanel.ts:291"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-927735248b8591ca", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/FortuneTellerModal.ts:149", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/FortuneTellerModal.ts:149"}, "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-d684efcbd5a990a3", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ChatUI.ts:233", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ChatUI.ts:233"}, "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-6973185b57bd67aa", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PlayerMenu.ts:92", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PlayerMenu.ts:92"}, "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-db5a113f1534c1d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WorldMap.ts:209", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WorldMap.ts:209"}, "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-bbf15f7fbee61925", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/DMPanel.ts:290", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/DMPanel.ts:290"}, "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-3474211efaa06c14", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/MarketPanel.ts:160", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/MarketPanel.ts:160"}, "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-88b5ea12ea042da0", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BookcaseModal.ts:185", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BookcaseModal.ts:185"}, "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-4d4245ca1b86c1fc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/GifPicker.ts:137", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/GifPicker.ts:137"}, "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-c87bc833485acb22", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/NostrThemeBrowser.ts:233", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/NostrThemeBrowser.ts:233"}, "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-e4758dc88190e352", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoginScreen.ts:90", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoginScreen.ts:90"}, "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-a5958ce45bcb214b", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LanguageModal.ts:108", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LanguageModal.ts:108"}, "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-b45ff448f8929c87", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/TutorialOverlay.ts:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/TutorialOverlay.ts:56"}, "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-70ae31c9ca350b87", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/CardTableModal.ts:88", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/CardTableModal.ts:88"}, "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-5cb71b2ebe930d78", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/MuteList.ts:71", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/MuteList.ts:71"}, "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-fc8d740ee24eabfe", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/HotkeyModal.ts:126", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/HotkeyModal.ts:126"}, "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-b0af32f50ce6e2cc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoungeLiveBanner.ts:274", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoungeLiveBanner.ts:274"}, "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-1555b58cf112efd4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ExtensionWarning.ts:59", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ExtensionWarning.ts:59"}, "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-eafb184d3dda92f4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/emojiAutocomplete.ts:81", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/emojiAutocomplete.ts:81"}, "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-17fb430082d3b6d8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/EmojiPackBrowser.ts:164", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/EmojiPackBrowser.ts:164"}, "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-431b9c5d3eef24d4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PlayerPicker.ts:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PlayerPicker.ts:22"}, "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-b2a36085c4586fb5", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/SettingsPanel.ts:155", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/SettingsPanel.ts:155"}, "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-a2d2c52893ad1ab4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoginInfo.ts:67", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoginInfo.ts:67"}, "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-f225280e23dcec91", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ActivityLogModal.ts:156", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ActivityLogModal.ts:156"}, "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-e1c12020cb95a012", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ProfileModal.ts:155", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ProfileModal.ts:155"}, "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-f2cad53d88133337", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/SolitaireGame.ts:167", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/SolitaireGame.ts:167"}, "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-3c13eda9aafc64bc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/GoFishGame.ts:106", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/GoFishGame.ts:106"}, "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-196321751f05ca21", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/cardGameService.ts:184", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/cardGameService.ts:184"}, "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-8af41dcd286eebfa", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/PokerGame.ts:157", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/PokerGame.ts:157"}, "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-d5dfeb0b4d8572c2", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/WarGame.ts:233", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/WarGame.ts:233"}, "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-7f70e066f75219a8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/BlackjackGame.ts:185", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/BlackjackGame.ts:185"}, "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-aa6fd7de0ebd5708", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/ProfileTab.ts:21", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/ProfileTab.ts:21"}, "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-461afcee102f3810", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/WardrobeTab.ts:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/WardrobeTab.ts:35"}, "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-4246709eef95f178", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/RoomTab.ts:134", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/RoomTab.ts:134"}, "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-cac05d23ac06eb93", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/market/MarketPreview.ts:117", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/market/MarketPreview.ts:117"}, "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-cb7838c5223af860", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/market/MarketInvoice.ts:66", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/market/MarketInvoice.ts:66"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12561d8dcf52929a", "name": "Very large file: server.ts (2199 lines)", "shortDescription": {"text": "Very large file: server.ts (2199 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-ddd05f441fb9be7b", "name": "Very large file: src/scenes/BaseScene.ts (2441 lines)", "shortDescription": {"text": "Very large file: src/scenes/BaseScene.ts (2441 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-48db897abb8dbfb5", "name": "Very large file: src/scenes/CabinScene.ts (1261 lines)", "shortDescription": {"text": "Very large file: src/scenes/CabinScene.ts (1261 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-f0554bad7231eb2d", "name": "Very large file: src/scenes/AlleyScene.ts (1155 lines)", "shortDescription": {"text": "Very large file: src/scenes/AlleyScene.ts (1155 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-43fd5a1f8b3c1835", "name": "Very large file: src/scenes/WoodsScene.ts (2438 lines)", "shortDescription": {"text": "Very large file: src/scenes/WoodsScene.ts (2438 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-ee2ec87ef8841942", "name": "Very large file: src/nostr/crewService.ts (2036 lines)", "shortDescription": {"text": "Very large file: src/nostr/crewService.ts (2036 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-469ade298374808b", "name": "Very large file: src/stores/tradeItemStore.ts (2398 lines)", "shortDescription": {"text": "Very large file: src/stores/tradeItemStore.ts (2398 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-877c2ca3eabd5327", "name": "Very large file: src/ui/BazaarPanel.ts (1704 lines)", "shortDescription": {"text": "Very large file: src/ui/BazaarPanel.ts (1704 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-11794220a75105dd", "name": "Very large file: src/ui/PollBoard.ts (1232 lines)", "shortDescription": {"text": "Very large file: src/ui/PollBoard.ts (1232 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-54b1926977fba411", "name": "Very large file: src/ui/CrewPanel.ts (2384 lines)", "shortDescription": {"text": "Very large file: src/ui/CrewPanel.ts (2384 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-cc1f0df9d73ae7de", "name": "Very large file: src/ui/DMPanel.ts (1313 lines)", "shortDescription": {"text": "Very large file: src/ui/DMPanel.ts (1313 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-cb4401e6114d1900", "name": "Very large file: src/ui/LoginScreen.ts (2056 lines)", "shortDescription": {"text": "Very large file: src/ui/LoginScreen.ts (2056 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-326adfda85188d85", "name": "Very large file: src/ui/computer/RoomTab.ts (1106 lines)", "shortDescription": {"text": "Very large file: src/ui/computer/RoomTab.ts (1106 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": "0 test file(s) for 171 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 176 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 96 placeholder/mock markers across 26 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77293e9621bb787f", "name": "Commented-code block (8 lines) in server.ts:22", "shortDescription": {"text": "Commented-code block (8 lines) in server.ts:22"}, "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-99fcb32d9d752f2c", "name": "Commented-code block (5 lines) in nip46-bunker.js:218", "shortDescription": {"text": "Commented-code block (5 lines) in nip46-bunker.js:218"}, "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-fb963f51861b4f91", "name": "Commented-code block (5 lines) in functions/api/relay.js:53", "shortDescription": {"text": "Commented-code block (5 lines) in functions/api/relay.js:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88569e8eb6c392ef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n-fill.mjs:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n-fill.mjs:76"}, "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-f6508afda67b4bca", "name": "Commented-code block (5 lines) in src/scenes/BaseScene.ts:660", "shortDescription": {"text": "Commented-code block (5 lines) in src/scenes/BaseScene.ts:660"}, "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-4a4cf2ec15d519e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/scenes/WoodsScene.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scenes/WoodsScene.ts:67"}, "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-34ebc797532aae08", "name": "Commented-code block (9 lines) in src/nostr/nostrService.ts:69", "shortDescription": {"text": "Commented-code block (9 lines) in src/nostr/nostrService.ts:69"}, "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-126acea49b5b1842", "name": "Legacy-named symbol `nip44_v2` in src/nostr/nwcService.ts:300", "shortDescription": {"text": "Legacy-named symbol `nip44_v2` in src/nostr/nwcService.ts:300"}, "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-3153969e0dc4ef86", "name": "Commented-code block (6 lines) in src/nostr/dmService.ts:524", "shortDescription": {"text": "Commented-code block (6 lines) in src/nostr/dmService.ts:524"}, "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-963a551f42848cd1", "name": "Legacy-named symbol `nd_zap_messages_v1` in src/nostr/zapService.ts:22", "shortDescription": {"text": "Legacy-named symbol `nd_zap_messages_v1` in src/nostr/zapService.ts:22"}, "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-31abf7ca1cc6fc2e", "name": "Commented-code block (6 lines) in src/nostr/zapService.ts:16", "shortDescription": {"text": "Commented-code block (6 lines) in src/nostr/zapService.ts: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-dbb599442f3bf568", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/nostr/zapService.ts:149", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/nostr/zapService.ts:149"}, "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-5c856088598ca9bd", "name": "Commented-code block (8 lines) in src/nostr/crewService.ts:149", "shortDescription": {"text": "Commented-code block (8 lines) in src/nostr/crewService.ts:149"}, "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-0fd48f05ed28da90", "name": "Commented-code block (7 lines) in src/nostr/sparkService.ts:73", "shortDescription": {"text": "Commented-code block (7 lines) in src/nostr/sparkService.ts:73"}, "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-83354162a0442620", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/stores/priceService.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/stores/priceService.ts:17"}, "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-1232f6a7cf6016e9", "name": "Commented-code block (9 lines) in src/stores/unlockStore.ts:69", "shortDescription": {"text": "Commented-code block (9 lines) in src/stores/unlockStore.ts:69"}, "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-1946a3792c4c4a33", "name": "Commented-code block (5 lines) in src/stores/marketStore.ts:144", "shortDescription": {"text": "Commented-code block (5 lines) in src/stores/marketStore.ts:144"}, "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-a26beeffebbab944", "name": "Legacy-named symbol `nd_holiday_state_v2` in src/stores/tradeItemStore.ts:1930", "shortDescription": {"text": "Legacy-named symbol `nd_holiday_state_v2` in src/stores/tradeItemStore.ts:1930"}, "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-34796bd0b422252f", "name": "Commented-code block (7 lines) in src/stores/tradeItemStore.ts:599", "shortDescription": {"text": "Commented-code block (7 lines) in src/stores/tradeItemStore.ts:599"}, "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-75bdb060365bff28", "name": "Legacy-named symbol `nostr_district_passkeys_v2` in src/stores/passkeyStore.ts:1", "shortDescription": {"text": "Legacy-named symbol `nostr_district_passkeys_v2` in src/stores/passkeyStore.ts:1"}, "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-cabda80c46b47e30", "name": "Commented-code block (8 lines) in src/stores/collectionUnlocks.ts:88", "shortDescription": {"text": "Commented-code block (8 lines) in src/stores/collectionUnlocks.ts:88"}, "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-fe57af6013f0513d", "name": "Commented-code block (6 lines) in src/ui/WalletPanel.ts:382", "shortDescription": {"text": "Commented-code block (6 lines) in src/ui/WalletPanel.ts:382"}, "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-4a6c6cbb2a9c5ab7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/holidayBanners.ts:415", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/holidayBanners.ts:415"}, "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-9c77e8a84d3c3ae6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/TarotModal.ts:234", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/TarotModal.ts:234"}, "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-a84b9e049130c6a6", "name": "Commented-code block (6 lines) in src/ui/CrewPanel.ts:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/ui/CrewPanel.ts:33"}, "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-62fc5a6f60d701ea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/imageUpload.ts:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/imageUpload.ts:140"}, "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-3e56c64edd10bfd3", "name": "Commented-code block (5 lines) in src/ui/ChatUI.ts:534", "shortDescription": {"text": "Commented-code block (5 lines) in src/ui/ChatUI.ts:534"}, "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-ffcf309d59d0f3ba", "name": "Commented-code block (5 lines) in src/ui/loginHolidayFX.ts:54", "shortDescription": {"text": "Commented-code block (5 lines) in src/ui/loginHolidayFX.ts:54"}, "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-f044ab78877e0cc1", "name": "Commented-code block (6 lines) in src/ui/WorldMap.ts:106", "shortDescription": {"text": "Commented-code block (6 lines) in src/ui/WorldMap.ts:106"}, "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-b8b01d29c68801c8", "name": "Commented-code block (6 lines) in src/ui/MarketPanel.ts:829", "shortDescription": {"text": "Commented-code block (6 lines) in src/ui/MarketPanel.ts:829"}, "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-446df785d1368883", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/GifPicker.ts:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/GifPicker.ts:78"}, "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-dcac61e33f6d1680", "name": "Commented-code block (5 lines) in src/ui/LoginScreen.ts:1455", "shortDescription": {"text": "Commented-code block (5 lines) in src/ui/LoginScreen.ts:1455"}, "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-e4c3f79fc2b9bc63", "name": "Commented-code block (5 lines) in src/ui/games/BlackjackGame.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in src/ui/games/BlackjackGame.ts:45"}, "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-df2216c6b6d18351", "name": "Commented-code block (6 lines) in src/ui/computer/ProfileTab.ts:117", "shortDescription": {"text": "Commented-code block (6 lines) in src/ui/computer/ProfileTab.ts:117"}, "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-aa74be57eef684f4", "name": "Commented-code block (5 lines) in src/audio/SoundEngine.ts:70", "shortDescription": {"text": "Commented-code block (5 lines) in src/audio/SoundEngine.ts:70"}, "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-24cc2a4c7dcf0288", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/audio/SoundEngine.ts:366", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/audio/SoundEngine.ts:366"}, "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-4741819989bece95", "name": "Commented-code block (5 lines) in src/entities/avatar/assets.ts:30", "shortDescription": {"text": "Commented-code block (5 lines) in src/entities/avatar/assets.ts:30"}, "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-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\npublic/assets/process.py:paeth, public/assets/hats/process.py:paeth\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18431"}, "properties": {"repository": "rome539/nostr-district", "repoUrl": "https://github.com/rome539/nostr-district", "branch": "main"}, "results": [{"ruleId": "scanner-4a491b617c06d8eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.ts:58"}, "properties": {"repobilityId": "63422c4893a0b074", "scanner": "scanner-primary", "fingerprint": "4a491b617c06d8eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-85ccf1c0f342bde6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 nip46-bunker.js:70"}, "properties": {"repobilityId": "ee241587a5056103", "scanner": "scanner-primary", "fingerprint": "85ccf1c0f342bde6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2c72baf8aa56ed43", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/main.ts:141"}, "properties": {"repobilityId": "981eedf4f52fff93", "scanner": "scanner-primary", "fingerprint": "2c72baf8aa56ed43", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09797d5abc2b46c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr-auth-security-kit.js:241"}, "properties": {"repobilityId": "f9b3323de26aaab7", "scanner": "scanner-primary", "fingerprint": "09797d5abc2b46c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3b74350ef6973eb2", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/scenes/WoodsScene.ts:1474"}, "properties": {"repobilityId": "4d4de4ce509397bd", "scanner": "scanner-primary", "fingerprint": "3b74350ef6973eb2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-14835b9d33eaf75e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/feedService.ts:50"}, "properties": {"repobilityId": "c718ece1faa6d190", "scanner": "scanner-primary", "fingerprint": "14835b9d33eaf75e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1614ad2284c4929", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/presenceService.ts:442"}, "properties": {"repobilityId": "9f9f074858554f23", "scanner": "scanner-primary", "fingerprint": "e1614ad2284c4929", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ff825fc77e66018", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/channelService.ts:106"}, "properties": {"repobilityId": "6f550ceadf7148cf", "scanner": "scanner-primary", "fingerprint": "8ff825fc77e66018", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ad73ee5d9bf5858", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/nostrService.ts:204"}, "properties": {"repobilityId": "d7bee095335d0b5b", "scanner": "scanner-primary", "fingerprint": "0ad73ee5d9bf5858", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e64ea90e98fd07f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/dmService.ts:179"}, "properties": {"repobilityId": "71e78d3cd8d323f6", "scanner": "scanner-primary", "fingerprint": "e64ea90e98fd07f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5b31a3601ffeef94", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/zapService.ts:497"}, "properties": {"repobilityId": "f89681ef02cca3ed", "scanner": "scanner-primary", "fingerprint": "5b31a3601ffeef94", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ff270a6138d588a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/relayManager.ts:189"}, "properties": {"repobilityId": "e3b700d2f76a878e", "scanner": "scanner-primary", "fingerprint": "9ff270a6138d588a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ef7bd4bb5ee323a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/pollService.ts:69"}, "properties": {"repobilityId": "a008d7c738938fb3", "scanner": "scanner-primary", "fingerprint": "0ef7bd4bb5ee323a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b431bf99520f8cb6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/emojiService.ts:111"}, "properties": {"repobilityId": "30db8d473ccf8495", "scanner": "scanner-primary", "fingerprint": "b431bf99520f8cb6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-750dffbb10ded27e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/nostr/sparkService.ts:241"}, "properties": {"repobilityId": "4db72b1e1e68fceb", "scanner": "scanner-primary", "fingerprint": "750dffbb10ded27e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-944f55d1763f96d5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/stores/marketStore.ts:295"}, "properties": {"repobilityId": "e0c8e20d0b4dbab2", "scanner": "scanner-primary", "fingerprint": "944f55d1763f96d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0e6423176b465a16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/stores/tradeItemStore.ts:759"}, "properties": {"repobilityId": "98f667813340b98c", "scanner": "scanner-primary", "fingerprint": "0e6423176b465a16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-14d78537d4a5d4c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/stores/passkeyStore.ts:191"}, "properties": {"repobilityId": "0d0be762166491b7", "scanner": "scanner-primary", "fingerprint": "14d78537d4a5d4c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1e88978d696c68d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/ComputerUI.ts:117"}, "properties": {"repobilityId": "6d76cfa70e85bfb9", "scanner": "scanner-primary", "fingerprint": "d1e88978d696c68d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-80db3512bcfcaa3a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/WalletPanel.ts:229"}, "properties": {"repobilityId": "4cca91605b30e48b", "scanner": "scanner-primary", "fingerprint": "80db3512bcfcaa3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-c964939e2dd9c82c", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/BazaarPanel.ts:288"}, "properties": {"repobilityId": "80e8475abaa641ad", "scanner": "scanner-primary", "fingerprint": "c964939e2dd9c82c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-908e14d7e3ade39f", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/PollBoard.ts:201"}, "properties": {"repobilityId": "91ad81232f27667e", "scanner": "scanner-primary", "fingerprint": "908e14d7e3ade39f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-52e520b2467a4d44", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/ZapModal.ts:57"}, "properties": {"repobilityId": "a1f6f7bf3c069166", "scanner": "scanner-primary", "fingerprint": "52e520b2467a4d44", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-cac859783f77c405", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/FollowsPanel.ts:437"}, "properties": {"repobilityId": "c7adeb0f56763b4a", "scanner": "scanner-primary", "fingerprint": "cac859783f77c405", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-f17325cca4c24037", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/DMPanel.ts:293"}, "properties": {"repobilityId": "5af62a476412486a", "scanner": "scanner-primary", "fingerprint": "f17325cca4c24037", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-059ff34f1e0c963b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/MarketPanel.ts:279"}, "properties": {"repobilityId": "b4a71127713ad4f7", "scanner": "scanner-primary", "fingerprint": "059ff34f1e0c963b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7c0e45f613aaa785", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/ui/MarketPanel.ts:846"}, "properties": {"repobilityId": "51f1d4c8ed5f8f34", "scanner": "scanner-primary", "fingerprint": "7c0e45f613aaa785", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ce1362737ca2ec64", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/NostrThemeBrowser.ts:237"}, "properties": {"repobilityId": "f143f9a88449e8c0", "scanner": "scanner-primary", "fingerprint": "ce1362737ca2ec64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-86ce6ab126a9695b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/CardTableModal.ts:126"}, "properties": {"repobilityId": "695f7d6d66d5da31", "scanner": "scanner-primary", "fingerprint": "86ce6ab126a9695b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-4b7ebb4cc79bd18d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/MuteList.ts:75"}, "properties": {"repobilityId": "dd7c6f90887ea5cc", "scanner": "scanner-primary", "fingerprint": "4b7ebb4cc79bd18d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-314fa339a544765d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/HotkeyModal.ts:130"}, "properties": {"repobilityId": "1d5d0411f62b8cd1", "scanner": "scanner-primary", "fingerprint": "314fa339a544765d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-e61a56e52a58675a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/EmojiPackBrowser.ts:168"}, "properties": {"repobilityId": "e809bab830d3d724", "scanner": "scanner-primary", "fingerprint": "e61a56e52a58675a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-b6d3216bf11de246", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/SettingsPanel.ts:549"}, "properties": {"repobilityId": "8c9a23c2a611354a", "scanner": "scanner-primary", "fingerprint": "b6d3216bf11de246", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d781f3747c67abaf", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/computer/WardrobeTab.ts:344"}, "properties": {"repobilityId": "97811ee093b89ef3", "scanner": "scanner-primary", "fingerprint": "d781f3747c67abaf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9ee7c24783b91ca5", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/ui/market/MarketInvoice.ts:69"}, "properties": {"repobilityId": "4f3ee1defd04e9ed", "scanner": "scanner-primary", "fingerprint": "9ee7c24783b91ca5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-83deff28a5de1e7b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/entities/avatar/devRefresh.ts:57"}, "properties": {"repobilityId": "78a02af83e85bed3", "scanner": "scanner-primary", "fingerprint": "83deff28a5de1e7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d07b7835e0709e57", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in nip46-bunker.js:167"}, "properties": {"repobilityId": "d33dbd807e0f406d", "scanner": "scanner-primary", "fingerprint": "d07b7835e0709e57", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "nip46-bunker.js"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-e92359a30873cfdd", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in functions/api/translate.js:20"}, "properties": {"repobilityId": "9d6a3e034d51c95f", "scanner": "scanner-primary", "fingerprint": "e92359a30873cfdd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "functions/api/translate.js"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-785d990594302c40", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/main.ts:110"}, "properties": {"repobilityId": "d54f1583e82d6ec4", "scanner": "scanner-primary", "fingerprint": "785d990594302c40", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/main.ts"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-0cc2336f742d8cc8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/BaseScene.ts:1430"}, "properties": {"repobilityId": "cb6ce9a49778b347", "scanner": "scanner-primary", "fingerprint": "0cc2336f742d8cc8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scenes/BaseScene.ts"}, "region": {"startLine": 1430}}}]}, {"ruleId": "scanner-87b737c2a027e3d9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/CabinScene.ts:748"}, "properties": {"repobilityId": "7eaf98ca43c2ae0f", "scanner": "scanner-primary", "fingerprint": "87b737c2a027e3d9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scenes/CabinScene.ts"}, "region": {"startLine": 748}}}]}, {"ruleId": "scanner-b5d92c78b77c14ab", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/WoodsScene.ts:1471"}, "properties": {"repobilityId": "ed41c4e511fb28a6", "scanner": "scanner-primary", "fingerprint": "b5d92c78b77c14ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scenes/WoodsScene.ts"}, "region": {"startLine": 1471}}}]}, {"ruleId": "scanner-afa14ce0e5e2c6ee", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/scenes/room/RoomRequestToast.ts:16"}, "properties": {"repobilityId": "e1d8f809121418b4", "scanner": "scanner-primary", "fingerprint": "afa14ce0e5e2c6ee", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/scenes/room/RoomRequestToast.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-c55824fca3b0e3c7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/nostr/presenceService.ts:287"}, "properties": {"repobilityId": "ae1d86c03f5a7eb1", "scanner": "scanner-primary", "fingerprint": "c55824fca3b0e3c7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/nostr/presenceService.ts"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-a6bf6a6929a449d7", "level": "error", "message": {"text": "Possible secret in src/config/game.config.ts"}, "properties": {"repobilityId": "ff36368d6619cbcb", "scanner": "scanner-primary", "fingerprint": "a6bf6a6929a449d7", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/config/game.config.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-c097a7eb4d2ddb65", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletInfo.ts:30"}, "properties": {"repobilityId": "4e26f48dcd917f14", "scanner": "scanner-primary", "fingerprint": "c097a7eb4d2ddb65", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/WalletInfo.ts"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-0da04aa834b7d477", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ZapToast.ts:91"}, "properties": {"repobilityId": "5d3f2c42280dc76c", "scanner": "scanner-primary", "fingerprint": "0da04aa834b7d477", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/ZapToast.ts"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-3fe3813e173e5d57", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ComputerUI.ts:111"}, "properties": {"repobilityId": "dec4950e6caf94ce", "scanner": "scanner-primary", "fingerprint": "3fe3813e173e5d57", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/ComputerUI.ts"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-ea68f818afe1c0ac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BountyBoardPanel.ts:152"}, "properties": {"repobilityId": "7d3178e7f97956f1", "scanner": "scanner-primary", "fingerprint": "ea68f818afe1c0ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/BountyBoardPanel.ts"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-efe58df99b423c7e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletPanel.ts:186"}, "properties": {"repobilityId": "9dfd46f1284eb652", "scanner": "scanner-primary", "fingerprint": "efe58df99b423c7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/WalletPanel.ts"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-2db83802a4581a87", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BazaarPanel.ts:286"}, "properties": {"repobilityId": "c897ca8c60b3daae", "scanner": "scanner-primary", "fingerprint": "2db83802a4581a87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/BazaarPanel.ts"}, "region": {"startLine": 286}}}]}, {"ruleId": "scanner-10a6ff2442fd2fb7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PollBoard.ts:115"}, "properties": {"repobilityId": "748ac41c398f35b4", "scanner": "scanner-primary", "fingerprint": "10a6ff2442fd2fb7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/PollBoard.ts"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-e5bdf0f8b1681821", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ndConfirm.ts:116"}, "properties": {"repobilityId": "308715ec05f3cc4d", "scanner": "scanner-primary", "fingerprint": "e5bdf0f8b1681821", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/ndConfirm.ts"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-3e42a03795707905", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ZapModal.ts:50"}, "properties": {"repobilityId": "b86ed340cf17d6bd", "scanner": "scanner-primary", "fingerprint": "3e42a03795707905", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/ZapModal.ts"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-309b566eacf31256", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WalletHUD.ts:48"}, "properties": {"repobilityId": "bb418a5833e3ce5c", "scanner": "scanner-primary", "fingerprint": "309b566eacf31256", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/WalletHUD.ts"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-c43ac1b7d3cfc83c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/CrewPanel.ts:136"}, "properties": {"repobilityId": "282b7d7226dbf65b", "scanner": "scanner-primary", "fingerprint": "c43ac1b7d3cfc83c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/CrewPanel.ts"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-0791b1d2d9e1371f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/FollowsPanel.ts:276"}, "properties": {"repobilityId": "01d7d25327669f4b", "scanner": "scanner-primary", "fingerprint": "0791b1d2d9e1371f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/FollowsPanel.ts"}, "region": {"startLine": 276}}}]}, {"ruleId": "scanner-853096ffbbef7907", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in src/ui/FollowsPanel.ts:291"}, "properties": {"repobilityId": "bd7a299a6293ff8f", "scanner": "scanner-primary", "fingerprint": "853096ffbbef7907", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/FollowsPanel.ts"}, "region": {"startLine": 291}}}]}, {"ruleId": "scanner-927735248b8591ca", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/FortuneTellerModal.ts:149"}, "properties": {"repobilityId": "241dcb28ddd4ed59", "scanner": "scanner-primary", "fingerprint": "927735248b8591ca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/FortuneTellerModal.ts"}, "region": {"startLine": 149}}}]}, {"ruleId": "scanner-d684efcbd5a990a3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ChatUI.ts:233"}, "properties": {"repobilityId": "70db0adeef6055e8", "scanner": "scanner-primary", "fingerprint": "d684efcbd5a990a3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/ChatUI.ts"}, "region": {"startLine": 233}}}]}, {"ruleId": "scanner-6973185b57bd67aa", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PlayerMenu.ts:92"}, "properties": {"repobilityId": "542fd4702cef5d12", "scanner": "scanner-primary", "fingerprint": "6973185b57bd67aa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/PlayerMenu.ts"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-db5a113f1534c1d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/WorldMap.ts:209"}, "properties": {"repobilityId": "a9df4dc02ba536bd", "scanner": "scanner-primary", "fingerprint": "db5a113f1534c1d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/WorldMap.ts"}, "region": {"startLine": 209}}}]}, {"ruleId": "scanner-bbf15f7fbee61925", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/DMPanel.ts:290"}, "properties": {"repobilityId": "dbd1a74e27205f5f", "scanner": "scanner-primary", "fingerprint": "bbf15f7fbee61925", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/DMPanel.ts"}, "region": {"startLine": 290}}}]}, {"ruleId": "scanner-3474211efaa06c14", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/MarketPanel.ts:160"}, "properties": {"repobilityId": "31a3078547a28259", "scanner": "scanner-primary", "fingerprint": "3474211efaa06c14", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/MarketPanel.ts"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-88b5ea12ea042da0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/BookcaseModal.ts:185"}, "properties": {"repobilityId": "19e1e640f6dc3657", "scanner": "scanner-primary", "fingerprint": "88b5ea12ea042da0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/BookcaseModal.ts"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-4d4245ca1b86c1fc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/GifPicker.ts:137"}, "properties": {"repobilityId": "5caed13d0901c0d1", "scanner": "scanner-primary", "fingerprint": "4d4245ca1b86c1fc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/GifPicker.ts"}, "region": {"startLine": 137}}}]}, {"ruleId": "scanner-c87bc833485acb22", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/NostrThemeBrowser.ts:233"}, "properties": {"repobilityId": "6891b3f9871bc8af", "scanner": "scanner-primary", "fingerprint": "c87bc833485acb22", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/NostrThemeBrowser.ts"}, "region": {"startLine": 233}}}]}, {"ruleId": "scanner-e4758dc88190e352", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoginScreen.ts:90"}, "properties": {"repobilityId": "e78b31f4b06a6e63", "scanner": "scanner-primary", "fingerprint": "e4758dc88190e352", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/LoginScreen.ts"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-a5958ce45bcb214b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LanguageModal.ts:108"}, "properties": {"repobilityId": "7782827996a74015", "scanner": "scanner-primary", "fingerprint": "a5958ce45bcb214b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/LanguageModal.ts"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-b45ff448f8929c87", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/TutorialOverlay.ts:56"}, "properties": {"repobilityId": "7d26172cc2c4cbf6", "scanner": "scanner-primary", "fingerprint": "b45ff448f8929c87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/TutorialOverlay.ts"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-70ae31c9ca350b87", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/CardTableModal.ts:88"}, "properties": {"repobilityId": "6b21f3891be04f91", "scanner": "scanner-primary", "fingerprint": "70ae31c9ca350b87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/CardTableModal.ts"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-5cb71b2ebe930d78", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/MuteList.ts:71"}, "properties": {"repobilityId": "76149893ed4a018a", "scanner": "scanner-primary", "fingerprint": "5cb71b2ebe930d78", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/MuteList.ts"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-fc8d740ee24eabfe", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/HotkeyModal.ts:126"}, "properties": {"repobilityId": "e5d6670b5e9dbbbc", "scanner": "scanner-primary", "fingerprint": "fc8d740ee24eabfe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/HotkeyModal.ts"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-b0af32f50ce6e2cc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoungeLiveBanner.ts:274"}, "properties": {"repobilityId": "e336c888e9dfa38f", "scanner": "scanner-primary", "fingerprint": "b0af32f50ce6e2cc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/LoungeLiveBanner.ts"}, "region": {"startLine": 274}}}]}, {"ruleId": "scanner-1555b58cf112efd4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ExtensionWarning.ts:59"}, "properties": {"repobilityId": "89d0fbb2455d080e", "scanner": "scanner-primary", "fingerprint": "1555b58cf112efd4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/ExtensionWarning.ts"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-eafb184d3dda92f4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/emojiAutocomplete.ts:81"}, "properties": {"repobilityId": "efd6b5fc09d8b1a0", "scanner": "scanner-primary", "fingerprint": "eafb184d3dda92f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/emojiAutocomplete.ts"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-17fb430082d3b6d8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/EmojiPackBrowser.ts:164"}, "properties": {"repobilityId": "a0bef4063630693f", "scanner": "scanner-primary", "fingerprint": "17fb430082d3b6d8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/EmojiPackBrowser.ts"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-431b9c5d3eef24d4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/PlayerPicker.ts:22"}, "properties": {"repobilityId": "71b953eae5ffc5c0", "scanner": "scanner-primary", "fingerprint": "431b9c5d3eef24d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/PlayerPicker.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-b2a36085c4586fb5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/SettingsPanel.ts:155"}, "properties": {"repobilityId": "030ec88d023041a1", "scanner": "scanner-primary", "fingerprint": "b2a36085c4586fb5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/SettingsPanel.ts"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-a2d2c52893ad1ab4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/LoginInfo.ts:67"}, "properties": {"repobilityId": "e73153ccd8c17eae", "scanner": "scanner-primary", "fingerprint": "a2d2c52893ad1ab4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/LoginInfo.ts"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-f225280e23dcec91", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ActivityLogModal.ts:156"}, "properties": {"repobilityId": "f69f10738aedd767", "scanner": "scanner-primary", "fingerprint": "f225280e23dcec91", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/ActivityLogModal.ts"}, "region": {"startLine": 156}}}]}, {"ruleId": "scanner-e1c12020cb95a012", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/ProfileModal.ts:155"}, "properties": {"repobilityId": "ad000f41198c35db", "scanner": "scanner-primary", "fingerprint": "e1c12020cb95a012", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/ProfileModal.ts"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-f2cad53d88133337", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/SolitaireGame.ts:167"}, "properties": {"repobilityId": "40354401b1d88a1a", "scanner": "scanner-primary", "fingerprint": "f2cad53d88133337", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/games/SolitaireGame.ts"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-3c13eda9aafc64bc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/GoFishGame.ts:106"}, "properties": {"repobilityId": "83f874768d6c70f0", "scanner": "scanner-primary", "fingerprint": "3c13eda9aafc64bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/games/GoFishGame.ts"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-196321751f05ca21", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/cardGameService.ts:184"}, "properties": {"repobilityId": "ccbade6a3967b23b", "scanner": "scanner-primary", "fingerprint": "196321751f05ca21", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/games/cardGameService.ts"}, "region": {"startLine": 184}}}]}, {"ruleId": "scanner-8af41dcd286eebfa", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/PokerGame.ts:157"}, "properties": {"repobilityId": "5f43fbe6fbdc3563", "scanner": "scanner-primary", "fingerprint": "8af41dcd286eebfa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/games/PokerGame.ts"}, "region": {"startLine": 157}}}]}, {"ruleId": "scanner-d5dfeb0b4d8572c2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/WarGame.ts:233"}, "properties": {"repobilityId": "10fedc762e264dfa", "scanner": "scanner-primary", "fingerprint": "d5dfeb0b4d8572c2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/games/WarGame.ts"}, "region": {"startLine": 233}}}]}, {"ruleId": "scanner-7f70e066f75219a8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/games/BlackjackGame.ts:185"}, "properties": {"repobilityId": "037bbdadbab9140e", "scanner": "scanner-primary", "fingerprint": "7f70e066f75219a8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/games/BlackjackGame.ts"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-aa6fd7de0ebd5708", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/ProfileTab.ts:21"}, "properties": {"repobilityId": "84b795e19d299858", "scanner": "scanner-primary", "fingerprint": "aa6fd7de0ebd5708", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/computer/ProfileTab.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-461afcee102f3810", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/WardrobeTab.ts:35"}, "properties": {"repobilityId": "e41fd48dac2bfd2e", "scanner": "scanner-primary", "fingerprint": "461afcee102f3810", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/computer/WardrobeTab.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-4246709eef95f178", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/computer/RoomTab.ts:134"}, "properties": {"repobilityId": "04b8af69b200e5ad", "scanner": "scanner-primary", "fingerprint": "4246709eef95f178", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/computer/RoomTab.ts"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-cac05d23ac06eb93", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/market/MarketPreview.ts:117"}, "properties": {"repobilityId": "69353c3e8c1b3f45", "scanner": "scanner-primary", "fingerprint": "cac05d23ac06eb93", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/market/MarketPreview.ts"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-cb7838c5223af860", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/ui/market/MarketInvoice.ts:66"}, "properties": {"repobilityId": "61406fa7d40f1f75", "scanner": "scanner-primary", "fingerprint": "cb7838c5223af860", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/ui/market/MarketInvoice.ts"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-12561d8dcf52929a", "level": "note", "message": {"text": "Very large file: server.ts (2199 lines)"}, "properties": {"repobilityId": "83bb4401a5276cc8", "scanner": "scanner-primary", "fingerprint": "12561d8dcf52929a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ddd05f441fb9be7b", "level": "note", "message": {"text": "Very large file: src/scenes/BaseScene.ts (2441 lines)"}, "properties": {"repobilityId": "dc3a9d9a9911baa9", "scanner": "scanner-primary", "fingerprint": "ddd05f441fb9be7b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-48db897abb8dbfb5", "level": "note", "message": {"text": "Very large file: src/scenes/CabinScene.ts (1261 lines)"}, "properties": {"repobilityId": "dc061478dc3f1041", "scanner": "scanner-primary", "fingerprint": "48db897abb8dbfb5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f0554bad7231eb2d", "level": "note", "message": {"text": "Very large file: src/scenes/AlleyScene.ts (1155 lines)"}, "properties": {"repobilityId": "de88c48cffbc8f2b", "scanner": "scanner-primary", "fingerprint": "f0554bad7231eb2d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-43fd5a1f8b3c1835", "level": "note", "message": {"text": "Very large file: src/scenes/WoodsScene.ts (2438 lines)"}, "properties": {"repobilityId": "d3fe5ad1aea8f044", "scanner": "scanner-primary", "fingerprint": "43fd5a1f8b3c1835", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ee2ec87ef8841942", "level": "note", "message": {"text": "Very large file: src/nostr/crewService.ts (2036 lines)"}, "properties": {"repobilityId": "eac8af60b83db2d0", "scanner": "scanner-primary", "fingerprint": "ee2ec87ef8841942", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-469ade298374808b", "level": "note", "message": {"text": "Very large file: src/stores/tradeItemStore.ts (2398 lines)"}, "properties": {"repobilityId": "8fcb1e8ca9b6302c", "scanner": "scanner-primary", "fingerprint": "469ade298374808b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-877c2ca3eabd5327", "level": "note", "message": {"text": "Very large file: src/ui/BazaarPanel.ts (1704 lines)"}, "properties": {"repobilityId": "b96724218d2f62c9", "scanner": "scanner-primary", "fingerprint": "877c2ca3eabd5327", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-11794220a75105dd", "level": "note", "message": {"text": "Very large file: src/ui/PollBoard.ts (1232 lines)"}, "properties": {"repobilityId": "72698da719bebb42", "scanner": "scanner-primary", "fingerprint": "11794220a75105dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-54b1926977fba411", "level": "note", "message": {"text": "Very large file: src/ui/CrewPanel.ts (2384 lines)"}, "properties": {"repobilityId": "3ed598d53b7ea6e5", "scanner": "scanner-primary", "fingerprint": "54b1926977fba411", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cc1f0df9d73ae7de", "level": "note", "message": {"text": "Very large file: src/ui/DMPanel.ts (1313 lines)"}, "properties": {"repobilityId": "6c725bdc49f81998", "scanner": "scanner-primary", "fingerprint": "cc1f0df9d73ae7de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cb4401e6114d1900", "level": "note", "message": {"text": "Very large file: src/ui/LoginScreen.ts (2056 lines)"}, "properties": {"repobilityId": "913765bac6e9fe2f", "scanner": "scanner-primary", "fingerprint": "cb4401e6114d1900", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-326adfda85188d85", "level": "note", "message": {"text": "Very large file: src/ui/computer/RoomTab.ts (1106 lines)"}, "properties": {"repobilityId": "df757d43759876f0", "scanner": "scanner-primary", "fingerprint": "326adfda85188d85", "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-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "71f28e8b67cb9547", "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": "561c74c9ff4ea7f3", "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": "944aefc27d6f379e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "8b1579d7e120a2ae", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "31db2acf8911d3a0", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "88155126585c6fa4", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-77293e9621bb787f", "level": "none", "message": {"text": "Commented-code block (8 lines) in server.ts:22"}, "properties": {"repobilityId": "50e079a62c9cafe4", "scanner": "scanner-primary", "fingerprint": "77293e9621bb787f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99fcb32d9d752f2c", "level": "none", "message": {"text": "Commented-code block (5 lines) in nip46-bunker.js:218"}, "properties": {"repobilityId": "0932b7773ea1a910", "scanner": "scanner-primary", "fingerprint": "99fcb32d9d752f2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb963f51861b4f91", "level": "none", "message": {"text": "Commented-code block (5 lines) in functions/api/relay.js:53"}, "properties": {"repobilityId": "cdeadf29c27edb75", "scanner": "scanner-primary", "fingerprint": "fb963f51861b4f91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88569e8eb6c392ef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/i18n-fill.mjs:76"}, "properties": {"repobilityId": "140da933e6338522", "scanner": "scanner-primary", "fingerprint": "88569e8eb6c392ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f6508afda67b4bca", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/scenes/BaseScene.ts:660"}, "properties": {"repobilityId": "9b75e30d04d56d77", "scanner": "scanner-primary", "fingerprint": "f6508afda67b4bca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a4cf2ec15d519e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/scenes/WoodsScene.ts:67"}, "properties": {"repobilityId": "3880cdf5e692d4c4", "scanner": "scanner-primary", "fingerprint": "4a4cf2ec15d519e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-34ebc797532aae08", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/nostr/nostrService.ts:69"}, "properties": {"repobilityId": "36a2558e211622c8", "scanner": "scanner-primary", "fingerprint": "34ebc797532aae08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-126acea49b5b1842", "level": "note", "message": {"text": "Legacy-named symbol `nip44_v2` in src/nostr/nwcService.ts:300"}, "properties": {"repobilityId": "7f5a252ea50e9c45", "scanner": "scanner-primary", "fingerprint": "126acea49b5b1842", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3153969e0dc4ef86", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/nostr/dmService.ts:524"}, "properties": {"repobilityId": "8167c15920341c91", "scanner": "scanner-primary", "fingerprint": "3153969e0dc4ef86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-963a551f42848cd1", "level": "note", "message": {"text": "Legacy-named symbol `nd_zap_messages_v1` in src/nostr/zapService.ts:22"}, "properties": {"repobilityId": "f2854e4d42991a48", "scanner": "scanner-primary", "fingerprint": "963a551f42848cd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-31abf7ca1cc6fc2e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/nostr/zapService.ts:16"}, "properties": {"repobilityId": "37009ebb0eec2697", "scanner": "scanner-primary", "fingerprint": "31abf7ca1cc6fc2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbb599442f3bf568", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/nostr/zapService.ts:149"}, "properties": {"repobilityId": "77fd1edbc63dbc95", "scanner": "scanner-primary", "fingerprint": "dbb599442f3bf568", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5c856088598ca9bd", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/nostr/crewService.ts:149"}, "properties": {"repobilityId": "cd65b5f17eab46b1", "scanner": "scanner-primary", "fingerprint": "5c856088598ca9bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fd48f05ed28da90", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/nostr/sparkService.ts:73"}, "properties": {"repobilityId": "b60747c90e7cbd81", "scanner": "scanner-primary", "fingerprint": "0fd48f05ed28da90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83354162a0442620", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/stores/priceService.ts:17"}, "properties": {"repobilityId": "60eefb14aec9eec9", "scanner": "scanner-primary", "fingerprint": "83354162a0442620", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1232f6a7cf6016e9", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/stores/unlockStore.ts:69"}, "properties": {"repobilityId": "695cc68a2b5aac3f", "scanner": "scanner-primary", "fingerprint": "1232f6a7cf6016e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1946a3792c4c4a33", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/stores/marketStore.ts:144"}, "properties": {"repobilityId": "01beb627e4259942", "scanner": "scanner-primary", "fingerprint": "1946a3792c4c4a33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a26beeffebbab944", "level": "note", "message": {"text": "Legacy-named symbol `nd_holiday_state_v2` in src/stores/tradeItemStore.ts:1930"}, "properties": {"repobilityId": "2cba09f36f0ce3a9", "scanner": "scanner-primary", "fingerprint": "a26beeffebbab944", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-34796bd0b422252f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/stores/tradeItemStore.ts:599"}, "properties": {"repobilityId": "5a92a8d9cbe23772", "scanner": "scanner-primary", "fingerprint": "34796bd0b422252f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75bdb060365bff28", "level": "note", "message": {"text": "Legacy-named symbol `nostr_district_passkeys_v2` in src/stores/passkeyStore.ts:1"}, "properties": {"repobilityId": "b29b2abf3f82f00c", "scanner": "scanner-primary", "fingerprint": "75bdb060365bff28", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cabda80c46b47e30", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/stores/collectionUnlocks.ts:88"}, "properties": {"repobilityId": "5b38016bc6abb768", "scanner": "scanner-primary", "fingerprint": "cabda80c46b47e30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe57af6013f0513d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/ui/WalletPanel.ts:382"}, "properties": {"repobilityId": "fe08c9630b03a2f4", "scanner": "scanner-primary", "fingerprint": "fe57af6013f0513d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a6c6cbb2a9c5ab7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/holidayBanners.ts:415"}, "properties": {"repobilityId": "f53ee8e18e7ed8c5", "scanner": "scanner-primary", "fingerprint": "4a6c6cbb2a9c5ab7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c77e8a84d3c3ae6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/TarotModal.ts:234"}, "properties": {"repobilityId": "917371edc73087eb", "scanner": "scanner-primary", "fingerprint": "9c77e8a84d3c3ae6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a84b9e049130c6a6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/ui/CrewPanel.ts:33"}, "properties": {"repobilityId": "b554fed603891a31", "scanner": "scanner-primary", "fingerprint": "a84b9e049130c6a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62fc5a6f60d701ea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/imageUpload.ts:140"}, "properties": {"repobilityId": "e67666b7469f6e4a", "scanner": "scanner-primary", "fingerprint": "62fc5a6f60d701ea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e56c64edd10bfd3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/ui/ChatUI.ts:534"}, "properties": {"repobilityId": "a05b917ef55f4745", "scanner": "scanner-primary", "fingerprint": "3e56c64edd10bfd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffcf309d59d0f3ba", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/ui/loginHolidayFX.ts:54"}, "properties": {"repobilityId": "0aacca2531bd7dba", "scanner": "scanner-primary", "fingerprint": "ffcf309d59d0f3ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f044ab78877e0cc1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/ui/WorldMap.ts:106"}, "properties": {"repobilityId": "ba18206787189e28", "scanner": "scanner-primary", "fingerprint": "f044ab78877e0cc1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8b01d29c68801c8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/ui/MarketPanel.ts:829"}, "properties": {"repobilityId": "7a948f8286b44a38", "scanner": "scanner-primary", "fingerprint": "b8b01d29c68801c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-446df785d1368883", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/ui/GifPicker.ts:78"}, "properties": {"repobilityId": "b1021e79e036cb5f", "scanner": "scanner-primary", "fingerprint": "446df785d1368883", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dcac61e33f6d1680", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/ui/LoginScreen.ts:1455"}, "properties": {"repobilityId": "5705806331c3af3d", "scanner": "scanner-primary", "fingerprint": "dcac61e33f6d1680", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4c3f79fc2b9bc63", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/ui/games/BlackjackGame.ts:45"}, "properties": {"repobilityId": "00ea5316b25c32de", "scanner": "scanner-primary", "fingerprint": "e4c3f79fc2b9bc63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df2216c6b6d18351", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/ui/computer/ProfileTab.ts:117"}, "properties": {"repobilityId": "78c24a915fa6b1a9", "scanner": "scanner-primary", "fingerprint": "df2216c6b6d18351", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa74be57eef684f4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/audio/SoundEngine.ts:70"}, "properties": {"repobilityId": "ee8b2d6187e7c032", "scanner": "scanner-primary", "fingerprint": "aa74be57eef684f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24cc2a4c7dcf0288", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/audio/SoundEngine.ts:366"}, "properties": {"repobilityId": "6d01b6d493d69431", "scanner": "scanner-primary", "fingerprint": "24cc2a4c7dcf0288", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4741819989bece95", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/entities/avatar/assets.ts:30"}, "properties": {"repobilityId": "be78b0e0e49171e1", "scanner": "scanner-primary", "fingerprint": "4741819989bece95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5a1ceb8419922ed7", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1de678598de98f0f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6206c23666ce1564", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6139f66f4b000c00", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "73f75c36fe69988a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}