{"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-510b0317ec0d6030", "name": "Stray `console.log` in TS/JS \u2014 scripts/adversarial/run-probes.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/adversarial/run-probes.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30aeb42d486fbe9e", "name": "Stray `console.log` in TS/JS \u2014 scripts/e2e/runner.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/e2e/runner.ts:78"}, "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-043cf99497c1776e", "name": "Stray `console.log` in TS/JS \u2014 src/client/main.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/client/main.ts:105"}, "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-7d60107e825009d6", "name": "Icon-only button without accessible name \u2014 src/client/__tests__/a11y.test.ts:39", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/client/__tests__/a11y.test.ts:39"}, "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-0b26d1174125bd7b", "name": "TODO/FIXME marker in shipping code \u2014 src/client/campaign/narration-log.ts:239", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/client/campaign/narration-log.ts:239"}, "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-e7655bea0d538782", "name": "Stray `console.log` in TS/JS \u2014 src/server/auth.ts:183", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/auth.ts:183"}, "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-521e4c312619311e", "name": "Stray `console.log` in TS/JS \u2014 src/server/email.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/email.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f63a0544b4c122f9", "name": "TODO/FIXME marker in shipping code \u2014 src/server/achievements.ts:102", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/achievements.ts:102"}, "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-c70981f15fa4064e", "name": "TODO/FIXME marker in shipping code \u2014 src/server/tombstones.ts:106", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/tombstones.ts:106"}, "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-183c5c063566f660", "name": "Stray `console.log` in TS/JS \u2014 src/server/index.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/index.ts:34"}, "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-0138ab1d4eeef50c", "name": "TODO/FIXME marker in shipping code \u2014 src/server/persistence.ts:9", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/persistence.ts:9"}, "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-7d24a76d9f08e622", "name": "Stray `console.log` in TS/JS \u2014 src/server/persistence.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/persistence.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d96285cdb3c28fb4", "name": "TODO/FIXME marker in shipping code \u2014 src/server/__tests__/spells.test.ts:106", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/__tests__/spells.test.ts:106"}, "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-19a608fc73012b99", "name": "Stray `console.log` in TS/JS \u2014 src/server/sockets/connection.ts:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/server/sockets/connection.ts:101"}, "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-14a8627554081fe1", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/connection-status.ts:67", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/connection-status.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-9187e8519168fdcf", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/util.ts:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/util.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd94f7c184a85687", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/main.ts:157", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/main.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-92eb9642c658bff3", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/glossary-modal.ts:48", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/glossary-modal.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-9ec0f844d498fec1", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/toast.ts:186", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/toast.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-0e3a5a1d02fe64bb", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/mode-transitions.test.ts:12", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/mode-transitions.test.ts:12"}, "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-af947d5fe375396e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/m-swipe-down.test.ts:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/m-swipe-down.test.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-e75fff488febef4a", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/ui-modal.test.ts:10", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/ui-modal.test.ts:10"}, "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-0d646fa2b0adc471", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/reward-juice.test.ts:10", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/reward-juice.test.ts:10"}, "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-6e2989777e4b1f88", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/install-banner.test.ts:42", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/install-banner.test.ts:42"}, "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-be88f2a8d428b2e4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/a11y.test.ts:9", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/a11y.test.ts:9"}, "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-fa0810f54dae2ea8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/toast-system.test.ts:13", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/toast-system.test.ts:13"}, "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-5013d1fd66d76ea8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/spells/cast-spell-modal.ts:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/spells/cast-spell-modal.ts:38"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bbccc54ec67f8fbe", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/inventory/inventory-modal.ts:31", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/inventory/inventory-modal.ts:31"}, "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-fad225935280d860", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-personality.ts:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-personality.ts:38"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-efa969818c0e09f5", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-background.ts:23", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-background.ts:23"}, "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-ee1a78ab177f8e16", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/wizard.ts:99", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/wizard.ts:99"}, "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-ba1d8cd7ab855ddc", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-race.ts:73", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-race.ts:73"}, "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-48bd588c051fe32c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-feat.ts:33", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-feat.ts:33"}, "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-41bc43f5f7e79858", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/compare-modal.ts:53", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/compare-modal.ts:53"}, "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-a81264767caee0ff", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/live-preview.ts:31", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/live-preview.ts:31"}, "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-ce7d16c508277d7d", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/multiclass-modal.ts:26", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/multiclass-modal.ts:26"}, "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-c21bb0d73a65571f", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-abilities.ts:66", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-abilities.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-372d6b5b34e05f99", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-subclass.ts:86", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-subclass.ts:86"}, "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-f504ad9662ccbbca", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-class.ts:61", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-class.ts:61"}, "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-d8da5a9f2290d97f", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/auth/login-screen.ts:53", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/auth/login-screen.ts:53"}, "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-a372e678269e7858", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/stat-block.ts:317", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/stat-block.ts:317"}, "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-2ec7ff62dc0dee13", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/stat-block-modal.ts:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/stat-block-modal.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-63bb6cc59e05e72e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/spell-card.ts:67", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/spell-card.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-0004485e45251493", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/stat-block.test.ts:80", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/stat-block.test.ts:80"}, "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-4a78344561801652", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/item-card.test.ts:54", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/item-card.test.ts:54"}, "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-4f3a50de8130a5a2", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/spell-card.test.ts:72", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/spell-card.test.ts:72"}, "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-5ac53d1e348baa7b", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/sheet/sheet-screen.ts:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/sheet/sheet-screen.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-81901e2eb845e566", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/initiative-ribbon.ts:54", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/initiative-ribbon.ts:54"}, "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-f9a623df54fd74ac", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/combat-tutorial.ts:63", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/combat-tutorial.ts:63"}, "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-7baab2a0370ed2a9", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/combat-screen-no-tabs.test.ts:50", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/combat-screen-no-tabs.test.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-393391724a95d598", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/combat-target-sheet.test.ts:61", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/combat-target-sheet.test.ts:61"}, "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-c5eefa24f955e783", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/initiative-ribbon.test.ts:81", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/initiative-ribbon.test.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-54c7f21b23b15352", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/achievements-modal.ts:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/achievements-modal.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-06bf5ea8ca8df92a", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/narration-log.ts:660", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/narration-log.ts:660"}, "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-c5956fab4ff92df1", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/npc-roster-modal.ts:21", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/npc-roster-modal.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-74261388f1c021b3", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/chat-sheet.ts:268", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/chat-sheet.ts:268"}, "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-97f2706506d3132e", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/short-rest-overlay.ts:98", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/short-rest-overlay.ts:98"}, "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-1d18ff51ceff9c10", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/campaign-screen.ts:1142", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/campaign-screen.ts:1142"}, "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-765a0e3116b3fcda", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/exploration-tutorial.ts:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/exploration-tutorial.ts:93"}, "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-95611b60d864f754", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/saving-throw-overlay.test.ts:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/saving-throw-overlay.test.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-a50cdc1b982fd728", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/skill-check-skip.test.ts:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/skill-check-skip.test.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-be6d0caa0867a142", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/chat-sheet.test.ts:42", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/chat-sheet.test.ts:42"}, "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-6dbb6dd050399d7c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/long-rest-ritual.test.ts:34", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/long-rest-ritual.test.ts:34"}, "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-48a72094b6e723b4", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/duolingo-tutorial.test.ts:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/duolingo-tutorial.test.ts:38"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f11b0b9dd118121", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/skill-check-spin.test.ts:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/skill-check-spin.test.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-697d7d0a1808cb96", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/continue-card.test.ts:20", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/continue-card.test.ts:20"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5bb50cf481cd579", "name": "Insecure pattern 'local_storage_auth_token' in src/client/home/__tests__/continue-card.test.ts:32", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/client/home/__tests__/continue-card.test.ts:32"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b409145c6f22f2e9", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/collapsible.test.ts:21", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/collapsible.test.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-f68af8c924b2f763", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/identity-bar.test.ts:21", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/identity-bar.test.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-5c273aebe58772f1", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/continue-card.ts:36", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/continue-card.ts:36"}, "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-a605c299d7b062d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/my-chronicles.ts:26", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/my-chronicles.ts:26"}, "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-f4d436f53907195a", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/my-characters.ts:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/my-characters.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-96a090323cb24a41", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/icons/game-icons.ts:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/icons/game-icons.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-2832952bb1231632", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/profile/profile-screen.ts:28", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/profile/profile-screen.ts:28"}, "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-4b0faeb5887c7a36", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/shop/shop-modal.ts:35", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/shop/shop-modal.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-453a6b9fd69fcb75", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/lobby/lobby-screen.ts:170", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/lobby/lobby-screen.ts:170"}, "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-21b0e05dbaa73831", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/client/lobby/__tests__/lobby-screen-qa.test.ts:47", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/lobby/__tests__/lobby-screen-qa.test.ts:47"}, "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-205d9aee1cbb0b58", "name": "Insecure pattern 'cors_wildcard' in src/server/index.ts:101", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in src/server/index.ts:101"}, "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-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-e318192ed32ea67d", "name": "Very large file: src/client/__tests__/mobile-polish-css.test.ts (1163 lines)", "shortDescription": {"text": "Very large file: src/client/__tests__/mobile-polish-css.test.ts (1163 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-07ad49ee13477525", "name": "Very large file: src/client/campaign/campaign-screen.ts (2208 lines)", "shortDescription": {"text": "Very large file: src/client/campaign/campaign-screen.ts (2208 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-7992da47331125f9", "name": "Very large file: src/server/campaign.ts (1322 lines)", "shortDescription": {"text": "Very large file: src/server/campaign.ts (1322 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-abfc7f3bac217ed9", "name": "Very large file: src/server/sockets/connection.ts (1146 lines)", "shortDescription": {"text": "Very large file: src/server/sockets/connection.ts (1146 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-4f67850f406fa3d3", "name": "Very large file: src/server/dm/prompts.ts (1029 lines)", "shortDescription": {"text": "Very large file: src/server/dm/prompts.ts (1029 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-09bad5ab1f174fc5", "name": "34 TODO/FIXME markers", "shortDescription": {"text": "34 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 39 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 30 placeholder/mock markers across 16 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c515349b607796f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/gen-game-icons.mjs:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/gen-game-icons.mjs:49"}, "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-9dd0fa30b71e43b6", "name": "Commented-code block (7 lines) in scripts/adversarial/run-probes.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/adversarial/run-probes.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-755c77bd2d59bdaa", "name": "Commented-code block (6 lines) in src/client/audio.ts:176", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/audio.ts:176"}, "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-eb239a74c4da4ab2", "name": "Commented-code block (5 lines) in src/client/voice-stt.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/voice-stt.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc660f125fa52435", "name": "Commented-code block (5 lines) in src/client/environment.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/environment.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42da5e4c0821b8d0", "name": "Commented-code block (5 lines) in src/client/main.ts:33", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/main.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-a0691f8cd309534f", "name": "Commented-code block (5 lines) in src/client/m-swipe-down.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/m-swipe-down.ts:49"}, "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-23a775f26df015d3", "name": "Commented-code block (7 lines) in src/client/__tests__/qa-visual-overlap.test.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/client/__tests__/qa-visual-overlap.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-617dada4016baf3f", "name": "Commented-code block (5 lines) in src/client/__tests__/dnd-tokens.test.ts:90", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/__tests__/dnd-tokens.test.ts:90"}, "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-0fa834df714fa1af", "name": "Commented-code block (6 lines) in src/client/__tests__/property-markdown.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/__tests__/property-markdown.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb86da3286a674d9", "name": "Commented-code block (9 lines) in src/client/dice/dice-box-engine.ts:6", "shortDescription": {"text": "Commented-code block (9 lines) in src/client/dice/dice-box-engine.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9799c14c111c53c", "name": "Commented-code block (8 lines) in src/client/dice/dice-roll-overlay.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/client/dice/dice-roll-overlay.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f80dbc7faf2f56e6", "name": "Commented-code block (5 lines) in src/client/character-creation/wizard.ts:211", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/character-creation/wizard.ts:211"}, "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-8ff7e7c06049193e", "name": "Commented-code block (5 lines) in src/client/auth/login-screen.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/auth/login-screen.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e523bc457cc0dfe", "name": "Commented-code block (5 lines) in src/client/sheet/sheet-screen.ts:163", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/sheet/sheet-screen.ts:163"}, "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-5dad3877a70fa908", "name": "Commented-code block (5 lines) in src/client/combat/combat-screen.ts:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/combat/combat-screen.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-3ed63221ae3e67fb", "name": "Commented-code block (7 lines) in src/client/combat/combat-target-sheet.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/client/combat/combat-target-sheet.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bd1bcc714bef6da", "name": "Commented-code block (5 lines) in src/client/combat/initiative-ribbon.ts:116", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/combat/initiative-ribbon.ts:116"}, "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-915e0bc047ca3906", "name": "Commented-code block (8 lines) in src/client/combat/__tests__/combat-qa-launch.test.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/client/combat/__tests__/combat-qa-launch.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f8298d27d757a65", "name": "Commented-code block (5 lines) in src/client/combat/__tests__/combat-screen-no-tabs.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/combat/__tests__/combat-screen-no-tabs.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b41107c8e41e073", "name": "Commented-code block (7 lines) in src/client/campaign/narration-log.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/client/campaign/narration-log.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07a7b055f15fe70b", "name": "Commented-code block (6 lines) in src/client/campaign/short-rest-overlay.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/campaign/short-rest-overlay.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e43f584bac00261a", "name": "Commented-code block (5 lines) in src/client/campaign/chip-icon-detector.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/campaign/chip-icon-detector.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f926c8d260f0f08", "name": "Legacy-named symbol `reviveOld` in src/client/campaign/campaign-screen.ts:654", "shortDescription": {"text": "Legacy-named symbol `reviveOld` in src/client/campaign/campaign-screen.ts:654"}, "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-dcc3d149d19a4ff0", "name": "Commented-code block (6 lines) in src/client/campaign/campaign-screen.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/campaign/campaign-screen.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57feb362413d7783", "name": "Commented-code block (5 lines) in src/client/campaign/exploration-tutorial.ts:42", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/campaign/exploration-tutorial.ts:42"}, "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-a51cc205fc3d9825", "name": "Commented-code block (5 lines) in src/client/campaign/__tests__/party-thin-strip.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/party-thin-strip.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ea45dab5d76e204", "name": "Commented-code block (6 lines) in src/client/campaign/__tests__/streaming-preview-clear-guards.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/campaign/__tests__/streaming-preview-clear-guards.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59eba0986b95dac5", "name": "Commented-code block (6 lines) in src/client/campaign/__tests__/skill-check-skip.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/campaign/__tests__/skill-check-skip.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-503542a98460f450", "name": "Commented-code block (5 lines) in src/client/campaign/__tests__/render-scheduler.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/render-scheduler.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a9713f37164c1f4", "name": "Commented-code block (7 lines) in src/client/campaign/__tests__/bottom-action-bar.test.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/client/campaign/__tests__/bottom-action-bar.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a502a8ec66d177a8", "name": "Commented-code block (5 lines) in src/client/campaign/__tests__/short-rest-overlay.test.ts:33", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/short-rest-overlay.test.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-24b11e298bb107d0", "name": "Commented-code block (5 lines) in src/client/campaign/__tests__/responsive-sweep.test.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/responsive-sweep.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b66905320ce59393", "name": "Commented-code block (5 lines) in src/client/campaign/__tests__/narration-log.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/narration-log.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26bb57380c231af3", "name": "Commented-code block (5 lines) in src/client/campaign/__tests__/skill-check-spin.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/skill-check-spin.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30f464c6d0db293f", "name": "Commented-code block (5 lines) in src/client/audio/instruments.ts:235", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/audio/instruments.ts:235"}, "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-11d928984d7babb3", "name": "Commented-code block (5 lines) in src/client/audio/audition.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/audio/audition.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f71966f03709bb36", "name": "Commented-code block (6 lines) in src/client/audio/ambient.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/audio/ambient.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4bb230442187ce9c", "name": "Commented-code block (5 lines) in src/client/audio/composer.ts:113", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/audio/composer.ts:113"}, "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-b752e88fd3b72127", "name": "Commented-code block (7 lines) in src/client/audio/intensity.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/client/audio/intensity.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-054d6cded5776087", "name": "Commented-code block (6 lines) in src/client/audio/themes.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/audio/themes.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60f916b2f5d29eb5", "name": "Commented-code block (8 lines) in src/client/audio/loops.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/client/audio/loops.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1693feb2e63a8173", "name": "Commented-code block (5 lines) in src/client/home/home-screen.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/home/home-screen.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc545459c0b13876", "name": "Commented-code block (6 lines) in src/client/home/sections/footer.ts:27", "shortDescription": {"text": "Commented-code block (6 lines) in src/client/home/sections/footer.ts:27"}, "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-664e1741b439da23", "name": "Commented-code block (5 lines) in src/client/lobby/__tests__/lobby-screen-qa.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/client/lobby/__tests__/lobby-screen-qa.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-809c22ae4cdf76e5", "name": "Commented-code block (6 lines) in src/test/setup.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/test/setup.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e8991bcfb909bcd", "name": "Commented-code block (7 lines) in src/shared/types.ts:129", "shortDescription": {"text": "Commented-code block (7 lines) in src/shared/types.ts:129"}, "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-17673506df004914", "name": "Commented-code block (8 lines) in src/server/cold-opens.ts:26", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/cold-opens.ts:26"}, "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-79463d6f4fcd9b61", "name": "Commented-code block (8 lines) in src/server/auth.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/auth.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07a248f3e355b210", "name": "Commented-code block (6 lines) in src/server/email.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/email.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b06f7b13c667585", "name": "Commented-code block (5 lines) in src/server/tombstones.ts:104", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/tombstones.ts:104"}, "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-0a16273e8cc4b82d", "name": "Commented-code block (5 lines) in src/server/skill-check-detector.ts:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/skill-check-detector.ts:28"}, "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-242df12e34b4aa4b", "name": "Commented-code block (5 lines) in src/server/combat.ts:324", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/combat.ts:324"}, "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-01fec873b5fa363a", "name": "Commented-code block (5 lines) in src/server/ownership.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/ownership.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-94a0b578c82393b5", "name": "Commented-code block (7 lines) in src/server/reaction-engine.ts:31", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/reaction-engine.ts:31"}, "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-8a95f3d5da070b4d", "name": "Commented-code block (5 lines) in src/server/memory.ts:109", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/memory.ts:109"}, "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-022054a468a22272", "name": "Commented-code block (5 lines) in src/server/spells-engine.ts:428", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/spells-engine.ts:428"}, "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-80ade50a7e3540b1", "name": "Commented-code block (5 lines) in src/server/buff-engine.ts:220", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/buff-engine.ts:220"}, "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-c659b18928188564", "name": "Commented-code block (6 lines) in src/server/campaign.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/campaign.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef752d584d262515", "name": "Commented-code block (6 lines) in src/server/__tests__/combat.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/__tests__/combat.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2fb5b4f8b765a7f", "name": "Commented-code block (6 lines) in src/server/__tests__/backstory-detector.test.ts:78", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/__tests__/backstory-detector.test.ts:78"}, "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-b5129c83531a20b2", "name": "Commented-code block (6 lines) in src/server/__tests__/skill-echo-ptbr.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/__tests__/skill-echo-ptbr.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a87339807b687525", "name": "Commented-code block (6 lines) in src/server/__tests__/campaign-skill-check-emit-order.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/__tests__/campaign-skill-check-emit-order.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0394c7a4926e1b3", "name": "Commented-code block (5 lines) in src/server/__tests__/dm-tool-applier-concentration.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/__tests__/dm-tool-applier-concentration.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5abdc0c694620bd6", "name": "Commented-code block (8 lines) in src/server/__tests__/tools-for-mode.test.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/__tests__/tools-for-mode.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98b357f9a4010862", "name": "Commented-code block (7 lines) in src/server/__tests__/item-equip-ac.test.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/__tests__/item-equip-ac.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69b370a51b918e5a", "name": "Commented-code block (5 lines) in src/server/__tests__/action-economy-v2.test.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/__tests__/action-economy-v2.test.ts:115"}, "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-d37ea51cbe60d41e", "name": "Commented-code block (5 lines) in src/server/__tests__/dm-narration-recovery.test.ts:129", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/__tests__/dm-narration-recovery.test.ts:129"}, "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-40a9fa010140172a", "name": "Commented-code block (9 lines) in src/server/__tests__/smoke-e2e.test.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/server/__tests__/smoke-e2e.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1175d137c096ef21", "name": "Commented-code block (5 lines) in src/server/__tests__/combat-advantage-override.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/__tests__/combat-advantage-override.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4f7bb579eebbb41", "name": "Commented-code block (7 lines) in src/server/__tests__/spells.test.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/server/__tests__/spells.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ff1fd95a30a0a16", "name": "Commented-code block (5 lines) in src/server/__tests__/gemini-provider.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/__tests__/gemini-provider.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dd293322c72a076", "name": "Commented-code block (5 lines) in src/server/__tests__/dm-tool-applier-rules.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/__tests__/dm-tool-applier-rules.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b0eea3bce89bbd9", "name": "Commented-code block (5 lines) in src/server/__tests__/groq-provider.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/__tests__/groq-provider.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4aaaa8ba62755ceb", "name": "Commented-code block (6 lines) in src/server/campaign-handlers/shop-handler.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/campaign-handlers/shop-handler.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33eb6dca8a8f778d", "name": "Commented-code block (5 lines) in src/server/campaign-handlers/item-handler.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/campaign-handlers/item-handler.ts:118"}, "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-20e222ef389a5937", "name": "Commented-code block (10 lines) in src/server/dm/prompts.ts:763", "shortDescription": {"text": "Commented-code block (10 lines) in src/server/dm/prompts.ts:763"}, "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-0fb01ae4d442aa50", "name": "Commented-code block (8 lines) in src/server/dm/dm.ts:164", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/dm/dm.ts:164"}, "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-b1012dc295e1bcf0", "name": "Commented-code block (8 lines) in src/server/dm/suggest-fallback.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/server/dm/suggest-fallback.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-853bda50871e2646", "name": "Commented-code block (5 lines) in src/server/dm/narration-stream.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/dm/narration-stream.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-086c750bc3f41122", "name": "Commented-code block (6 lines) in src/server/dm/narration-linter.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/dm/narration-linter.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-addcfc3076abaa7f", "name": "Commented-code block (6 lines) in src/server/dm/__tests__/dm-streaming.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/dm/__tests__/dm-streaming.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d703ae8a887b2354", "name": "Commented-code block (5 lines) in src/server/dm/providers/cerebras.ts:116", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/dm/providers/cerebras.ts:116"}, "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-bdeac1994d6ea47f", "name": "Commented-code block (5 lines) in src/server/dm/providers/cascade.ts:92", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/dm/providers/cascade.ts:92"}, "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-f42538815df3d907", "name": "Commented-code block (5 lines) in src/server/dm/providers/openai-stream.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/dm/providers/openai-stream.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-62535db8cfe18c59", "name": "Commented-code block (6 lines) in src/server/dm/providers/cloudflare.ts:56", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/dm/providers/cloudflare.ts:56"}, "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-da9540e0fa45627e", "name": "Commented-code block (5 lines) in src/server/dm/providers/gemini.ts:144", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/dm/providers/gemini.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-123c4415cba7d5d6", "name": "Commented-code block (5 lines) in src/server/dm/providers/groq.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/server/dm/providers/groq.ts:64"}, "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-ec765a18cbeb9850", "name": "Commented-code block (6 lines) in src/server/dm/providers/factory.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/server/dm/providers/factory.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-992bcd6a18da05f5", "name": "Commented-code block (10 lines) in src/dnd/multiclass.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in src/dnd/multiclass.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-06f6a261a83a714a", "name": "Commented-code block (5 lines) in src/dnd/active-buffs.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/dnd/active-buffs.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fb270c52914447e", "name": "Commented-code block (6 lines) in src/dnd/races.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/dnd/races.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3020b59af152544b", "name": "Commented-code block (5 lines) in src/dnd/prepared-casters.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/dnd/prepared-casters.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc2d29919a7a9607", "name": "Commented-code block (5 lines) in src/dnd/leveling.ts:275", "shortDescription": {"text": "Commented-code block (5 lines) in src/dnd/leveling.ts:275"}, "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-1fd07f9bae3b7220", "name": "Commented-code block (6 lines) in src/dnd/backgrounds.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/dnd/backgrounds.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1244caa38ad0a78c", "name": "Commented-code block (7 lines) in src/dnd/__tests__/property-encounter-builder.test.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/dnd/__tests__/property-encounter-builder.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-959cf18059e799af", "name": "Commented-code block (8 lines) in src/dnd/__tests__/property-damage-types.test.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/dnd/__tests__/property-damage-types.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b5a8ecc77ddc266", "name": "Commented-code block (8 lines) in src/dnd/__tests__/property-spell-slots.test.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/dnd/__tests__/property-spell-slots.test.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65df07ab4020db79", "name": "18 env vars used in code but missing from .env.example", "shortDescription": {"text": "18 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_TOKEN`, `BREVO_API_KEY`, `BREVO_SENDER_EMAIL`, `BREVO_SENDER_NAME`, `CEREBRAS_API_KEY`, `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_API_TOKEN`, `DATA_DIR` + 10 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4756b4c4da7d2088", "name": "Unused endpoint: GET /api/health", "shortDescription": {"text": "Unused endpoint: GET /api/health"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26a5bae03c6f7d23", "name": "Unused endpoint: GET /api/dm/diag", "shortDescription": {"text": "Unused endpoint: GET /api/dm/diag"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dm/diag` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-867ca1a3814c3a3b", "name": "Unused endpoint: GET /api/dm/health", "shortDescription": {"text": "Unused endpoint: GET /api/dm/health"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dm/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38d9d0cfdf6fecd7", "name": "Unused endpoint: GET /api/dm/anomalies", "shortDescription": {"text": "Unused endpoint: GET /api/dm/anomalies"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dm/anomalies` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f910a00e91d8880", "name": "Unused endpoint: GET /api/dm/timeline", "shortDescription": {"text": "Unused endpoint: GET /api/dm/timeline"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dm/timeline` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea1c196e2e56c421", "name": "Unused endpoint: GET /api/dm/errors", "shortDescription": {"text": "Unused endpoint: GET /api/dm/errors"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dm/errors` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-24ae31fce4e1c3a8", "name": "Unused endpoint: GET /api/dm/funnel", "shortDescription": {"text": "Unused endpoint: GET /api/dm/funnel"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dm/funnel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-705c1e98d3234497", "name": "Unused endpoint: GET /api/dm/ux-funnel", "shortDescription": {"text": "Unused endpoint: GET /api/dm/ux-funnel"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dm/ux-funnel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4c777bb8cfb8e4c", "name": "Unused endpoint: GET /api/dm/session-debug", "shortDescription": {"text": "Unused endpoint: GET /api/dm/session-debug"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dm/session-debug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0fcb87f6c078f24b", "name": "Unused endpoint: POST /api/auth/request-link", "shortDescription": {"text": "Unused endpoint: POST /api/auth/request-link"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /api/auth/request-link` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33a5daa01dd022c8", "name": "Unused endpoint: GET /api/auth/verify", "shortDescription": {"text": "Unused endpoint: GET /api/auth/verify"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/auth/verify` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d5a39262ac205120", "name": "Unused endpoint: POST /api/auth/logout", "shortDescription": {"text": "Unused endpoint: POST /api/auth/logout"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /api/auth/logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee4aa5ddab88c9dc", "name": "Unused endpoint: GET /api/auth/me", "shortDescription": {"text": "Unused endpoint: GET /api/auth/me"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/auth/me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d25d9170b56cab52", "name": "Unused endpoint: PATCH /api/auth/me", "shortDescription": {"text": "Unused endpoint: PATCH /api/auth/me"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `PATCH /api/auth/me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3fa64e26bb2b83e", "name": "Unused endpoint: GET /api/dnd/races", "shortDescription": {"text": "Unused endpoint: GET /api/dnd/races"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dnd/races` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2e49ebaa1f8caae", "name": "Unused endpoint: GET /api/dnd/classes", "shortDescription": {"text": "Unused endpoint: GET /api/dnd/classes"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dnd/classes` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-445ff0749694a27d", "name": "Unused endpoint: GET /api/dnd/skills", "shortDescription": {"text": "Unused endpoint: GET /api/dnd/skills"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dnd/skills` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f75165823508155", "name": "Unused endpoint: GET /api/dnd/conditions", "shortDescription": {"text": "Unused endpoint: GET /api/dnd/conditions"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dnd/conditions` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d4b6860cf0beb29", "name": "Unused endpoint: GET /api/dnd/backgrounds", "shortDescription": {"text": "Unused endpoint: GET /api/dnd/backgrounds"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/dnd/backgrounds` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55e042621c6822c7", "name": "Unused endpoint: GET /api/characters", "shortDescription": {"text": "Unused endpoint: GET /api/characters"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/characters` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-75833f7a0e028b0e", "name": "Unused endpoint: GET /api/characters/:id", "shortDescription": {"text": "Unused endpoint: GET /api/characters/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/characters/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16605b5bb26d7540", "name": "Unused endpoint: POST /api/characters", "shortDescription": {"text": "Unused endpoint: POST /api/characters"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /api/characters` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dfad6e19af263d97", "name": "Unused endpoint: DELETE /api/characters/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/characters/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /api/characters/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cd6ff9aec438e35", "name": "Unused endpoint: GET /api/campaigns", "shortDescription": {"text": "Unused endpoint: GET /api/campaigns"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/campaigns` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f3cf5273fe850c8", "name": "Unused endpoint: GET /api/campaigns/:id", "shortDescription": {"text": "Unused endpoint: GET /api/campaigns/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/campaigns/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef731fe15cfaaac6", "name": "Unused endpoint: DELETE /api/campaigns/:id", "shortDescription": {"text": "Unused endpoint: DELETE /api/campaigns/:id"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /api/campaigns/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b26af412e384a76b", "name": "Unused endpoint: GET /api/campaigns/:id/memory", "shortDescription": {"text": "Unused endpoint: GET /api/campaigns/:id/memory"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/campaigns/:id/memory` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1bc843375d63a098", "name": "Unused endpoint: GET /api/tombstones", "shortDescription": {"text": "Unused endpoint: GET /api/tombstones"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/tombstones` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-887f95249a8b0628", "name": "Unused endpoint: GET /api/streak", "shortDescription": {"text": "Unused endpoint: GET /api/streak"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/streak` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7b3b133984462c3", "name": "Unused endpoint: GET /api/highlights", "shortDescription": {"text": "Unused endpoint: GET /api/highlights"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/highlights` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b8e48872451e82b", "name": "Unused endpoint: GET /api/friends", "shortDescription": {"text": "Unused endpoint: GET /api/friends"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/friends` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1204f06bc1860ec6", "name": "Unused endpoint: POST /api/friends/request", "shortDescription": {"text": "Unused endpoint: POST /api/friends/request"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /api/friends/request` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c77ecf98d87f5ab3", "name": "Unused endpoint: POST /api/friends/accept", "shortDescription": {"text": "Unused endpoint: POST /api/friends/accept"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /api/friends/accept` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-295d8234b72b9595", "name": "Unused endpoint: DELETE /api/friends/:userId", "shortDescription": {"text": "Unused endpoint: DELETE /api/friends/:userId"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `DELETE /api/friends/:userId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f5f7c7d4f775a9fb", "name": "Unused endpoint: POST /api/friends/invite", "shortDescription": {"text": "Unused endpoint: POST /api/friends/invite"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `POST /api/friends/invite` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5947f8ebe0cdfc42", "name": "Unused endpoint: GET /api/friends/invites/sent", "shortDescription": {"text": "Unused endpoint: GET /api/friends/invites/sent"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/friends/invites/sent` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43e89c5bf49eada4", "name": "Unused endpoint: GET /api/metrics/summary", "shortDescription": {"text": "Unused endpoint: GET /api/metrics/summary"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/metrics/summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16c9bf6724146b04", "name": "Unused endpoint: GET /api/highlights/:campaignId/export", "shortDescription": {"text": "Unused endpoint: GET /api/highlights/:campaignId/export"}, "fullDescription": {"text": "`src/server/routes/api.ts` declares `GET /api/highlights/:campaignId/export` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/18813"}, "properties": {"repository": "salvatori-wq/JSgame", "repoUrl": "https://github.com/salvatori-wq/JSgame", "branch": "main"}, "results": [{"ruleId": "scanner-510b0317ec0d6030", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/adversarial/run-probes.ts:30"}, "properties": {"repobilityId": "4f38f431a2f7f180", "scanner": "scanner-primary", "fingerprint": "510b0317ec0d6030", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30aeb42d486fbe9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/e2e/runner.ts:78"}, "properties": {"repobilityId": "1521a0fb5a74c6c8", "scanner": "scanner-primary", "fingerprint": "30aeb42d486fbe9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-043cf99497c1776e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/client/main.ts:105"}, "properties": {"repobilityId": "10778b78f8ffc10e", "scanner": "scanner-primary", "fingerprint": "043cf99497c1776e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d60107e825009d6", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/client/__tests__/a11y.test.ts:39"}, "properties": {"repobilityId": "eb646a3978bfdd8b", "scanner": "scanner-primary", "fingerprint": "7d60107e825009d6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0b26d1174125bd7b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/client/campaign/narration-log.ts:239"}, "properties": {"repobilityId": "ad83b81d22f650fe", "scanner": "scanner-primary", "fingerprint": "0b26d1174125bd7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e7655bea0d538782", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/auth.ts:183"}, "properties": {"repobilityId": "be5c2eabb0e4f3e4", "scanner": "scanner-primary", "fingerprint": "e7655bea0d538782", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-521e4c312619311e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/email.ts:42"}, "properties": {"repobilityId": "6cef022f775d5271", "scanner": "scanner-primary", "fingerprint": "521e4c312619311e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f63a0544b4c122f9", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/achievements.ts:102"}, "properties": {"repobilityId": "15125bf6ae85a6ec", "scanner": "scanner-primary", "fingerprint": "f63a0544b4c122f9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c70981f15fa4064e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/tombstones.ts:106"}, "properties": {"repobilityId": "f1ac1204b093ee8b", "scanner": "scanner-primary", "fingerprint": "c70981f15fa4064e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-183c5c063566f660", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/index.ts:34"}, "properties": {"repobilityId": "cc5d38780f9577eb", "scanner": "scanner-primary", "fingerprint": "183c5c063566f660", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0138ab1d4eeef50c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/persistence.ts:9"}, "properties": {"repobilityId": "18e3450d2c3b11b3", "scanner": "scanner-primary", "fingerprint": "0138ab1d4eeef50c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7d24a76d9f08e622", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/persistence.ts:36"}, "properties": {"repobilityId": "b9aab2fa74062c5c", "scanner": "scanner-primary", "fingerprint": "7d24a76d9f08e622", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d96285cdb3c28fb4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/server/__tests__/spells.test.ts:106"}, "properties": {"repobilityId": "c971e544111e5a21", "scanner": "scanner-primary", "fingerprint": "d96285cdb3c28fb4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-19a608fc73012b99", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/server/sockets/connection.ts:101"}, "properties": {"repobilityId": "ae636333846fc191", "scanner": "scanner-primary", "fingerprint": "19a608fc73012b99", "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-14a8627554081fe1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/connection-status.ts:67"}, "properties": {"repobilityId": "35d218b454c54320", "scanner": "scanner-primary", "fingerprint": "14a8627554081fe1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/connection-status.ts"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-9187e8519168fdcf", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/util.ts:20"}, "properties": {"repobilityId": "b5e461b4c769422b", "scanner": "scanner-primary", "fingerprint": "9187e8519168fdcf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/util.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-fd94f7c184a85687", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/main.ts:157"}, "properties": {"repobilityId": "421069da0f40c621", "scanner": "scanner-primary", "fingerprint": "fd94f7c184a85687", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/main.ts"}, "region": {"startLine": 157}}}]}, {"ruleId": "scanner-92eb9642c658bff3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/glossary-modal.ts:48"}, "properties": {"repobilityId": "3e64608ccbe38127", "scanner": "scanner-primary", "fingerprint": "92eb9642c658bff3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/glossary-modal.ts"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-9ec0f844d498fec1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/toast.ts:186"}, "properties": {"repobilityId": "d8adec9ccb6419ba", "scanner": "scanner-primary", "fingerprint": "9ec0f844d498fec1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/toast.ts"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-0e3a5a1d02fe64bb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/mode-transitions.test.ts:12"}, "properties": {"repobilityId": "aba1ed05a7ac2489", "scanner": "scanner-primary", "fingerprint": "0e3a5a1d02fe64bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/__tests__/mode-transitions.test.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-af947d5fe375396e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/m-swipe-down.test.ts:22"}, "properties": {"repobilityId": "7acfd8e8f438f5a1", "scanner": "scanner-primary", "fingerprint": "af947d5fe375396e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/__tests__/m-swipe-down.test.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-e75fff488febef4a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/ui-modal.test.ts:10"}, "properties": {"repobilityId": "6dd5832a451c2a53", "scanner": "scanner-primary", "fingerprint": "e75fff488febef4a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/__tests__/ui-modal.test.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-0d646fa2b0adc471", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/reward-juice.test.ts:10"}, "properties": {"repobilityId": "6b439d7870e75b09", "scanner": "scanner-primary", "fingerprint": "0d646fa2b0adc471", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/__tests__/reward-juice.test.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-6e2989777e4b1f88", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/install-banner.test.ts:42"}, "properties": {"repobilityId": "f21d9143308f386e", "scanner": "scanner-primary", "fingerprint": "6e2989777e4b1f88", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/__tests__/install-banner.test.ts"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-be88f2a8d428b2e4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/a11y.test.ts:9"}, "properties": {"repobilityId": "26141ebb08a81455", "scanner": "scanner-primary", "fingerprint": "be88f2a8d428b2e4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/__tests__/a11y.test.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-fa0810f54dae2ea8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/__tests__/toast-system.test.ts:13"}, "properties": {"repobilityId": "3004a6f2039f22ca", "scanner": "scanner-primary", "fingerprint": "fa0810f54dae2ea8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/__tests__/toast-system.test.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-5013d1fd66d76ea8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/spells/cast-spell-modal.ts:38"}, "properties": {"repobilityId": "d85409a2611a17e5", "scanner": "scanner-primary", "fingerprint": "5013d1fd66d76ea8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/spells/cast-spell-modal.ts"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-bbccc54ec67f8fbe", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/inventory/inventory-modal.ts:31"}, "properties": {"repobilityId": "65d400e2b2f571b9", "scanner": "scanner-primary", "fingerprint": "bbccc54ec67f8fbe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/inventory/inventory-modal.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-fad225935280d860", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-personality.ts:38"}, "properties": {"repobilityId": "fbc261c69e98a347", "scanner": "scanner-primary", "fingerprint": "fad225935280d860", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/step-personality.ts"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-efa969818c0e09f5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-background.ts:23"}, "properties": {"repobilityId": "50f08726b72aedfe", "scanner": "scanner-primary", "fingerprint": "efa969818c0e09f5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/step-background.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-ee1a78ab177f8e16", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/wizard.ts:99"}, "properties": {"repobilityId": "31f3a8f1f051519c", "scanner": "scanner-primary", "fingerprint": "ee1a78ab177f8e16", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/wizard.ts"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-ba1d8cd7ab855ddc", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-race.ts:73"}, "properties": {"repobilityId": "7e7512a84886e82d", "scanner": "scanner-primary", "fingerprint": "ba1d8cd7ab855ddc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/step-race.ts"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-48bd588c051fe32c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-feat.ts:33"}, "properties": {"repobilityId": "779d3cf67fb3ec3e", "scanner": "scanner-primary", "fingerprint": "48bd588c051fe32c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/step-feat.ts"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-41bc43f5f7e79858", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/compare-modal.ts:53"}, "properties": {"repobilityId": "f3f1e2f50b1afea6", "scanner": "scanner-primary", "fingerprint": "41bc43f5f7e79858", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/compare-modal.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-a81264767caee0ff", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/live-preview.ts:31"}, "properties": {"repobilityId": "114f84440d8aff8b", "scanner": "scanner-primary", "fingerprint": "a81264767caee0ff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/live-preview.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-ce7d16c508277d7d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/multiclass-modal.ts:26"}, "properties": {"repobilityId": "77576e2114995ce6", "scanner": "scanner-primary", "fingerprint": "ce7d16c508277d7d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/multiclass-modal.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-c21bb0d73a65571f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-abilities.ts:66"}, "properties": {"repobilityId": "eb4ee1837d5b09c9", "scanner": "scanner-primary", "fingerprint": "c21bb0d73a65571f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/step-abilities.ts"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-372d6b5b34e05f99", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-subclass.ts:86"}, "properties": {"repobilityId": "ebeb34b68d409b1d", "scanner": "scanner-primary", "fingerprint": "372d6b5b34e05f99", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/step-subclass.ts"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-f504ad9662ccbbca", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/character-creation/step-class.ts:61"}, "properties": {"repobilityId": "5a237045d6000733", "scanner": "scanner-primary", "fingerprint": "f504ad9662ccbbca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/character-creation/step-class.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-d8da5a9f2290d97f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/auth/login-screen.ts:53"}, "properties": {"repobilityId": "3451455ff2221cce", "scanner": "scanner-primary", "fingerprint": "d8da5a9f2290d97f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/auth/login-screen.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-a372e678269e7858", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/stat-block.ts:317"}, "properties": {"repobilityId": "1ba23d9c74102fd1", "scanner": "scanner-primary", "fingerprint": "a372e678269e7858", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/components/stat-block.ts"}, "region": {"startLine": 317}}}]}, {"ruleId": "scanner-2ec7ff62dc0dee13", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/stat-block-modal.ts:22"}, "properties": {"repobilityId": "d7327fdc021f5e0e", "scanner": "scanner-primary", "fingerprint": "2ec7ff62dc0dee13", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/components/stat-block-modal.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-63bb6cc59e05e72e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/spell-card.ts:67"}, "properties": {"repobilityId": "aaed8dd5866b717a", "scanner": "scanner-primary", "fingerprint": "63bb6cc59e05e72e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/components/spell-card.ts"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-0004485e45251493", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/stat-block.test.ts:80"}, "properties": {"repobilityId": "a6dafd05d2cc1d48", "scanner": "scanner-primary", "fingerprint": "0004485e45251493", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/components/__tests__/stat-block.test.ts"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-4a78344561801652", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/item-card.test.ts:54"}, "properties": {"repobilityId": "2a490846e8f10e97", "scanner": "scanner-primary", "fingerprint": "4a78344561801652", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/components/__tests__/item-card.test.ts"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-4f3a50de8130a5a2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/components/__tests__/spell-card.test.ts:72"}, "properties": {"repobilityId": "abd38919c8a91b48", "scanner": "scanner-primary", "fingerprint": "4f3a50de8130a5a2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/components/__tests__/spell-card.test.ts"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-5ac53d1e348baa7b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/sheet/sheet-screen.ts:35"}, "properties": {"repobilityId": "d98cccf755dcf0cf", "scanner": "scanner-primary", "fingerprint": "5ac53d1e348baa7b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/sheet/sheet-screen.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-81901e2eb845e566", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/initiative-ribbon.ts:54"}, "properties": {"repobilityId": "a789ff5706fc1f51", "scanner": "scanner-primary", "fingerprint": "81901e2eb845e566", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/combat/initiative-ribbon.ts"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-f9a623df54fd74ac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/combat-tutorial.ts:63"}, "properties": {"repobilityId": "6e854c4e5bb4095a", "scanner": "scanner-primary", "fingerprint": "f9a623df54fd74ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/combat/combat-tutorial.ts"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-7baab2a0370ed2a9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/combat-screen-no-tabs.test.ts:50"}, "properties": {"repobilityId": "5196ab016da43fb4", "scanner": "scanner-primary", "fingerprint": "7baab2a0370ed2a9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/combat/__tests__/combat-screen-no-tabs.test.ts"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-393391724a95d598", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/combat-target-sheet.test.ts:61"}, "properties": {"repobilityId": "2ad895ecee7a4fb6", "scanner": "scanner-primary", "fingerprint": "393391724a95d598", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/combat/__tests__/combat-target-sheet.test.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-c5eefa24f955e783", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/combat/__tests__/initiative-ribbon.test.ts:81"}, "properties": {"repobilityId": "9e64f98a7291c4dc", "scanner": "scanner-primary", "fingerprint": "c5eefa24f955e783", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/combat/__tests__/initiative-ribbon.test.ts"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-54c7f21b23b15352", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/achievements-modal.ts:35"}, "properties": {"repobilityId": "91fffadad74a4c03", "scanner": "scanner-primary", "fingerprint": "54c7f21b23b15352", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/achievements-modal.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-06bf5ea8ca8df92a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/narration-log.ts:660"}, "properties": {"repobilityId": "c2fd7378d44fbf70", "scanner": "scanner-primary", "fingerprint": "06bf5ea8ca8df92a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/narration-log.ts"}, "region": {"startLine": 660}}}]}, {"ruleId": "scanner-c5956fab4ff92df1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/npc-roster-modal.ts:21"}, "properties": {"repobilityId": "82898773269b9c8e", "scanner": "scanner-primary", "fingerprint": "c5956fab4ff92df1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/npc-roster-modal.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-74261388f1c021b3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/chat-sheet.ts:268"}, "properties": {"repobilityId": "085ae4e4059c0236", "scanner": "scanner-primary", "fingerprint": "74261388f1c021b3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/chat-sheet.ts"}, "region": {"startLine": 268}}}]}, {"ruleId": "scanner-97f2706506d3132e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/short-rest-overlay.ts:98"}, "properties": {"repobilityId": "5e969c60b28b72b2", "scanner": "scanner-primary", "fingerprint": "97f2706506d3132e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/short-rest-overlay.ts"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-1d18ff51ceff9c10", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/campaign-screen.ts:1142"}, "properties": {"repobilityId": "6de9faf9b16257f4", "scanner": "scanner-primary", "fingerprint": "1d18ff51ceff9c10", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/campaign-screen.ts"}, "region": {"startLine": 1142}}}]}, {"ruleId": "scanner-765a0e3116b3fcda", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/exploration-tutorial.ts:93"}, "properties": {"repobilityId": "9100bb7658d58f98", "scanner": "scanner-primary", "fingerprint": "765a0e3116b3fcda", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/exploration-tutorial.ts"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-95611b60d864f754", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/saving-throw-overlay.test.ts:35"}, "properties": {"repobilityId": "6020a1b791794703", "scanner": "scanner-primary", "fingerprint": "95611b60d864f754", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/__tests__/saving-throw-overlay.test.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-a50cdc1b982fd728", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/skill-check-skip.test.ts:22"}, "properties": {"repobilityId": "f4906df8e97cea19", "scanner": "scanner-primary", "fingerprint": "a50cdc1b982fd728", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/__tests__/skill-check-skip.test.ts"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-be6d0caa0867a142", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/chat-sheet.test.ts:42"}, "properties": {"repobilityId": "0a10eadafe3f2afa", "scanner": "scanner-primary", "fingerprint": "be6d0caa0867a142", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/__tests__/chat-sheet.test.ts"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-6dbb6dd050399d7c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/long-rest-ritual.test.ts:34"}, "properties": {"repobilityId": "d216818bac25b218", "scanner": "scanner-primary", "fingerprint": "6dbb6dd050399d7c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/__tests__/long-rest-ritual.test.ts"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-48a72094b6e723b4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/duolingo-tutorial.test.ts:38"}, "properties": {"repobilityId": "7728b50033d26808", "scanner": "scanner-primary", "fingerprint": "48a72094b6e723b4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/__tests__/duolingo-tutorial.test.ts"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-9f11b0b9dd118121", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/campaign/__tests__/skill-check-spin.test.ts:20"}, "properties": {"repobilityId": "9e90f0ac269eaffd", "scanner": "scanner-primary", "fingerprint": "9f11b0b9dd118121", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/campaign/__tests__/skill-check-spin.test.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-697d7d0a1808cb96", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/continue-card.test.ts:20"}, "properties": {"repobilityId": "4b5e207ec8f6a56e", "scanner": "scanner-primary", "fingerprint": "697d7d0a1808cb96", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/home/__tests__/continue-card.test.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-e5bb50cf481cd579", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/client/home/__tests__/continue-card.test.ts:32"}, "properties": {"repobilityId": "5ceb451caac42ea3", "scanner": "scanner-primary", "fingerprint": "e5bb50cf481cd579", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/home/__tests__/continue-card.test.ts"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-b409145c6f22f2e9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/collapsible.test.ts:21"}, "properties": {"repobilityId": "841c49d4ce8a5bd6", "scanner": "scanner-primary", "fingerprint": "b409145c6f22f2e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/home/__tests__/collapsible.test.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-f68af8c924b2f763", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/__tests__/identity-bar.test.ts:21"}, "properties": {"repobilityId": "062a620e139f6971", "scanner": "scanner-primary", "fingerprint": "f68af8c924b2f763", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/home/__tests__/identity-bar.test.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-5c273aebe58772f1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/continue-card.ts:36"}, "properties": {"repobilityId": "2401823e5a5dc284", "scanner": "scanner-primary", "fingerprint": "5c273aebe58772f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/home/sections/continue-card.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-a605c299d7b062d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/my-chronicles.ts:26"}, "properties": {"repobilityId": "81e2ff651f68bffe", "scanner": "scanner-primary", "fingerprint": "a605c299d7b062d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/home/sections/my-chronicles.ts"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-f4d436f53907195a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/home/sections/my-characters.ts:35"}, "properties": {"repobilityId": "c5418b8b9127f6b4", "scanner": "scanner-primary", "fingerprint": "f4d436f53907195a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/home/sections/my-characters.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-96a090323cb24a41", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/icons/game-icons.ts:56"}, "properties": {"repobilityId": "1f5c5918c5230ad7", "scanner": "scanner-primary", "fingerprint": "96a090323cb24a41", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/icons/game-icons.ts"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-2832952bb1231632", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/profile/profile-screen.ts:28"}, "properties": {"repobilityId": "6d9d344c7f6904fd", "scanner": "scanner-primary", "fingerprint": "2832952bb1231632", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/profile/profile-screen.ts"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-4b0faeb5887c7a36", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/shop/shop-modal.ts:35"}, "properties": {"repobilityId": "f768317edd22737b", "scanner": "scanner-primary", "fingerprint": "4b0faeb5887c7a36", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/shop/shop-modal.ts"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-453a6b9fd69fcb75", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/lobby/lobby-screen.ts:170"}, "properties": {"repobilityId": "fa3e8e9aa0bcd29b", "scanner": "scanner-primary", "fingerprint": "453a6b9fd69fcb75", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/lobby/lobby-screen.ts"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-21b0e05dbaa73831", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/client/lobby/__tests__/lobby-screen-qa.test.ts:47"}, "properties": {"repobilityId": "8b7c0fd9db2d503a", "scanner": "scanner-primary", "fingerprint": "21b0e05dbaa73831", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/client/lobby/__tests__/lobby-screen-qa.test.ts"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-205d9aee1cbb0b58", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in src/server/index.ts:101"}, "properties": {"repobilityId": "98d5e0f3d6be5756", "scanner": "scanner-primary", "fingerprint": "205d9aee1cbb0b58", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/server/index.ts"}, "region": {"startLine": 101}}}]}, {"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-e318192ed32ea67d", "level": "note", "message": {"text": "Very large file: src/client/__tests__/mobile-polish-css.test.ts (1163 lines)"}, "properties": {"repobilityId": "d14baefc4cd1a0c6", "scanner": "scanner-primary", "fingerprint": "e318192ed32ea67d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-07ad49ee13477525", "level": "note", "message": {"text": "Very large file: src/client/campaign/campaign-screen.ts (2208 lines)"}, "properties": {"repobilityId": "ccee83ee015c8d7a", "scanner": "scanner-primary", "fingerprint": "07ad49ee13477525", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7992da47331125f9", "level": "note", "message": {"text": "Very large file: src/server/campaign.ts (1322 lines)"}, "properties": {"repobilityId": "336b440a5c65281f", "scanner": "scanner-primary", "fingerprint": "7992da47331125f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-abfc7f3bac217ed9", "level": "note", "message": {"text": "Very large file: src/server/sockets/connection.ts (1146 lines)"}, "properties": {"repobilityId": "a29e5c4d8feadc28", "scanner": "scanner-primary", "fingerprint": "abfc7f3bac217ed9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4f67850f406fa3d3", "level": "note", "message": {"text": "Very large file: src/server/dm/prompts.ts (1029 lines)"}, "properties": {"repobilityId": "ce383f0c2ede5fe1", "scanner": "scanner-primary", "fingerprint": "4f67850f406fa3d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-09bad5ab1f174fc5", "level": "note", "message": {"text": "34 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "09bad5ab1f174fc5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "db9c12d4774d89ad", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c216d3909dd09174", "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": "4707865f5f2fa71e", "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": "7759a309483a2cd4", "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": "74a2eb980fd9a956", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "179edc243f5791bc", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "d3e559e284f11d78", "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": "9ff8df8e184c7c8d", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-c515349b607796f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/gen-game-icons.mjs:49"}, "properties": {"repobilityId": "b3fd43365de96ecc", "scanner": "scanner-primary", "fingerprint": "c515349b607796f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9dd0fa30b71e43b6", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/adversarial/run-probes.ts:4"}, "properties": {"repobilityId": "c35e27fd20c00ed3", "scanner": "scanner-primary", "fingerprint": "9dd0fa30b71e43b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-755c77bd2d59bdaa", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/audio.ts:176"}, "properties": {"repobilityId": "434195d301e3a96c", "scanner": "scanner-primary", "fingerprint": "755c77bd2d59bdaa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb239a74c4da4ab2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/voice-stt.ts:5"}, "properties": {"repobilityId": "e6e885e265a804cd", "scanner": "scanner-primary", "fingerprint": "eb239a74c4da4ab2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc660f125fa52435", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/environment.ts:7"}, "properties": {"repobilityId": "a20c25a99ac9db1c", "scanner": "scanner-primary", "fingerprint": "fc660f125fa52435", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42da5e4c0821b8d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/main.ts:33"}, "properties": {"repobilityId": "0eac01d9066deda0", "scanner": "scanner-primary", "fingerprint": "42da5e4c0821b8d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0691f8cd309534f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/m-swipe-down.ts:49"}, "properties": {"repobilityId": "4cea2a427363ba31", "scanner": "scanner-primary", "fingerprint": "a0691f8cd309534f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23a775f26df015d3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/client/__tests__/qa-visual-overlap.test.ts:1"}, "properties": {"repobilityId": "1d7626fb3ae2f923", "scanner": "scanner-primary", "fingerprint": "23a775f26df015d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-617dada4016baf3f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/__tests__/dnd-tokens.test.ts:90"}, "properties": {"repobilityId": "5a7099bad90e08d6", "scanner": "scanner-primary", "fingerprint": "617dada4016baf3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fa834df714fa1af", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/__tests__/property-markdown.test.ts:1"}, "properties": {"repobilityId": "a3024355be568214", "scanner": "scanner-primary", "fingerprint": "0fa834df714fa1af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb86da3286a674d9", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/client/dice/dice-box-engine.ts:6"}, "properties": {"repobilityId": "8e722b5dd7f68f3b", "scanner": "scanner-primary", "fingerprint": "fb86da3286a674d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9799c14c111c53c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/client/dice/dice-roll-overlay.ts:5"}, "properties": {"repobilityId": "982aedde3b38e7d4", "scanner": "scanner-primary", "fingerprint": "c9799c14c111c53c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f80dbc7faf2f56e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/character-creation/wizard.ts:211"}, "properties": {"repobilityId": "1720086c03ee602c", "scanner": "scanner-primary", "fingerprint": "f80dbc7faf2f56e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ff7e7c06049193e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/auth/login-screen.ts:3"}, "properties": {"repobilityId": "1e0ac3df5dde0e16", "scanner": "scanner-primary", "fingerprint": "8ff7e7c06049193e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e523bc457cc0dfe", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/sheet/sheet-screen.ts:163"}, "properties": {"repobilityId": "a3fe12cbebb6f402", "scanner": "scanner-primary", "fingerprint": "4e523bc457cc0dfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5dad3877a70fa908", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/combat/combat-screen.ts:73"}, "properties": {"repobilityId": "d96070ebf43d08b6", "scanner": "scanner-primary", "fingerprint": "5dad3877a70fa908", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ed63221ae3e67fb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/client/combat/combat-target-sheet.ts:3"}, "properties": {"repobilityId": "7607bc5efc1e0bcc", "scanner": "scanner-primary", "fingerprint": "3ed63221ae3e67fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bd1bcc714bef6da", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/combat/initiative-ribbon.ts:116"}, "properties": {"repobilityId": "08986601c99f0809", "scanner": "scanner-primary", "fingerprint": "6bd1bcc714bef6da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-915e0bc047ca3906", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/client/combat/__tests__/combat-qa-launch.test.ts:3"}, "properties": {"repobilityId": "c01c3f3ec23c6d95", "scanner": "scanner-primary", "fingerprint": "915e0bc047ca3906", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f8298d27d757a65", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/combat/__tests__/combat-screen-no-tabs.test.ts:1"}, "properties": {"repobilityId": "b4f8ece6752563a2", "scanner": "scanner-primary", "fingerprint": "2f8298d27d757a65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b41107c8e41e073", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/client/campaign/narration-log.ts:7"}, "properties": {"repobilityId": "58b2bca6fe8b5795", "scanner": "scanner-primary", "fingerprint": "8b41107c8e41e073", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07a7b055f15fe70b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/campaign/short-rest-overlay.ts:1"}, "properties": {"repobilityId": "c43c7019aec48ef4", "scanner": "scanner-primary", "fingerprint": "07a7b055f15fe70b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e43f584bac00261a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/campaign/chip-icon-detector.ts:1"}, "properties": {"repobilityId": "378eda591b007d2a", "scanner": "scanner-primary", "fingerprint": "e43f584bac00261a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f926c8d260f0f08", "level": "note", "message": {"text": "Legacy-named symbol `reviveOld` in src/client/campaign/campaign-screen.ts:654"}, "properties": {"repobilityId": "0a2d394c753fa70b", "scanner": "scanner-primary", "fingerprint": "3f926c8d260f0f08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dcc3d149d19a4ff0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/campaign/campaign-screen.ts:1"}, "properties": {"repobilityId": "329fbfc7afd96661", "scanner": "scanner-primary", "fingerprint": "dcc3d149d19a4ff0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57feb362413d7783", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/campaign/exploration-tutorial.ts:42"}, "properties": {"repobilityId": "c505dff18fea94ba", "scanner": "scanner-primary", "fingerprint": "57feb362413d7783", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a51cc205fc3d9825", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/party-thin-strip.test.ts:1"}, "properties": {"repobilityId": "7e1e968bf1af8e86", "scanner": "scanner-primary", "fingerprint": "a51cc205fc3d9825", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ea45dab5d76e204", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/campaign/__tests__/streaming-preview-clear-guards.test.ts:1"}, "properties": {"repobilityId": "2877bf6e34729d51", "scanner": "scanner-primary", "fingerprint": "8ea45dab5d76e204", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59eba0986b95dac5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/campaign/__tests__/skill-check-skip.test.ts:1"}, "properties": {"repobilityId": "8c3cd787de30ad0a", "scanner": "scanner-primary", "fingerprint": "59eba0986b95dac5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-503542a98460f450", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/render-scheduler.test.ts:1"}, "properties": {"repobilityId": "d14c874b8611c429", "scanner": "scanner-primary", "fingerprint": "503542a98460f450", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a9713f37164c1f4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/client/campaign/__tests__/bottom-action-bar.test.ts:1"}, "properties": {"repobilityId": "b07bd4e60ac2bc39", "scanner": "scanner-primary", "fingerprint": "4a9713f37164c1f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a502a8ec66d177a8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/short-rest-overlay.test.ts:33"}, "properties": {"repobilityId": "8d43f8bd40846c46", "scanner": "scanner-primary", "fingerprint": "a502a8ec66d177a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24b11e298bb107d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/responsive-sweep.test.ts:4"}, "properties": {"repobilityId": "d815ab419f429f71", "scanner": "scanner-primary", "fingerprint": "24b11e298bb107d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b66905320ce59393", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/narration-log.test.ts:1"}, "properties": {"repobilityId": "19a93302e7d0d9d7", "scanner": "scanner-primary", "fingerprint": "b66905320ce59393", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26bb57380c231af3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/campaign/__tests__/skill-check-spin.test.ts:1"}, "properties": {"repobilityId": "b6d772a80a4e68b0", "scanner": "scanner-primary", "fingerprint": "26bb57380c231af3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30f464c6d0db293f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/audio/instruments.ts:235"}, "properties": {"repobilityId": "4bdcdd8e8b7d98d6", "scanner": "scanner-primary", "fingerprint": "30f464c6d0db293f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11d928984d7babb3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/audio/audition.ts:1"}, "properties": {"repobilityId": "633844db760f728e", "scanner": "scanner-primary", "fingerprint": "11d928984d7babb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f71966f03709bb36", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/audio/ambient.ts:1"}, "properties": {"repobilityId": "c33aef10722eb4da", "scanner": "scanner-primary", "fingerprint": "f71966f03709bb36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bb230442187ce9c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/audio/composer.ts:113"}, "properties": {"repobilityId": "392034cde0365cae", "scanner": "scanner-primary", "fingerprint": "4bb230442187ce9c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b752e88fd3b72127", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/client/audio/intensity.ts:1"}, "properties": {"repobilityId": "ed87be7f72554f28", "scanner": "scanner-primary", "fingerprint": "b752e88fd3b72127", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-054d6cded5776087", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/audio/themes.ts:1"}, "properties": {"repobilityId": "63bedde7dbcc2677", "scanner": "scanner-primary", "fingerprint": "054d6cded5776087", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60f916b2f5d29eb5", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/client/audio/loops.ts:3"}, "properties": {"repobilityId": "17e34e0c3e7bdd91", "scanner": "scanner-primary", "fingerprint": "60f916b2f5d29eb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1693feb2e63a8173", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/home/home-screen.ts:1"}, "properties": {"repobilityId": "65c313e6f48336df", "scanner": "scanner-primary", "fingerprint": "1693feb2e63a8173", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc545459c0b13876", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/client/home/sections/footer.ts:27"}, "properties": {"repobilityId": "7b20f2425d4a373f", "scanner": "scanner-primary", "fingerprint": "dc545459c0b13876", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-664e1741b439da23", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/client/lobby/__tests__/lobby-screen-qa.test.ts:1"}, "properties": {"repobilityId": "a7ec6ea0b205821f", "scanner": "scanner-primary", "fingerprint": "664e1741b439da23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-809c22ae4cdf76e5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/test/setup.ts:1"}, "properties": {"repobilityId": "f84198bfad61743c", "scanner": "scanner-primary", "fingerprint": "809c22ae4cdf76e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e8991bcfb909bcd", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/shared/types.ts:129"}, "properties": {"repobilityId": "69578eea349c7d65", "scanner": "scanner-primary", "fingerprint": "6e8991bcfb909bcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17673506df004914", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/cold-opens.ts:26"}, "properties": {"repobilityId": "6da246247ad9df52", "scanner": "scanner-primary", "fingerprint": "17673506df004914", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79463d6f4fcd9b61", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/auth.ts:3"}, "properties": {"repobilityId": "71f58be8a17ec85b", "scanner": "scanner-primary", "fingerprint": "79463d6f4fcd9b61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07a248f3e355b210", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/email.ts:4"}, "properties": {"repobilityId": "a82764269a0973d6", "scanner": "scanner-primary", "fingerprint": "07a248f3e355b210", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b06f7b13c667585", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/tombstones.ts:104"}, "properties": {"repobilityId": "e37e4153740b3937", "scanner": "scanner-primary", "fingerprint": "8b06f7b13c667585", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a16273e8cc4b82d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/skill-check-detector.ts:28"}, "properties": {"repobilityId": "622355e5668447ce", "scanner": "scanner-primary", "fingerprint": "0a16273e8cc4b82d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-242df12e34b4aa4b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/combat.ts:324"}, "properties": {"repobilityId": "dd2b6e81aa37ecff", "scanner": "scanner-primary", "fingerprint": "242df12e34b4aa4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01fec873b5fa363a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/ownership.ts:4"}, "properties": {"repobilityId": "db4f2b28005ae125", "scanner": "scanner-primary", "fingerprint": "01fec873b5fa363a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94a0b578c82393b5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/reaction-engine.ts:31"}, "properties": {"repobilityId": "07cb64d1493fc3b1", "scanner": "scanner-primary", "fingerprint": "94a0b578c82393b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a95f3d5da070b4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/memory.ts:109"}, "properties": {"repobilityId": "9f7a22f377bd07fc", "scanner": "scanner-primary", "fingerprint": "8a95f3d5da070b4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-022054a468a22272", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/spells-engine.ts:428"}, "properties": {"repobilityId": "f04a25d3a80119a9", "scanner": "scanner-primary", "fingerprint": "022054a468a22272", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80ade50a7e3540b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/buff-engine.ts:220"}, "properties": {"repobilityId": "aa94da4cdecc5e0d", "scanner": "scanner-primary", "fingerprint": "80ade50a7e3540b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c659b18928188564", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/campaign.ts:4"}, "properties": {"repobilityId": "c02df8c047bfb40e", "scanner": "scanner-primary", "fingerprint": "c659b18928188564", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef752d584d262515", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/__tests__/combat.test.ts:1"}, "properties": {"repobilityId": "4ab9f5f1bb05d81c", "scanner": "scanner-primary", "fingerprint": "ef752d584d262515", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2fb5b4f8b765a7f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/__tests__/backstory-detector.test.ts:78"}, "properties": {"repobilityId": "74567b7f13e71cb4", "scanner": "scanner-primary", "fingerprint": "c2fb5b4f8b765a7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5129c83531a20b2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/__tests__/skill-echo-ptbr.test.ts:1"}, "properties": {"repobilityId": "65984279148f3261", "scanner": "scanner-primary", "fingerprint": "b5129c83531a20b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a87339807b687525", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/__tests__/campaign-skill-check-emit-order.test.ts:1"}, "properties": {"repobilityId": "8f02594bd5b393cc", "scanner": "scanner-primary", "fingerprint": "a87339807b687525", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0394c7a4926e1b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/__tests__/dm-tool-applier-concentration.test.ts:1"}, "properties": {"repobilityId": "9c857d85173bd48b", "scanner": "scanner-primary", "fingerprint": "a0394c7a4926e1b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5abdc0c694620bd6", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/__tests__/tools-for-mode.test.ts:1"}, "properties": {"repobilityId": "adcd1cc77552d5c9", "scanner": "scanner-primary", "fingerprint": "5abdc0c694620bd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98b357f9a4010862", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/__tests__/item-equip-ac.test.ts:1"}, "properties": {"repobilityId": "662bfebb028a6975", "scanner": "scanner-primary", "fingerprint": "98b357f9a4010862", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69b370a51b918e5a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/__tests__/action-economy-v2.test.ts:115"}, "properties": {"repobilityId": "82f89076b61660c1", "scanner": "scanner-primary", "fingerprint": "69b370a51b918e5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d37ea51cbe60d41e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/__tests__/dm-narration-recovery.test.ts:129"}, "properties": {"repobilityId": "11566c208c66b1d5", "scanner": "scanner-primary", "fingerprint": "d37ea51cbe60d41e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40a9fa010140172a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/server/__tests__/smoke-e2e.test.ts:1"}, "properties": {"repobilityId": "adddfa1e6e6b9e75", "scanner": "scanner-primary", "fingerprint": "40a9fa010140172a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1175d137c096ef21", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/__tests__/combat-advantage-override.test.ts:1"}, "properties": {"repobilityId": "29f86bbb9a50c5f1", "scanner": "scanner-primary", "fingerprint": "1175d137c096ef21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4f7bb579eebbb41", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/server/__tests__/spells.test.ts:1"}, "properties": {"repobilityId": "2e3700b18994c049", "scanner": "scanner-primary", "fingerprint": "e4f7bb579eebbb41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ff1fd95a30a0a16", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/__tests__/gemini-provider.test.ts:1"}, "properties": {"repobilityId": "2774e8a312609c0a", "scanner": "scanner-primary", "fingerprint": "1ff1fd95a30a0a16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dd293322c72a076", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/__tests__/dm-tool-applier-rules.test.ts:1"}, "properties": {"repobilityId": "be865aa50b4d9d3b", "scanner": "scanner-primary", "fingerprint": "7dd293322c72a076", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b0eea3bce89bbd9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/__tests__/groq-provider.test.ts:1"}, "properties": {"repobilityId": "0f3b978df82ec50a", "scanner": "scanner-primary", "fingerprint": "9b0eea3bce89bbd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4aaaa8ba62755ceb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/campaign-handlers/shop-handler.ts:1"}, "properties": {"repobilityId": "1def63d58843aa1d", "scanner": "scanner-primary", "fingerprint": "4aaaa8ba62755ceb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33eb6dca8a8f778d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/campaign-handlers/item-handler.ts:118"}, "properties": {"repobilityId": "baec6405fdcbae93", "scanner": "scanner-primary", "fingerprint": "33eb6dca8a8f778d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20e222ef389a5937", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/server/dm/prompts.ts:763"}, "properties": {"repobilityId": "f329acc248a00597", "scanner": "scanner-primary", "fingerprint": "20e222ef389a5937", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fb01ae4d442aa50", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/dm/dm.ts:164"}, "properties": {"repobilityId": "ec938a8c03c0d6f7", "scanner": "scanner-primary", "fingerprint": "0fb01ae4d442aa50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1012dc295e1bcf0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/server/dm/suggest-fallback.ts:4"}, "properties": {"repobilityId": "2e8cce02d47eed40", "scanner": "scanner-primary", "fingerprint": "b1012dc295e1bcf0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-853bda50871e2646", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/dm/narration-stream.ts:1"}, "properties": {"repobilityId": "7ab9a3aec6d18c3b", "scanner": "scanner-primary", "fingerprint": "853bda50871e2646", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-086c750bc3f41122", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/dm/narration-linter.ts:7"}, "properties": {"repobilityId": "31f65f5a38f6876b", "scanner": "scanner-primary", "fingerprint": "086c750bc3f41122", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-addcfc3076abaa7f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/dm/__tests__/dm-streaming.test.ts:1"}, "properties": {"repobilityId": "33dfb89efb6a0d95", "scanner": "scanner-primary", "fingerprint": "addcfc3076abaa7f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d703ae8a887b2354", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/dm/providers/cerebras.ts:116"}, "properties": {"repobilityId": "7c0379e304caf1bf", "scanner": "scanner-primary", "fingerprint": "d703ae8a887b2354", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdeac1994d6ea47f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/dm/providers/cascade.ts:92"}, "properties": {"repobilityId": "a752e186b0b4027e", "scanner": "scanner-primary", "fingerprint": "bdeac1994d6ea47f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f42538815df3d907", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/dm/providers/openai-stream.ts:1"}, "properties": {"repobilityId": "997e1a059434f2d8", "scanner": "scanner-primary", "fingerprint": "f42538815df3d907", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62535db8cfe18c59", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/dm/providers/cloudflare.ts:56"}, "properties": {"repobilityId": "9bb916ccbb0189e0", "scanner": "scanner-primary", "fingerprint": "62535db8cfe18c59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da9540e0fa45627e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/dm/providers/gemini.ts:144"}, "properties": {"repobilityId": "e599fbc72bf268a0", "scanner": "scanner-primary", "fingerprint": "da9540e0fa45627e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-123c4415cba7d5d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/server/dm/providers/groq.ts:64"}, "properties": {"repobilityId": "47ed986f165e7b4b", "scanner": "scanner-primary", "fingerprint": "123c4415cba7d5d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec765a18cbeb9850", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/server/dm/providers/factory.ts:7"}, "properties": {"repobilityId": "cf4573f0f6a35b1e", "scanner": "scanner-primary", "fingerprint": "ec765a18cbeb9850", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-992bcd6a18da05f5", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/dnd/multiclass.ts:3"}, "properties": {"repobilityId": "22032394a26a791a", "scanner": "scanner-primary", "fingerprint": "992bcd6a18da05f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06f6a261a83a714a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dnd/active-buffs.ts:1"}, "properties": {"repobilityId": "a4d296e290fb7175", "scanner": "scanner-primary", "fingerprint": "06f6a261a83a714a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fb270c52914447e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dnd/races.ts:1"}, "properties": {"repobilityId": "ffdbb6d03322df3d", "scanner": "scanner-primary", "fingerprint": "7fb270c52914447e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3020b59af152544b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dnd/prepared-casters.ts:1"}, "properties": {"repobilityId": "28699b035580b1cc", "scanner": "scanner-primary", "fingerprint": "3020b59af152544b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc2d29919a7a9607", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/dnd/leveling.ts:275"}, "properties": {"repobilityId": "ceac55b0636b03dd", "scanner": "scanner-primary", "fingerprint": "dc2d29919a7a9607", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fd07f9bae3b7220", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/dnd/backgrounds.ts:1"}, "properties": {"repobilityId": "6c99baadd1e70501", "scanner": "scanner-primary", "fingerprint": "1fd07f9bae3b7220", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1244caa38ad0a78c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/dnd/__tests__/property-encounter-builder.test.ts:1"}, "properties": {"repobilityId": "7212c99de698ed62", "scanner": "scanner-primary", "fingerprint": "1244caa38ad0a78c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-959cf18059e799af", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/dnd/__tests__/property-damage-types.test.ts:1"}, "properties": {"repobilityId": "62f90263c4b5a818", "scanner": "scanner-primary", "fingerprint": "959cf18059e799af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b5a8ecc77ddc266", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/dnd/__tests__/property-spell-slots.test.ts:1"}, "properties": {"repobilityId": "5910cf69c036702b", "scanner": "scanner-primary", "fingerprint": "9b5a8ecc77ddc266", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65df07ab4020db79", "level": "note", "message": {"text": "18 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5e334d56f52c02e1", "scanner": "scanner-primary", "fingerprint": "65df07ab4020db79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-4756b4c4da7d2088", "level": "note", "message": {"text": "Unused endpoint: GET /api/health"}, "properties": {"repobilityId": "3665c9e243ae5e80", "scanner": "scanner-primary", "fingerprint": "4756b4c4da7d2088", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-26a5bae03c6f7d23", "level": "note", "message": {"text": "Unused endpoint: GET /api/dm/diag"}, "properties": {"repobilityId": "7f770974ac5bdef2", "scanner": "scanner-primary", "fingerprint": "26a5bae03c6f7d23", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-867ca1a3814c3a3b", "level": "note", "message": {"text": "Unused endpoint: GET /api/dm/health"}, "properties": {"repobilityId": "ead07d2c66817bc2", "scanner": "scanner-primary", "fingerprint": "867ca1a3814c3a3b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38d9d0cfdf6fecd7", "level": "note", "message": {"text": "Unused endpoint: GET /api/dm/anomalies"}, "properties": {"repobilityId": "2be2a76b3e763a49", "scanner": "scanner-primary", "fingerprint": "38d9d0cfdf6fecd7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f910a00e91d8880", "level": "note", "message": {"text": "Unused endpoint: GET /api/dm/timeline"}, "properties": {"repobilityId": "15d049a0b6e067be", "scanner": "scanner-primary", "fingerprint": "0f910a00e91d8880", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea1c196e2e56c421", "level": "note", "message": {"text": "Unused endpoint: GET /api/dm/errors"}, "properties": {"repobilityId": "ab2c7eddc5fa8204", "scanner": "scanner-primary", "fingerprint": "ea1c196e2e56c421", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24ae31fce4e1c3a8", "level": "note", "message": {"text": "Unused endpoint: GET /api/dm/funnel"}, "properties": {"repobilityId": "d9f3ba96a1ba9600", "scanner": "scanner-primary", "fingerprint": "24ae31fce4e1c3a8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-705c1e98d3234497", "level": "note", "message": {"text": "Unused endpoint: GET /api/dm/ux-funnel"}, "properties": {"repobilityId": "50fb24470e4e46c2", "scanner": "scanner-primary", "fingerprint": "705c1e98d3234497", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4c777bb8cfb8e4c", "level": "note", "message": {"text": "Unused endpoint: GET /api/dm/session-debug"}, "properties": {"repobilityId": "26921df72fcbc674", "scanner": "scanner-primary", "fingerprint": "e4c777bb8cfb8e4c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0fcb87f6c078f24b", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/request-link"}, "properties": {"repobilityId": "5996e33327bb7e12", "scanner": "scanner-primary", "fingerprint": "0fcb87f6c078f24b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33a5daa01dd022c8", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/verify"}, "properties": {"repobilityId": "ff1927c25d13223e", "scanner": "scanner-primary", "fingerprint": "33a5daa01dd022c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d5a39262ac205120", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/logout"}, "properties": {"repobilityId": "c033f22dc2b2b0cf", "scanner": "scanner-primary", "fingerprint": "d5a39262ac205120", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee4aa5ddab88c9dc", "level": "note", "message": {"text": "Unused endpoint: GET /api/auth/me"}, "properties": {"repobilityId": "343ac73048adcef3", "scanner": "scanner-primary", "fingerprint": "ee4aa5ddab88c9dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d25d9170b56cab52", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/auth/me"}, "properties": {"repobilityId": "a074320a9d548455", "scanner": "scanner-primary", "fingerprint": "d25d9170b56cab52", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3fa64e26bb2b83e", "level": "note", "message": {"text": "Unused endpoint: GET /api/dnd/races"}, "properties": {"repobilityId": "e845dad16c7c932e", "scanner": "scanner-primary", "fingerprint": "c3fa64e26bb2b83e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b2e49ebaa1f8caae", "level": "note", "message": {"text": "Unused endpoint: GET /api/dnd/classes"}, "properties": {"repobilityId": "9e5ca4bbace76798", "scanner": "scanner-primary", "fingerprint": "b2e49ebaa1f8caae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-445ff0749694a27d", "level": "note", "message": {"text": "Unused endpoint: GET /api/dnd/skills"}, "properties": {"repobilityId": "84ea56774106f88b", "scanner": "scanner-primary", "fingerprint": "445ff0749694a27d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f75165823508155", "level": "note", "message": {"text": "Unused endpoint: GET /api/dnd/conditions"}, "properties": {"repobilityId": "260c57eb06d92fa2", "scanner": "scanner-primary", "fingerprint": "2f75165823508155", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d4b6860cf0beb29", "level": "note", "message": {"text": "Unused endpoint: GET /api/dnd/backgrounds"}, "properties": {"repobilityId": "1758852763302d30", "scanner": "scanner-primary", "fingerprint": "7d4b6860cf0beb29", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-55e042621c6822c7", "level": "note", "message": {"text": "Unused endpoint: GET /api/characters"}, "properties": {"repobilityId": "6dc7d3fb601022cd", "scanner": "scanner-primary", "fingerprint": "55e042621c6822c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-75833f7a0e028b0e", "level": "note", "message": {"text": "Unused endpoint: GET /api/characters/:id"}, "properties": {"repobilityId": "00b4b42e5211f23e", "scanner": "scanner-primary", "fingerprint": "75833f7a0e028b0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16605b5bb26d7540", "level": "note", "message": {"text": "Unused endpoint: POST /api/characters"}, "properties": {"repobilityId": "2768dfede57ff7fe", "scanner": "scanner-primary", "fingerprint": "16605b5bb26d7540", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dfad6e19af263d97", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/characters/:id"}, "properties": {"repobilityId": "ca09457f3460e7b4", "scanner": "scanner-primary", "fingerprint": "dfad6e19af263d97", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cd6ff9aec438e35", "level": "note", "message": {"text": "Unused endpoint: GET /api/campaigns"}, "properties": {"repobilityId": "8971bc3a954524ab", "scanner": "scanner-primary", "fingerprint": "1cd6ff9aec438e35", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f3cf5273fe850c8", "level": "note", "message": {"text": "Unused endpoint: GET /api/campaigns/:id"}, "properties": {"repobilityId": "579bac7676dbdb72", "scanner": "scanner-primary", "fingerprint": "1f3cf5273fe850c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ef731fe15cfaaac6", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/campaigns/:id"}, "properties": {"repobilityId": "65f76d5432244e3c", "scanner": "scanner-primary", "fingerprint": "ef731fe15cfaaac6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b26af412e384a76b", "level": "note", "message": {"text": "Unused endpoint: GET /api/campaigns/:id/memory"}, "properties": {"repobilityId": "0a7bba5539f38cd4", "scanner": "scanner-primary", "fingerprint": "b26af412e384a76b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bc843375d63a098", "level": "note", "message": {"text": "Unused endpoint: GET /api/tombstones"}, "properties": {"repobilityId": "647f07b3c184e97e", "scanner": "scanner-primary", "fingerprint": "1bc843375d63a098", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-887f95249a8b0628", "level": "note", "message": {"text": "Unused endpoint: GET /api/streak"}, "properties": {"repobilityId": "ef1aa2225ee0cc69", "scanner": "scanner-primary", "fingerprint": "887f95249a8b0628", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7b3b133984462c3", "level": "note", "message": {"text": "Unused endpoint: GET /api/highlights"}, "properties": {"repobilityId": "d17ad076cf759df1", "scanner": "scanner-primary", "fingerprint": "d7b3b133984462c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b8e48872451e82b", "level": "note", "message": {"text": "Unused endpoint: GET /api/friends"}, "properties": {"repobilityId": "961394324965ef2c", "scanner": "scanner-primary", "fingerprint": "5b8e48872451e82b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1204f06bc1860ec6", "level": "note", "message": {"text": "Unused endpoint: POST /api/friends/request"}, "properties": {"repobilityId": "5855716ab1ac553a", "scanner": "scanner-primary", "fingerprint": "1204f06bc1860ec6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c77ecf98d87f5ab3", "level": "note", "message": {"text": "Unused endpoint: POST /api/friends/accept"}, "properties": {"repobilityId": "07d65d01d05d1ea0", "scanner": "scanner-primary", "fingerprint": "c77ecf98d87f5ab3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-295d8234b72b9595", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/friends/:userId"}, "properties": {"repobilityId": "5270618b8cdbb0de", "scanner": "scanner-primary", "fingerprint": "295d8234b72b9595", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f5f7c7d4f775a9fb", "level": "note", "message": {"text": "Unused endpoint: POST /api/friends/invite"}, "properties": {"repobilityId": "a1fc3e9b43f27975", "scanner": "scanner-primary", "fingerprint": "f5f7c7d4f775a9fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5947f8ebe0cdfc42", "level": "note", "message": {"text": "Unused endpoint: GET /api/friends/invites/sent"}, "properties": {"repobilityId": "0d7a5436705116c8", "scanner": "scanner-primary", "fingerprint": "5947f8ebe0cdfc42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43e89c5bf49eada4", "level": "note", "message": {"text": "Unused endpoint: GET /api/metrics/summary"}, "properties": {"repobilityId": "f3e868a9f8a1dab3", "scanner": "scanner-primary", "fingerprint": "43e89c5bf49eada4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-16c9bf6724146b04", "level": "note", "message": {"text": "Unused endpoint: GET /api/highlights/:campaignId/export"}, "properties": {"repobilityId": "82107337cdc5b9b0", "scanner": "scanner-primary", "fingerprint": "16c9bf6724146b04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}