{"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-7778e5662824acca", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/asset-pack-manager/page.tsx:85", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/asset-pack-manager/page.tsx:85"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3129606a98e3b6fa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/app-manager/authored/page.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/app-manager/authored/page.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23c234cb182dd2dd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/campaign-manager/[id]/layout.tsx:109", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/campaign-manager/[id]/layout.tsx:109"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30a527b339782118", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/campaign-manager/[id]/play/layout.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/campaign-manager/[id]/play/layout.tsx:43"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e2db0e04bd51271", "name": "TODO/FIXME marker in shipping code \u2014 src/app/apps/(core)/admin-dashboard/locations/create/page.tsx:1", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/apps/(core)/admin-dashboard/locations/create/page.tsx:1"}, "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-44fd654eda656783", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_component", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SourcesTab.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60a717a81415a0b5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_component", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:531"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-daef9709b4412a11", "name": "Icon-only button without accessible name \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/Overview", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:101"}, "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-cf271023c1209c4e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/audit-log/page.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/audit-log/page.tsx:114"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3217455f16d497d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/game-system-manager/[slug]/sources/page.tsx:125", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/game-system-manager/[slug]/sources/page.tsx:125"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7ce33f0dd818ef0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/layou", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/layout.tsx:122"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dc7df793dfedea7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignJoinView.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignJoinView.tsx:57"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f98eb3170e1f6d02", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordActivityTopBar.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordActivityTopBar.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c8ea4c9fb3947572", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityHubView.tsx:201", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityHubView.tsx:201"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fcbf6505e2ac548", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ChannelSetupView.tsx:261", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ChannelSetupView.tsx:261"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3633b8b7291ea1f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedSessions.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedSessions.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86fcd72b5038b7b2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedTabs.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedTabs.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8ad7e98931a8af7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/LoungeActivityView.tsx:217", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/LoungeActivityView.tsx:217"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37725f902c087046", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivitySessionView.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivitySessionView.tsx:101"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e332deeaf54421c0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignActivityView.tsx:442", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignActivityView.tsx:442"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-365493f9a527a125", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityKickoffPopover.tsx:161", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityKickoffPopover.tsx:161"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92c74778ad981ab0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityTipJarSection.tsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityTipJarSection.tsx:130"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-797d0a925900a5dc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedView.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedView.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d4b1051d0b0d7b2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignChannelView.tsx:56", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignChannelView.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5509f6cd93dca83b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedVoiceMembers.tsx:14", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedVoiceMembers.tsx:141"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97c69cfac0e94159", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:181", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:181"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af6421f49903719e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/campaigns/RollLogPanel.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/campaigns/RollLogPanel.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8beab34fae8cfbd8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/templates/remote/RemoteShell.tsx:313", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/templates/remote/RemoteShell.tsx:313"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea04332ea56bc279", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/templates/Shell/desktop-apps/DesktopAppsHost.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/templates/Shell/desktop-apps/DesktopAppsHost.tsx:243"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-978865f68b4f273d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/TipJar.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/TipJar.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6986cfe36e6a37ef", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/FileMenu.tsx:398", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/FileMenu.tsx:398"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b1220fbec2b2390", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/PerPartySettingsLinks.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/PerPartySettingsLinks.tsx:67"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74fd6ea543281666", "name": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/molecules/GlassCard.tsx:25", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/molecules/GlassCard.tsx:25"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa28286304ea0ae9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/EventSeriesList.tsx:56", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/EventSeriesList.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68b082d282b02ab5", "name": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/molecules/ContentNav.tsx:25", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/molecules/ContentNav.tsx:25"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-51f46262e7b41418", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/BreezeAppFrame.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/BreezeAppFrame.tsx:60"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32b4ab39d81628cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/TipRecipientGroupCard.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/TipRecipientGroupCard.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60a32dc2bbf3286f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/DiscordEventCard.tsx:122", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/DiscordEventCard.tsx:122"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e10050351c52bdce", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/InviteAcceptView.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/InviteAcceptView.stories.tsx:4"}, "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-75aba6d1e656a530", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/PartiesView.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/PartiesView.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b37a8e43978be20c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/TransactionsFloatingWindow.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/TransactionsFloatingWindow.tsx:48"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67296c60fcc18634", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/InstalledAppsFloatingWindow.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/InstalledAppsFloatingWindow.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f4fc620209b5d5e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/DeveloperFloatingWindow.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/DeveloperFloatingWindow.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-259aa5f8e8f527b1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/LinkedAccountsFloatingWindow", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/LinkedAccountsFloatingWindow.tsx:60"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5dda6a132f099298", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/WindowChrome.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/WindowChrome.tsx:240"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-664a840196bdb6c8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/FloatingWindow.tsx:676", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/FloatingWindow.tsx:676"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-017b64beb69df37e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/ProfileFloatingWindow.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/ProfileFloatingWindow.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-150b98d5c4732a31", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/PlanTiersFloatingWindow.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/PlanTiersFloatingWindow.tsx:44"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2924023eaa276eb7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/AccountFloatingWindow.tsx:13", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/AccountFloatingWindow.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a056fa96ad90643f", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/windows/FloatingWindow.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/windows/FloatingWindow.stories.tsx:4"}, "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-9ec010b2d67451b7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/ConnectionsFloatingWindow.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/ConnectionsFloatingWindow.tsx:59"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abd5db9de59db5a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshEventsTab.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshEventsTab.tsx:194"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c23df5d062d51b2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshChannelList.tsx:426", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshChannelList.tsx:426"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34deb6320d58dd01", "name": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/resesh/ReseshChannelList.tsx:421", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/resesh/ReseshChannelList.tsx:421"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-13d81cb0ca65c2f9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshWidgets.tsx:327", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshWidgets.tsx:327"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38b3b7a8283c4bd4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshCaptions.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshCaptions.tsx:113"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64afbb2c866c5eb4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/AccessPanel.tsx:361", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/AccessPanel.tsx:361"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2eccc349ed802172", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/MemberRosterPanel.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/MemberRosterPanel.tsx:139"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-652f115b3cae893b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/FoundryUsersSection.tsx:210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/FoundryUsersSection.tsx:210"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a5611ba82407876", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/EntityCard.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/EntityCard.tsx:71"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd36cffbb6cba66b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/sheets/InlinePdfViewer.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/sheets/InlinePdfViewer.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c4e801e370004ac", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/sheets/SheetViewer.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/sheets/SheetViewer.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad6b87e79db24822", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/account/ApiKeysClient.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/account/ApiKeysClient.stories.tsx:4"}, "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-7837bcbce82a6ed9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/LinkAccountPanel.tsx:138", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/LinkAccountPanel.tsx:138"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9969453a400956b0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/InstalledAppsPanel.tsx:194", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/InstalledAppsPanel.tsx:194"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44cb9cbb23d919ef", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f0d493afe2979da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/ApiKeysClient.tsx:255", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/ApiKeysClient.tsx:255"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c1100c2d342d3b3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryWorldsDiagnosticClien", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e6e30de791d35ae", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/account/DiscordIntegrationClient.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/account/DiscordIntegrationClient.stories.tsx:4"}, "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-391d6933fb926414", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/RecordingConsentClient.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/RecordingConsentClient.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da347894fcdead4b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryIntegrationClient.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryIntegrationClient.tsx:311"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f48777e334a223b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/AddConnectionPanel.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/AddConnectionPanel.tsx:118"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8cf595b77ce6d54b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/DiscordIntegrationClient.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/DiscordIntegrationClient.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6286cc6edcbcba13", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryInstalledModulesPanel", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryInstalledModulesPanel.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85f8ed61de78fa42", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/InstallAppPanel.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/InstallAppPanel.tsx:60"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6d07501445bb600", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/CampaignsPageContent.tsx:215", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/CampaignsPageContent.tsx:215"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26e08c9cb829966a", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/UserManageMergeSection.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/UserManageMergeSection.stories.tsx:5"}, "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-1ab640f7e0b92780", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/UserManageWalletSection.tsx:14", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/UserManageWalletSection.tsx:149"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3dbe2309f1c4addd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/TransactionsAuditPageContent.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/TransactionsAuditPageContent.tsx:385"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22486f6fdecde3d3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/CoinsPageContent.tsx:449", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/CoinsPageContent.tsx:449"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5c513cbf560aeb3", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/FoundryPlatformManager.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/FoundryPlatformManager.stories.tsx:4"}, "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-9c0ef2132f956cf3", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/UserManageWalletSection.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/UserManageWalletSection.stories.tsx:5"}, "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-54dcace7ab61d9d9", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/TransactionsAuditPageContent.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/TransactionsAuditPageContent.stories.tsx:4"}, "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-fb741a00841384f5", "name": "Icon-only button without accessible name \u2014 src/views/components/organisms/admin/UserManagePanel.tsx:224", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/views/components/organisms/admin/UserManagePanel.tsx:224"}, "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-7e5a18a18c37eecf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/chat-setup/DiscordSetupPanel.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/chat-setup/DiscordSetupPanel.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-730cf79d63ddd584", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/characters/NewCharacterDetailSteps.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/characters/NewCharacterDetailSteps.stories.tsx:5"}, "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-13731ca96ee9160c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/vtt/AppVttOverlay.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/vtt/AppVttOverlay.tsx:129"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e907f2bfe82fdc6", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/nav-host/BrowserNavHost.tsx:47", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/nav-host/BrowserNavHost.tsx:47"}, "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-2b60af79936c34c6", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.stories.", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.stories.tsx:4"}, "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-faf3aa18cf2d7302", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryServerNav.tsx:56", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryServerNav.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fce31f324cbe4c89", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryServerHeader.tsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryServerHeader.tsx:43"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52ade0a11336678d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryWorldNav.tsx:39", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryWorldNav.tsx:39"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-574a6da16609af91", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/_settings/FoundryServerModul", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:210"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c82280ab33fc611c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/_settings/FoundryServerSyste", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/_settings/FoundryServerSystemsPanel.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27b4ae1757f17309", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/game-apps/GameAppSettingsView.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/game-apps/GameAppSettingsView.stories.tsx:4"}, "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-5233e6db1d988d83", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.tsx:47"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8059de3f057cd492", "name": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.tsx:76", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.tsx:76"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d54d87984c046ed", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/CoreDockLeftZone.tsx:5", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/CoreDockLeftZone.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ce6d7bfe85719cb", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/dock/CoreDock/CoreDockLeftZone.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/dock/CoreDock/CoreDockLeftZone.stories.tsx:5"}, "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-155376870e2507c6", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.stories.tsx:5"}, "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-b49dc8d312697d9b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/DockDisplayIndicator.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/DockDisplayIndicator.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ddd9a8ee67bdfc54", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/wallet/TransactionsPanel.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/wallet/TransactionsPanel.tsx:160"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e991b20de049c6a1", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/wallet/BalancesDropdown.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/wallet/BalancesDropdown.stories.tsx:5"}, "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-734f9eb4969500f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/catalog/EntityCatalog.tsx:196", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/catalog/EntityCatalog.tsx:196"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0277d8cd53934c2c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/collaboration/CollaborationSessionsP", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/collaboration/CollaborationSessionsPanel.tsx:464"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b69bd50d906dd81", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/apps/AppCatalogTile.tsx:259", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/apps/AppCatalogTile.tsx:259"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f9828ca22d85674", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/EventEditModal.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/EventEditModal.tsx:88"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85c9557fea56f3ed", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/CalendarSourceList.tsx:56", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/CalendarSourceList.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9b684b3c94ac8f1", "name": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/calendar/CalendarSourceList.tsx:45", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/calendar/CalendarSourceList.tsx:45"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb1e675deea9ba5f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/EventAttachedResources.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/EventAttachedResources.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0bc6dd9788f14fa1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffDndProvider.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffDndProvider.tsx:183"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f6adab2cc8a8f96", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffAppRow.tsx:159", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffAppRow.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e6849021c658292", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/SystemTrayPopover.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/SystemTrayPopover.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1df910367d14e856", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffSharedUI.tsx:50", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffSharedUI.tsx:50"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1c541e95dd72222", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffRuntimeAppRow.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffRuntimeAppRow.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7789136e4360a08e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/CfgKickoffLauncher.tsx:357", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/CfgKickoffLauncher.tsx:357"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ede08c78ea5c33a7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/factorio/FactorioWorldsSection.tsx:2", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/factorio/FactorioWorldsSection.tsx:241"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e22d157b7d9b8336", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/factorio/FactorioServerLauncher.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/factorio/FactorioServerLauncher.tsx:195"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4c9f40deeceb91e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/discord/DiscordServerRail.tsx:186", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/discord/DiscordServerRail.tsx:186"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b5ebdc6786d638f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/persona/CalendarPill.tsx:427", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/persona/CalendarPill.tsx:427"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd816896e2644d23", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4a10b255565f96e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/server-manager/ServerManagerView.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/server-manager/ServerManagerView.tsx:264"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c5a0a902d62f895", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/asset-packs/AssetPackSettingsView.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/asset-packs/AssetPackSettingsView.stories.tsx:4"}, "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-b7cfd5bac3fb9fc1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/asset-packs/AssetPackUpload.tsx:222", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/asset-packs/AssetPackUpload.tsx:222"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52c48a1be3dd2d83", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaServerLauncher.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaServerLauncher.tsx:235"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33c3dbf925b82de1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaWorldOverview.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaWorldOverview.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b7079e7f92ba4e6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaWorldsSection.tsx:2", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaWorldsSection.tsx:274"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d98472bbbda2fa3b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CharactersPage.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CharactersPage.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28c46de797dc11c4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.tsx:91"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a687dd4a81982ac6", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/ExternalSheetView.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/ExternalSheetView.stories.tsx:5"}, "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-78c41618b192adda", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetClient.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetClient.stories.tsx:4"}, "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-c536fac526d73896", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignHome.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignHome.tsx:241"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-787bcaa5b71c5725", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetAvatar.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetAvatar.stories.tsx:5"}, "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-cfe3b5b6557b059f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyCharactersPage.tsx:22", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyCharactersPage.tsx:227"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90002b4e1c1122c8", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.stories.tsx:4"}, "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-a885f570a67c240f", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionPlayView.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionPlayView.stories.tsx:4"}, "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-9732c32c8dec9845", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignSidebar.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignSidebar.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e99307a5d2e0d4a", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/JournalEntryView.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/JournalEntryView.stories.tsx:4"}, "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-2ecf684031bf1f9f", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.stories.tsx:5"}, "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-442e3c7f6784b48c", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyNav.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyNav.stories.tsx:4"}, "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-bb2b95923c11335c", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyDiscordSection.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyDiscordSection.stories.tsx:5"}, "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-d31c76558878529e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:228"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f99bea99b055014", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/TipGmCard.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/TipGmCard.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4d217301fd17d1d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PlayerManagement.tsx:294", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PlayerManagement.tsx:294"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22683e4d00ad9aba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionControlWidget.tsx:2", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionControlWidget.tsx:271"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44c21e98d8998d78", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:206"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c75e74f0ebb0a7b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyInheritedSettingsPane", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyInheritedSettingsPanel.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-271ee3658b340c48", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionPlayView.tsx:265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionPlayView.tsx:265"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c14049eb5d7f726", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChannelConfigSettings.stories.tsx:", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChannelConfigSettings.stories.tsx:5"}, "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-741773f80235ec97", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SheetProvidersSection.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SheetProvidersSection.tsx:330"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96fa8ebb019461e7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyNav.tsx:48", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyNav.tsx:48"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f0724f7afb076b3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionsPage.tsx:334", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionsPage.tsx:334"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e7b0d114e0bb192", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:161"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8323a724ce330e7", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyDetailPage.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyDetailPage.stories.tsx:4"}, "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-bf1da668f77d3d3b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/JournalList.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/JournalList.tsx:94"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cddf75778f1e1130", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.tsx:4", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.tsx:449"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1b61763153752f2", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionDetailPage.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionDetailPage.stories.tsx:4"}, "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-47d2cc718635fc98", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.stories.tsx:4"}, "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-f7dd59e839bdc6d7", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetProvider.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetProvider.stories.tsx:5"}, "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-32adca93537d3f48", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignFoundryLinkPicker.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignFoundryLinkPicker.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c3b640b8b8eb060", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyDetailPage.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyDetailPage.tsx:204"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1adcadf8d514983b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignTranscriptsPage.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignTranscriptsPage.tsx:298"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d9c45444d6307248", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignsPage.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignsPage.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5dc47d17d770e2c2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignQuickNav.tsx:32", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignQuickNav.tsx:32"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4cfe5adaa57d3887", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SheetProvidersSection.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SheetProvidersSection.stories.tsx:5"}, "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-0fb5df3c7d6f450d", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetInfoTab.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetInfoTab.stories.tsx:5"}, "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-8b4b3ae60e468e88", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChannelConfig.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChannelConfig.stories.tsx:5"}, "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-519f920b95cbd467", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/RollLogPanel.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/RollLogPanel.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b39b2600ca6f2a3", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignGeneralSettings.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignGeneralSettings.stories.tsx:4"}, "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-1c378d3ca479df7b", "name": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:524", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:524"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0737a53bbf450154", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionsPage.stories.tsx:4", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionsPage.stories.tsx:4"}, "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-89787e6343a00f52", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/FoundryActorSheet.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/FoundryActorSheet.stories.tsx:5"}, "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-80ff3014100f4c05", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/FoundryItemDetail.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/FoundryItemDetail.tsx:202"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df14b650a5cd5cf0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/views/components/organisms/campaigns/sheets/FoundryItemDetail.", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/views/components/organisms/campaigns/sheets/FoundryItemDetail.tsx:19"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5706893428cf9027", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/CoreSheetRenderer.stories.tsx:5", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/CoreSheetRenderer.stories.tsx:5"}, "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-21624945e1d52846", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/FoundryActorSheet.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/FoundryActorSheet.tsx:469"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e630232fe6f98605", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/generic/BlankCoreSheet.stories.tsx:", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/generic/BlankCoreSheet.stories.tsx:5"}, "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-e0f968ac69242b4f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/generic/BlankCoreSh", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/generic/BlankCoreSheet.tsx:52"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f33cd41fc984b46", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/create-wizard/CampaignCrea", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/create-wizard/CampaignCreateWizard.tsx:477"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d82994feb325929", "name": "TODO/FIXME marker in shipping code \u2014 src/views/components/atoms/SignInButtons.tsx:19", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/atoms/SignInButtons.tsx:19"}, "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-8c3c402ed8af4c21", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/talespire/TalespireLinkedView.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/talespire/TalespireLinkedView.tsx:213"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8424949183b1ce12", "name": "`truncate` class without `title=` for hover reveal \u2014 src/views/talespire/TalespireCampaignPicker.tsx:271", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/talespire/TalespireCampaignPicker.tsx:271"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25de52372c63f233", "name": "Docker base image is tag-pinned but not digest-pinned: node:24-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:24-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c5403a76abace4c", "name": "Insecure pattern 'node_child_process' in scripts/check-deprecated-classes.mjs:22", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-deprecated-classes.mjs:22"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1838a141491ce38c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "136 tests / 920 src (ratio 0.15)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6308e260b952f95", "name": "52 TODO/FIXME markers", "shortDescription": {"text": "52 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-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 536 placeholder/mock markers across 193 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "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-18fc45f42eff14ef", "name": "Commented-code block (9 lines) in next.config.mjs:20", "shortDescription": {"text": "Commented-code block (9 lines) in next.config.mjs:20"}, "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-f42aa272c55e1dea", "name": "Commented-code block (5 lines) in jest.config.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in jest.config.ts:15"}, "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-006e9371469bc2fa", "name": "Commented-code block (7 lines) in eslint.config.js:81", "shortDescription": {"text": "Commented-code block (7 lines) in eslint.config.js:81"}, "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-2a0a82b247eb8045", "name": "Commented-code block (5 lines) in tests/unit/views/hooks/useEntityCache.test.tsx:87", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/views/hooks/useEntityCache.test.tsx:87"}, "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-3c33beb3c15827ce", "name": "Commented-code block (10 lines) in tests/unit/views/hooks/uiPreferencesPrune.test.ts:187", "shortDescription": {"text": "Commented-code block (10 lines) in tests/unit/views/hooks/uiPreferencesPrune.test.ts:187"}, "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-340828d8efa0f467", "name": "Commented-code block (5 lines) in tests/unit/views/hooks/useOpenDesktopApp.test.tsx:117", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/views/hooks/useOpenDesktopApp.test.tsx:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6223f34e33dfc74c", "name": "Commented-code block (5 lines) in tests/unit/views/hooks/useDiscordVoiceState.test.tsx:276", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/views/hooks/useDiscordVoiceState.test.tsx:276"}, "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-9cd919acf0e18f91", "name": "Commented-code block (6 lines) in tests/unit/views/hooks/useDockPreferences.test.tsx:127", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/views/hooks/useDockPreferences.test.tsx:127"}, "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-d908fa991efc68ea", "name": "Commented-code block (6 lines) in tests/unit/views/hooks/homescreenLayoutPolicy.test.ts:331", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/views/hooks/homescreenLayoutPolicy.test.ts:331"}, "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-781d85f5dad9ccac", "name": "Commented-code block (5 lines) in tests/unit/views/components/templates/Shell/ShellHomeScreen.test.tsx:26", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/views/components/templates/Shell/ShellHomeScreen.test.tsx: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-07c6a0dd43625820", "name": "Commented-code block (5 lines) in tests/unit/views/components/templates/Shell/desktop-apps/extracted-apps.test.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/views/components/templates/Shell/desktop-apps/extracted-apps.test.tsx:25"}, "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-cf64073f22981b92", "name": "Commented-code block (5 lines) in tests/unit/views/components/organisms/windows/FloatingWindow.iframe.test.tsx:154", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/views/components/organisms/windows/FloatingWindow.iframe.test.tsx:154"}, "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-068d5ad9300f42e5", "name": "Commented-code block (5 lines) in tests/unit/views/components/organisms/shell/CfgKickoffLauncher.test.tsx:46", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/views/components/organisms/shell/CfgKickoffLauncher.test.tsx:46"}, "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-61fff348a8427baf", "name": "Commented-code block (5 lines) in tests/unit/views/components/organisms/persona/CalendarPill.test.tsx:138", "shortDescription": {"text": "Commented-code block (5 lines) in tests/unit/views/components/organisms/persona/CalendarPill.test.tsx:138"}, "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-53a53761b4978aab", "name": "Commented-code block (6 lines) in tests/unit/views/components/organisms/persona/CalendarPill.live-events.test.tsx:154", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/views/components/organisms/persona/CalendarPill.live-events.test.tsx:154"}, "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-6956dfae12b873ee", "name": "Commented-code block (9 lines) in tests/unit/views/components/organisms/persona/WalletPill.test.tsx:37", "shortDescription": {"text": "Commented-code block (9 lines) in tests/unit/views/components/organisms/persona/WalletPill.test.tsx:37"}, "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-22ede8838e4f1f98", "name": "Commented-code block (7 lines) in tests/config/jest.setup.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in tests/config/jest.setup.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f8a2c40e589896d", "name": "Commented-code block (7 lines) in src/proxy.ts:193", "shortDescription": {"text": "Commented-code block (7 lines) in src/proxy.ts:193"}, "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-bac91c225596b2bc", "name": "Commented-code block (5 lines) in src/clients/browser/api-fetch.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/clients/browser/api-fetch.ts:36"}, "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-e8074b8120237dc4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/api-fetch.ts:2", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/api-fetch.ts:2"}, "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-de00a893251c7b08", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/auth-fetch.tsx:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/auth-fetch.tsx:7"}, "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-05ff98f79404315f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/vtt-companion.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/vtt-companion.ts:52"}, "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-00ef8a80b31fa8a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/cypher-tools/client.ts:28", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/cypher-tools/client.ts:28"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7043b0dc16184224", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/core/client.ts:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/core/client.ts:5"}, "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-964c803588368370", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/ddb/client.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/ddb/client.ts:30"}, "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-263a5f3d5c81847e", "name": "Commented-code block (5 lines) in src/app/global-error.tsx:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/global-error.tsx:15"}, "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-58a770a12f1487d6", "name": "Commented-code block (5 lines) in src/app/apps/(core)/layout.tsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/apps/(core)/layout.tsx: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-66bca73af7ef217a", "name": "Commented-code block (8 lines) in src/app/apps/(core)/app-manager/page.tsx:66", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/apps/(core)/app-manager/page.tsx:66"}, "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-eb37cf27831ac81b", "name": "Commented-code block (6 lines) in src/app/apps/(core)/campaign-manager/[id]/layout.tsx:52", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/apps/(core)/campaign-manager/[id]/layout.tsx:52"}, "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-9cb525407ea9f7dc", "name": "Commented-code block (5 lines) in src/app/apps/(core)/campaign-manager/[id]/parties/[partyId]/layout.tsx:44", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/apps/(core)/campaign-manager/[id]/parties/[partyId]/layout.tsx:44"}, "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-a820c2984563411e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/compendium-manager/new/page.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/compendium-manager/new/page.tsx:47"}, "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-c07e5df74f3f8b8f", "name": "Commented-code block (6 lines) in src/app/apps/(core)/admin-dashboard/api/users/[id]/coins/route.ts:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/apps/(core)/admin-dashboard/api/users/[id]/coins/route.ts:38"}, "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-58a4a3453e1d3668", "name": "Commented-code block (5 lines) in src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:96", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:96"}, "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-c0179f2e84a0838f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx: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-8261f4bb6d9dd5f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:76"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2204fbe6fcbb2eb5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:140"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f9c758b344c352b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIn", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIntegrationTab.tsx:71"}, "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-d8f81cf271a58c87", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/Overv", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:192"}, "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-84d3fa9238b527f2", "name": "Commented-code block (5 lines) in src/app/apps/(webserver)/server-manager/page.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/apps/(webserver)/server-manager/page.tsx:47"}, "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-817abd10617a6f83", "name": "Commented-code block (5 lines) in src/app/apps/(webserver)/server-manager/[id]/layout.tsx:55", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/apps/(webserver)/server-manager/[id]/layout.tsx:55"}, "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-1116b56bfbd2d9de", "name": "Commented-code block (6 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/layout.tsx:79", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/layout.tsx:79"}, "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-66aa23104bcdde85", "name": "Commented-code block (6 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/page.tsx:45", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/page.tsx:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-194e5827423ccc10", "name": "Commented-code block (8 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettin", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:102"}, "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-e19fdb8ea8b5fa1b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/Gam", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:122"}, "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-25e85d73a8c9d73d", "name": "Commented-code block (5 lines) in src/app/discord/resesh/layout.tsx:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/discord/resesh/layout.tsx: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-9542da6a73b97c67", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/server/server-fetch.ts:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/server/server-fetch.ts:44"}, "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-767f87a7cea2bdc0", "name": "Commented-code block (7 lines) in src/views/hooks/useUiPreferences.ts:291", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/hooks/useUiPreferences.ts:291"}, "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-111c34669d1340bf", "name": "Commented-code block (5 lines) in src/views/hooks/useExternalLauncher.ts:65", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/hooks/useExternalLauncher.ts:65"}, "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-c27d00266f0b63da", "name": "Commented-code block (6 lines) in src/views/hooks/useDiscordVoiceState.ts:329", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/hooks/useDiscordVoiceState.ts:329"}, "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-589be2a78b290ef2", "name": "Commented-code block (6 lines) in src/views/hooks/useEntityCache.ts:121", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/hooks/useEntityCache.ts:121"}, "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-62bee699bae1c7d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/hooks/useDisplayIdentity.ts:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/hooks/useDisplayIdentity.ts:88"}, "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-31dd50fcb5fb3d98", "name": "Commented-code block (5 lines) in src/views/hooks/useDockPreferences.ts:37", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/hooks/useDockPreferences.ts:37"}, "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-7864e804786e6aaf", "name": "Commented-code block (5 lines) in src/views/hooks/defaultDockPins.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/hooks/defaultDockPins.ts:20"}, "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-282d5f4b8e45bf80", "name": "Commented-code block (5 lines) in src/views/hooks/uiPreferencesPrune.ts:141", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/hooks/uiPreferencesPrune.ts:141"}, "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-7eec3d42bb9fc346", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/hooks/useHomescreenLayout.ts:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/hooks/useHomescreenLayout.ts:14"}, "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-b7e6600c1a9e5c18", "name": "Commented-code block (5 lines) in src/views/discord-activity/resesh/ReSeshActivityClient.tsx:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/discord-activity/resesh/ReSeshActivityClient.tsx: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-dc1658ed0107813f", "name": "Commented-code block (8 lines) in src/views/discord-activity/discord/ActivityWindowRestorer.tsx:80", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/discord-activity/discord/ActivityWindowRestorer.tsx:80"}, "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-316be0ca4ea94999", "name": "Commented-code block (7 lines) in src/views/discord-activity/discord/ActivityHubView.tsx:179", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/discord-activity/discord/ActivityHubView.tsx:179"}, "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-8daed318485b7803", "name": "Commented-code block (7 lines) in src/views/discord-activity/discord/ActivityShell.tsx:81", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/discord-activity/discord/ActivityShell.tsx:81"}, "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-a5009787c404ac3f", "name": "Commented-code block (7 lines) in src/views/discord-activity/discord/useActivityDockApps.tsx:34", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/discord-activity/discord/useActivityDockApps.tsx:34"}, "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-c4ab9ba2da1bcdf0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/ChannelSetupView.tsx:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/ChannelSetupView.tsx:59"}, "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-a03028dcae0fd615", "name": "Commented-code block (6 lines) in src/views/discord-activity/discord/DiscordActivityClient.tsx:229", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/discord-activity/discord/DiscordActivityClient.tsx:229"}, "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-7ec3736c48d693ba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/DiscordActivityClient.tsx:182", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/DiscordActivityClient.tsx:182"}, "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-0b7c4d44c86a010d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/LoungeActivityView.tsx:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/LoungeActivityView.tsx:81"}, "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-d797046248091491", "name": "Commented-code block (6 lines) in src/views/discord-activity/discord/ActivityLauncherView.tsx:72", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/discord-activity/discord/ActivityLauncherView.tsx:72"}, "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-48785b7c51026649", "name": "Commented-code block (6 lines) in src/views/discord-activity/discord/ActivityDock.tsx:65", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/discord-activity/discord/ActivityDock.tsx:65"}, "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-6b8cad6e09de1759", "name": "Commented-code block (7 lines) in src/views/discord-activity/discord/DiscordLinkedView.tsx:139", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/discord-activity/discord/DiscordLinkedView.tsx:139"}, "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-3ee43be637b1c7ca", "name": "Commented-code block (6 lines) in src/views/discord-activity/campaigns/SkillControlPanel.tsx:76", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/discord-activity/campaigns/SkillControlPanel.tsx:76"}, "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-3501330a102ef1ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:57"}, "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-28cf0813a86e15e4", "name": "Commented-code block (5 lines) in src/views/components/templates/Shell/ShellHomeScreen.tsx:99", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/templates/Shell/ShellHomeScreen.tsx:99"}, "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-b44903593fb15791", "name": "Commented-code block (6 lines) in src/views/components/templates/Shell/ShellDesktop.tsx:92", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/templates/Shell/ShellDesktop.tsx: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-b6e72c75db785037", "name": "Commented-code block (8 lines) in src/views/components/templates/Shell/SurfaceAwareExternalLinkOpener.tsx:62", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/templates/Shell/SurfaceAwareExternalLinkOpener.tsx:62"}, "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-eb980cfe5a1fb25b", "name": "Commented-code block (5 lines) in src/views/components/templates/Shell/ShellHomeScreenFolders.tsx:194", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/templates/Shell/ShellHomeScreenFolders.tsx:194"}, "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-6aaeced2234f7c1b", "name": "Commented-code block (5 lines) in src/views/components/templates/Shell/window-manager/url-sync.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/templates/Shell/window-manager/url-sync.ts:44"}, "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-24c339180c4a32ea", "name": "Commented-code block (6 lines) in src/views/components/templates/Shell/window-manager/WindowManagerContext.tsx:337", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/templates/Shell/window-manager/WindowManagerContext.tsx:337"}, "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-d76255374723f213", "name": "Commented-code block (8 lines) in src/views/components/templates/Shell/window-manager/dockToggle.ts:43", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/templates/Shell/window-manager/dockToggle.ts:43"}, "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-1ff346c925092e57", "name": "Commented-code block (5 lines) in src/views/components/templates/Shell/window-manager/clampToViewport.ts:32", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/templates/Shell/window-manager/clampToViewport.ts:32"}, "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-24c21648055dd216", "name": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/DesktopAppRegistry.tsx:107", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/DesktopAppRegistry.tsx:107"}, "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-0922aaecd30bd624", "name": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/DesktopAppsHost.tsx:72", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/DesktopAppsHost.tsx:72"}, "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-799a4132fd0d559e", "name": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/launcherOrdering.ts:59", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/launcherOrdering.ts:59"}, "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-cbcd7584c6254a11", "name": "Commented-code block (6 lines) in src/views/components/molecules/FileMenu.tsx:188", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/molecules/FileMenu.tsx:188"}, "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-bc78c93bb8c68497", "name": "Commented-code block (6 lines) in src/views/components/molecules/CoreAppChrome.tsx:66", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/molecules/CoreAppChrome.tsx:66"}, "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-fe884fb3c87c9008", "name": "Commented-code block (9 lines) in src/views/components/organisms/PlayerLayoutShell.tsx:97", "shortDescription": {"text": "Commented-code block (9 lines) in src/views/components/organisms/PlayerLayoutShell.tsx:97"}, "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-4ccdca110d803e0b", "name": "Commented-code block (7 lines) in src/views/components/organisms/DockAppsSync.tsx:195", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/DockAppsSync.tsx:195"}, "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-fcd0ff8c493aa9f2", "name": "Commented-code block (6 lines) in src/views/components/organisms/windows/WindowChrome.tsx:271", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/windows/WindowChrome.tsx:271"}, "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-d9c07d790716c692", "name": "Commented-code block (6 lines) in src/views/components/organisms/windows/FloatingWindow.tsx:236", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/windows/FloatingWindow.tsx:236"}, "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-a44cc3347959a188", "name": "Commented-code block (15 lines) in src/views/components/organisms/resesh/ReseshPermissionsChecklist.tsx:146", "shortDescription": {"text": "Commented-code block (15 lines) in src/views/components/organisms/resesh/ReseshPermissionsChecklist.tsx:146"}, "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-37d925b9b5601ba0", "name": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshTabbedChannelView.tsx:129", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshTabbedChannelView.tsx: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-8c7438b272b9ae5b", "name": "Commented-code block (8 lines) in src/views/components/organisms/resesh/ReseshConsentRow.tsx:82", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/organisms/resesh/ReseshConsentRow.tsx:82"}, "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-1f2bb03edd6cefb6", "name": "Commented-code block (7 lines) in src/views/components/organisms/resesh/InstallReSeshBanner.tsx:36", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/resesh/InstallReSeshBanner.tsx:36"}, "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-7b4a00a72d7a0cc7", "name": "Commented-code block (6 lines) in src/views/components/organisms/resesh/ReseshRemoteRecorder.tsx:211", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/resesh/ReseshRemoteRecorder.tsx: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-044a295991928909", "name": "Commented-code block (6 lines) in src/views/components/organisms/resesh/ReSeshAppView.tsx:254", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/resesh/ReSeshAppView.tsx:254"}, "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-368a6c3c7d0ed95e", "name": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshRecordingPanel.tsx:28", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshRecordingPanel.tsx: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-3955460821ca4a1f", "name": "Commented-code block (7 lines) in src/views/components/organisms/resesh/ReseshChannelSettingsForm.tsx:179", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/resesh/ReseshChannelSettingsForm.tsx:179"}, "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-62b1ed33e64b19a7", "name": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshChannelList.tsx:169", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshChannelList.tsx:169"}, "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-4d657a9dc8be624a", "name": "Commented-code block (7 lines) in src/views/components/organisms/resesh/ReseshCaptions.tsx:23", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/resesh/ReseshCaptions.tsx:23"}, "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-40a9047f0cf1f8a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/dashboard/PhasePulseOffline.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/dashboard/PhasePulseOffline.tsx:26"}, "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-0518c8eb7eec86e8", "name": "Commented-code block (6 lines) in src/views/components/organisms/launcher/LauncherShell.tsx:67", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/launcher/LauncherShell.tsx:67"}, "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-57547ebe5911a951", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/access/AccessPanel.tsx:270", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/access/AccessPanel.tsx:270"}, "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-eb502fa2b8b708b8", "name": "Commented-code block (8 lines) in src/views/components/organisms/account/DiscordIntegrationClient.tsx:267", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/organisms/account/DiscordIntegrationClient.tsx:267"}, "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-e0d89b03273df3e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/FoundryPlatformManager.tsx:301", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/FoundryPlatformManager.tsx:301"}, "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-7ba7e48719b4390a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/UserManageWalletSection.tsx:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/UserManageWalletSection.tsx:76"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ccdffa382ea6f307", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/SystemsPageContent.tsx:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/SystemsPageContent.tsx:54"}, "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-1832b4d7a36d576c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/UsersManagementPageContent.tsx:81", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/UsersManagementPageContent.tsx:81"}, "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-c9ce240c9958a813", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/CoinsPageContent.tsx:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/CoinsPageContent.tsx:82"}, "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-b349a7c3c3ad502c", "name": "Commented-code block (6 lines) in src/views/components/organisms/admin/systems/SystemsTable.tsx:258", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/admin/systems/SystemsTable.tsx:258"}, "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-f6a221aa3a7dc0d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:388", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:388"}, "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-dd7a46974a751bfc", "name": "Commented-code block (5 lines) in src/views/components/organisms/vtt/AppVttOverlay.tsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/vtt/AppVttOverlay.tsx: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-09765f817db72ef3", "name": "Commented-code block (8 lines) in src/views/components/organisms/vtt/AppVttContext.tsx:133", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/organisms/vtt/AppVttContext.tsx:133"}, "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-ded8600f5fc1bd8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/vtt/AppVttContext.tsx:192", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/vtt/AppVttContext.tsx:192"}, "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-2630a01bfefd9977", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/compendium-sources/CompendiumSourceEditPage", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:160"}, "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-659804d36f646551", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/chat/ChatSettingsPanel.tsx:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/chat/ChatSettingsPanel.tsx:152"}, "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-3bd99afc28fa16d9", "name": "Commented-code block (5 lines) in src/views/components/organisms/foundry/FoundryServerLauncher.tsx:332", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/foundry/FoundryServerLauncher.tsx:332"}, "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-72e749c3e3dc8e91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/foundry/FoundryServerLauncher.tsx:267", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/foundry/FoundryServerLauncher.tsx:267"}, "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-8940afe53d41bf2b", "name": "Commented-code block (8 lines) in src/views/components/organisms/dock/CoreDock/CoreDockCenterZone.tsx:115", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/organisms/dock/CoreDock/CoreDockCenterZone.tsx: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-7515ccf1f348985a", "name": "Commented-code block (5 lines) in src/views/components/organisms/dock/CoreDock/AppExternalVttSync.tsx:64", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/dock/CoreDock/AppExternalVttSync.tsx: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-0f56982fb0d739a6", "name": "Commented-code block (6 lines) in src/views/components/organisms/dock/CoreDock/CoreDock.tsx:103", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/dock/CoreDock/CoreDock.tsx:103"}, "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-99e63137afb44fa4", "name": "Commented-code block (5 lines) in src/views/components/organisms/wallet/BalancesDropdown.tsx:103", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/wallet/BalancesDropdown.tsx:103"}, "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-8bf064faec65c71e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/wallet/TipHistoryPanel.tsx:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/wallet/TipHistoryPanel.tsx:65"}, "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-7175028c232d2262", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/catalog/EntityCatalog.tsx:15", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/catalog/EntityCatalog.tsx:15"}, "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-78bb29c8a6d38a22", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/collaboration/CollaborationSessionsPanel.ts", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/collaboration/CollaborationSessionsPanel.tsx:214"}, "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-d50f51a458aa0d6a", "name": "Commented-code block (5 lines) in src/views/components/organisms/fermi/FermiLauncherCard.tsx:53", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/fermi/FermiLauncherCard.tsx:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6aa23a1e887e4243", "name": "Commented-code block (5 lines) in src/views/components/organisms/apps/GameAppManagerMenu.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/apps/GameAppManagerMenu.tsx:19"}, "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-b313c5973bef358c", "name": "Commented-code block (6 lines) in src/views/components/organisms/apps/AppCatalogTile.tsx:183", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/apps/AppCatalogTile.tsx:183"}, "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-c7e34ce18248a24f", "name": "Commented-code block (6 lines) in src/views/components/organisms/calendar/EventEditModal.tsx:674", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/calendar/EventEditModal.tsx:674"}, "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-9d4fb2e54fc10cc5", "name": "Commented-code block (7 lines) in src/views/components/organisms/calendar/CalendarPageView.tsx:289", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/calendar/CalendarPageView.tsx:289"}, "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-699f2d91d3bb50bb", "name": "Commented-code block (7 lines) in src/views/components/organisms/calendar/MiniMonthGrid.tsx:29", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/calendar/MiniMonthGrid.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3b66486659c74d6", "name": "Commented-code block (5 lines) in src/views/components/organisms/shell/kickoffDragPolicy.ts:127", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/shell/kickoffDragPolicy.ts:127"}, "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-58ad47cf9a00bc2b", "name": "Commented-code block (6 lines) in src/views/components/organisms/shell/CfgKickoffLauncher.tsx:146", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/shell/CfgKickoffLauncher.tsx:146"}, "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-c36f75f772f4569e", "name": "Commented-code block (5 lines) in src/views/components/organisms/factorio/FactorioServerLauncher.tsx:109", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/factorio/FactorioServerLauncher.tsx: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-34ec6b0daed25c0d", "name": "Commented-code block (10 lines) in src/views/components/organisms/discord/DiscordServerRail.tsx:264", "shortDescription": {"text": "Commented-code block (10 lines) in src/views/components/organisms/discord/DiscordServerRail.tsx:264"}, "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-a56808c744eae2e2", "name": "Commented-code block (5 lines) in src/views/components/organisms/persona/WalletPill.tsx:80", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/persona/WalletPill.tsx:80"}, "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-07fd713d0665b845", "name": "Commented-code block (6 lines) in src/views/components/organisms/persona/calendar-recurrence.ts:136", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/persona/calendar-recurrence.ts:136"}, "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-2e5b5226737aa293", "name": "Commented-code block (7 lines) in src/views/components/organisms/persona/CalendarPill.tsx:173", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/persona/CalendarPill.tsx:173"}, "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-9d4a4a90f6bdc4d5", "name": "Commented-code block (6 lines) in src/views/components/organisms/server-manager/ServerManagerView.tsx:171", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/server-manager/ServerManagerView.tsx:171"}, "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-b13191ffb9c83778", "name": "Commented-code block (6 lines) in src/views/components/organisms/server-manager/CreateServerModal.tsx:338", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/server-manager/CreateServerModal.tsx:338"}, "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-5ac8637e72c3d962", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/asset-packs/AssetPackUpload.tsx:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/asset-packs/AssetPackUpload.tsx:11"}, "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-a9eeda76b4e52d67", "name": "Commented-code block (6 lines) in src/views/components/organisms/terraria/TerrariaServerLauncher.tsx:141", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/organisms/terraria/TerrariaServerLauncher.tsx:141"}, "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-d31945bb4e4a41e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CharactersPage.tsx:334", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CharactersPage.tsx:334"}, "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-0e9d6c0b879d6e2b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.tsx:29"}, "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-54a0e41143c70054", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfigWidgets.tsx:394", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfigWidgets.tsx:394"}, "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-6e51046d948c3d57", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfigSettings.tsx:85", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfigSettings.tsx:85"}, "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-429ec059b7554f3f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignSidebar.tsx:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignSidebar.tsx:125"}, "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-a7706e21a2da8101", "name": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:161", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:161"}, "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-bc484fd59483d2e9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:178", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:178"}, "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-6f41b3feda0abc3e", "name": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/SessionControlWidget.tsx:398", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/SessionControlWidget.tsx:398"}, "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-e381776974845828", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:179", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:179"}, "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-d9258b7214984a27", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyChatSettings.tsx:159", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyChatSettings.tsx:159"}, "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-c5e1131a71d0e636", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:110", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:110"}, "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-010f160b248cd7a6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:122"}, "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-59c25d37ade2223e", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyNav.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyNav.tsx:25"}, "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-e4115749b633d190", "name": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:141", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:141"}, "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-bea4e13de866a9d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:98"}, "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-219bb927b0824064", "name": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/CampaignVttLauncher.tsx:150", "shortDescription": {"text": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/CampaignVttLauncher.tsx:150"}, "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-6726b6eb1c584e51", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx: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-2286f5d205a7e8af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartiesPage.tsx:310", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartiesPage.tsx:310"}, "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-b58f644369099950", "name": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignChatSettings.tsx:151", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignChatSettings.tsx:151"}, "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-586eabd291bc5cf0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.tsx:206", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.tsx:206"}, "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-1340b6f8ad7478d5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartySheetsPanel.tsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartySheetsPanel.tsx:63"}, "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-48dcaf04ee3333ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyToolsPanel.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyToolsPanel.tsx:36"}, "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-9d5cd2353be02471", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyVttPanel.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyVttPanel.tsx:50"}, "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-c6cdc94930907127", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartySettingsPage.tsx:71", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartySettingsPage.tsx:71"}, "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-442ded6b19e6fa44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CharacterSheetProvider.tsx:105", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CharacterSheetProvider.tsx:105"}, "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-eb182a61e8ee7e8a", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyDiscordSection.tsx:268", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyDiscordSection.tsx:268"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a174eaa35375454", "name": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:20", "shortDescription": {"text": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:20"}, "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-e4e73c7aab826b59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:405", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:405"}, "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-1ccb232f8ab38760", "name": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/create-wizard/CampaignCreateWizard.tsx:42", "shortDescription": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/create-wizard/CampaignCreateWizard.tsx: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-8081d521f2fd92f1", "name": "Commented-code block (6 lines) in src/views/components/atoms/SignInButtons.tsx:21", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/atoms/SignInButtons.tsx:21"}, "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-6a7304dd6728bc31", "name": "Commented-code block (6 lines) in src/views/components/atoms/LocalTime.tsx:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/views/components/atoms/LocalTime.tsx: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-0d0da432180499f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireClient.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireClient.tsx:52"}, "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-cbc2a1b6077bc679", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireLinkedView.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireLinkedView.tsx:53"}, "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-f6bb29a037e7da90", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireCampaignPicker.tsx:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireCampaignPicker.tsx:80"}, "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-e97a7ec5dfb8399d", "name": "Commented-code block (7 lines) in src/constants/local-installed-apps.ts:227", "shortDescription": {"text": "Commented-code block (7 lines) in src/constants/local-installed-apps.ts:227"}, "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-d67ef7e8f03c2182", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/server/discord/discord-service.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/server/discord/discord-service.ts:36"}, "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-f57d1d9a220b1cd1", "name": "Commented-code block (5 lines) in stubs/elliptic/index.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in stubs/elliptic/index.js:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e297075fb960cebc", "name": "Dangling fetch: POST /api/v1/account/cypher-tools/proxy (src/clients/browser/cypher-tools/client.ts:28)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/cypher-tools/proxy (src/clients/browser/cypher-tools/client.ts:28)"}, "fullDescription": {"text": "`src/clients/browser/cypher-tools/client.ts:28` calls `POST /api/v1/account/cypher-tools/proxy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/cypher-tools/proxy`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cd4c7a70fed9c07", "name": "Dangling fetch: POST /api/v1/account/dndbeyond/proxy (src/clients/browser/ddb/client.ts:30)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/dndbeyond/proxy (src/clients/browser/ddb/client.ts:30)"}, "fullDescription": {"text": "`src/clients/browser/ddb/client.ts:30` calls `POST /api/v1/account/dndbeyond/proxy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/dndbeyond/proxy`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6adb896ad5609016", "name": "Dangling fetch: GET /api/v1/player/campaigns/invites/${code} (src/app/invite/[code]/InviteAcceptView.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/invites/${code} (src/app/invite/[code]/InviteAcceptView.tsx:41)"}, "fullDescription": {"text": "`src/app/invite/[code]/InviteAcceptView.tsx:41` calls `GET /api/v1/player/campaigns/invites/${code}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/invites/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9876416de7aa8dd2", "name": "Dangling fetch: POST /api/v1/player/campaigns/invites/${code} (src/app/invite/[code]/InviteAcceptView.tsx:58)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/invites/${code} (src/app/invite/[code]/InviteAcceptView.tsx:58)"}, "fullDescription": {"text": "`src/app/invite/[code]/InviteAcceptView.tsx:58` calls `POST /api/v1/player/campaigns/invites/${code}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/invites/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4c908454d0266b8", "name": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/app/apps/(core)/compendium-manager/new/page.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/app/apps/(core)/compendium-manager/new/page.tsx:47)"}, "fullDescription": {"text": "`src/app/apps/(core)/compendium-manager/new/page.tsx:47` calls `GET /api/v1/public/game-systems?type=ttrpg` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/game-systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f643af60c517c35", "name": "Dangling fetch: PATCH /api/admin/compendium-sources/${sourceId}/key-terms (src/app/apps/(core)/admin-dashboard/compendiu", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/compendium-sources/${sourceId}/key-terms (src/app/apps/(core)/admin-dashboard/compendium-sources/[id]/_components/KeyTermsEditor.tsx:41)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/compendium-sources/[id]/_components/KeyTermsEditor.tsx:41` calls `PATCH /api/admin/compendium-sources/${sourceId}/key-terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/compendium-sources/<p>/key-terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e112a5f8abc2bd0b", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:38)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:38` calls `GET /apps/admin-dashboard/api/systems` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6fde86855c93de8", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${found.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSl", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${found.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:49)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:49` calls `GET /apps/admin-dashboard/api/systems/${found.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7f89cb0b89d52cc", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:65)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:65` calls `GET /apps/admin-dashboard/api/systems` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de80d24490b70230", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${system.id}/sources/${sourceId} (src/app/apps/(core)/admin-dashbo", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${system.id}/sources/${sourceId} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:76)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:76` calls `GET /apps/admin-dashboard/api/systems/${system.id}/sources/${sourceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/sources/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5cb3beceab120380", "name": "Dangling fetch: POST /apps/admin-dashboard/api/parse-document (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/parse-document (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:110)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:110` calls `POST /apps/admin-dashboard/api/parse-document` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/parse-document`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef4ceb10910ec53a", "name": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[syste", "shortDescription": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SheetProvidersTab.tsx:51)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SheetProvidersTab.tsx:51` calls `PATCH /apps/admin-dashboard/api/systems/${system.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39995a1431a7d96b", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/sources (src/app/apps/(core)/admin-dashboard/systems/[", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/sources (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SourcesTab.tsx:13)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SourcesTab.tsx:13` calls `GET /apps/admin-dashboard/api/systems/${systemId}/sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-870f08108f989280", "name": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${systemId}/sources/${s.id} (src/app/apps/(core)/admin-dashboar", "shortDescription": {"text": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${systemId}/sources/${s.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SourcesTab.tsx:31)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SourcesTab.tsx:31` calls `DELETE /apps/admin-dashboard/api/systems/${systemId}/sources/${s.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/sources/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03769ea5f3279a05", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/kb (src/app/apps/(core)/admin-dashboard/systems/[syste", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/kb (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:46)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:46` calls `GET /apps/admin-dashboard/api/systems/${systemId}/kb` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/kb`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bcbefd21069f5d6a", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/sources (src/app/apps/(core)/admin-dashboard/systems/[", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/sources (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:47)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:47` calls `GET /apps/admin-dashboard/api/systems/${systemId}/sources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/sources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3daca63b0302975", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/kb/${article.id} (src/app/apps/(core)/admin-dashboard/", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/kb/${article.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:90)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:90` calls `GET /apps/admin-dashboard/api/systems/${systemId}/kb/${article.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/kb/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7deeb801da4bc49d", "name": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${systemId}/kb/${article.id} (src/app/apps/(core)/admin-dashboa", "shortDescription": {"text": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${systemId}/kb/${article.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:163)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:163` calls `DELETE /apps/admin-dashboard/api/systems/${systemId}/kb/${article.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/kb/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16020ef87bedaa22", "name": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${systemId}/kb/embed (src/app/apps/(core)/admin-dashboard/systems", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${systemId}/kb/embed (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:211)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:211` calls `POST /apps/admin-dashboard/api/systems/${systemId}/kb/embed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/kb/embed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d59e3fdc0726fade", "name": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[syste", "shortDescription": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIntegrationTab.tsx:71)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIntegrationTab.tsx:71` calls `PATCH /apps/admin-dashboard/api/systems/${system.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-992fcf98f45b1b5e", "name": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${system.id}/sync (src/app/apps/(core)/admin-dashboard/systems/[s", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${system.id}/sync (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIntegrationTab.tsx:128)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIntegrationTab.tsx:128` calls `POST /apps/admin-dashboard/api/systems/${system.id}/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/sync`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a4b8a1796a048f7", "name": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_compone", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:172)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:172` calls `GET /apps/admin-dashboard/api/systems` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-abeca75afd87bdbc", "name": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[syste", "shortDescription": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:192)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:192` calls `PATCH /apps/admin-dashboard/api/systems/${system.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2c6f8cdcc62adef", "name": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[syste", "shortDescription": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/CompendiumTab.tsx:39)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/CompendiumTab.tsx:39` calls `PATCH /apps/admin-dashboard/api/systems/${system.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb3d0038ca91c236", "name": "Dangling fetch: PATCH /api/admin/game-systems/${system.id}/key-terms (src/app/apps/(core)/admin-dashboard/systems/[syste", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/game-systems/${system.id}/key-terms (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KeyTermsTab.tsx:46)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KeyTermsTab.tsx:46` calls `PATCH /api/admin/game-systems/${system.id}/key-terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/game-systems/<p>/key-terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cde66c09fad10ceb", "name": "Dangling fetch: POST /api/admin/game-systems/${system.id}/key-terms/reset-to-defaults (src/app/apps/(core)/admin-dashboa", "shortDescription": {"text": "Dangling fetch: POST /api/admin/game-systems/${system.id}/key-terms/reset-to-defaults (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KeyTermsTab.tsx:72)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KeyTermsTab.tsx:72` calls `POST /api/admin/game-systems/${system.id}/key-terms/reset-to-defaults` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/game-systems/<p>/key-terms/reset-to-defaults`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-88ad102c0c0a33e3", "name": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[syste", "shortDescription": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/CompendiumProvidersTab.tsx:42)"}, "fullDescription": {"text": "`src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/CompendiumProvidersTab.tsx:42` calls `PATCH /apps/admin-dashboard/api/systems/${system.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4462a46f1f438f6e", "name": "Dangling fetch: POST /api/v1/account/payments/subscribe (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:76)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/subscribe (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:76)"}, "fullDescription": {"text": "`src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:76` calls `POST /api/v1/account/payments/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/subscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f32774a66a7afb7", "name": "Dangling fetch: POST /api/v1/account/payments/portal (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:95)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/portal (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:95)"}, "fullDescription": {"text": "`src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:95` calls `POST /api/v1/account/payments/portal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/portal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-503047aa1ac8bb1e", "name": "Dangling fetch: POST /api/v1/account/compute/topup (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:112)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/compute/topup (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:112)"}, "fullDescription": {"text": "`src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:112` calls `POST /api/v1/account/compute/topup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/compute/topup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46c94d371ca540b4", "name": "Dangling fetch: POST /api/v1/account/payments/coins (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:135)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/coins (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:135)"}, "fullDescription": {"text": "`src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:135` calls `POST /api/v1/account/payments/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02d6abf5baea55a9", "name": "Dangling fetch: PATCH /api/v1/game-worlds/${encodeURIComponent(worldId)} (src/app/apps/(webserver)/server-manager/[id]/w", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/game-worlds/${encodeURIComponent(worldId)} (src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/sessions/NextSessionEditor.tsx:39)"}, "fullDescription": {"text": "`src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/sessions/NextSessionEditor.tsx:39` calls `PATCH /api/v1/game-worlds/${encodeURIComponent(worldId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/game-worlds/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0dc7a9d494984e1c", "name": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:122)"}, "fullDescription": {"text": "`src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:122` calls `GET /api/v1/public/game-systems?type=ttrpg` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/game-systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-666837134da43204", "name": "Dangling fetch: PATCH /api/v1/game-worlds/${encodeURIComponent(world.id)} (src/app/apps/(webserver)/server-manager/[id]/", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/game-worlds/${encodeURIComponent(world.id)} (src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:179)"}, "fullDescription": {"text": "`src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:179` calls `PATCH /api/v1/game-worlds/${encodeURIComponent(world.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/game-worlds/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bff95006aad7141", "name": "Dangling fetch: POST /api/v1/game-worlds (src/app/apps/(webserver)/server-manager/[id]/worlds/new/CreateGameWorldForm.ts", "shortDescription": {"text": "Dangling fetch: POST /api/v1/game-worlds (src/app/apps/(webserver)/server-manager/[id]/worlds/new/CreateGameWorldForm.tsx:52)"}, "fullDescription": {"text": "`src/app/apps/(webserver)/server-manager/[id]/worlds/new/CreateGameWorldForm.tsx:52` calls `POST /api/v1/game-worlds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/game-worlds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5ab0a13db0f3c8f", "name": "Dangling fetch: PATCH /api/v1/account/profile (src/views/hooks/useTimezoneSync.ts:39)", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/account/profile (src/views/hooks/useTimezoneSync.ts:39)"}, "fullDescription": {"text": "`src/views/hooks/useTimezoneSync.ts:39` calls `PATCH /api/v1/account/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b1bdfe88894587f", "name": "Dangling fetch: GET /api/v1/platform/phase (src/views/hooks/usePhaseProgress.ts:62)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/platform/phase (src/views/hooks/usePhaseProgress.ts:62)"}, "fullDescription": {"text": "`src/views/hooks/usePhaseProgress.ts:62` calls `GET /api/v1/platform/phase` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/platform/phase`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0441ece9970c4b3", "name": "Dangling fetch: GET /api/v1/public/rates (src/views/hooks/useDiscordVoiceState.ts:392)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/hooks/useDiscordVoiceState.ts:392)"}, "fullDescription": {"text": "`src/views/hooks/useDiscordVoiceState.ts:392` calls `GET /api/v1/public/rates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/rates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5ac8b78563efbaa", "name": "Dangling fetch: GET /api/v1/account/displays (src/views/hooks/useDisplayIdentity.ts:64)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/displays (src/views/hooks/useDisplayIdentity.ts:64)"}, "fullDescription": {"text": "`src/views/hooks/useDisplayIdentity.ts:64` calls `GET /api/v1/account/displays` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/displays`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea6d00c50f160b9f", "name": "Dangling fetch: POST /api/v1/account/displays/checkin (src/views/hooks/useDisplayIdentity.ts:88)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/displays/checkin (src/views/hooks/useDisplayIdentity.ts:88)"}, "fullDescription": {"text": "`src/views/hooks/useDisplayIdentity.ts:88` calls `POST /api/v1/account/displays/checkin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/displays/checkin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9f7dff6420a792eb", "name": "Dangling fetch: PATCH /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:115)", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:115)"}, "fullDescription": {"text": "`src/views/hooks/useDisplayIdentity.ts:115` calls `PATCH /api/v1/account/displays/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/displays/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f66ba31b43ff92f7", "name": "Dangling fetch: PATCH /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:129)", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:129)"}, "fullDescription": {"text": "`src/views/hooks/useDisplayIdentity.ts:129` calls `PATCH /api/v1/account/displays/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/displays/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59c97d3e149e05b7", "name": "Dangling fetch: DELETE /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:147)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:147)"}, "fullDescription": {"text": "`src/views/hooks/useDisplayIdentity.ts:147` calls `DELETE /api/v1/account/displays/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/displays/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bfa3de2818216078", "name": "Dangling fetch: POST /api/v1/account/integrations/pair (src/views/pair/PairClient.tsx:19)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/integrations/pair (src/views/pair/PairClient.tsx:19)"}, "fullDescription": {"text": "`src/views/pair/PairClient.tsx:19` calls `POST /api/v1/account/integrations/pair` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations/pair`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff3c440169dda27d", "name": "Dangling fetch: POST /api/discord/resesh/token (src/views/discord-activity/resesh/ReSeshActivityClient.tsx:148)", "shortDescription": {"text": "Dangling fetch: POST /api/discord/resesh/token (src/views/discord-activity/resesh/ReSeshActivityClient.tsx:148)"}, "fullDescription": {"text": "`src/views/discord-activity/resesh/ReSeshActivityClient.tsx:148` calls `POST /api/discord/resesh/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord/resesh/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f48a61fe776ac06b", "name": "Dangling fetch: GET /api/game-systems/${game.systemSlug}/definition (src/views/discord-activity/lounge/ChessGameView.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/game-systems/${game.systemSlug}/definition (src/views/discord-activity/lounge/ChessGameView.tsx:77)"}, "fullDescription": {"text": "`src/views/discord-activity/lounge/ChessGameView.tsx:77` calls `GET /api/game-systems/${game.systemSlug}/definition` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/game-systems/<p>/definition`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf6c2a90e6402113", "name": "Dangling fetch: POST /api/v1/games/${game.id}/move (src/views/discord-activity/lounge/ChessGameView.tsx:123)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/games/${game.id}/move (src/views/discord-activity/lounge/ChessGameView.tsx:123)"}, "fullDescription": {"text": "`src/views/discord-activity/lounge/ChessGameView.tsx:123` calls `POST /api/v1/games/${game.id}/move` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/games/<p>/move`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09d46f996b4e0557", "name": "Dangling fetch: POST /api/v1/games/${game.id}/resign (src/views/discord-activity/lounge/ChessGameView.tsx:145)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/games/${game.id}/resign (src/views/discord-activity/lounge/ChessGameView.tsx:145)"}, "fullDescription": {"text": "`src/views/discord-activity/lounge/ChessGameView.tsx:145` calls `POST /api/v1/games/${game.id}/resign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/games/<p>/resign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b972c3470d6e6d65", "name": "Dangling fetch: DELETE /api/v1/games/${game.id} (src/views/discord-activity/lounge/ChessGameView.tsx:160)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/games/${game.id} (src/views/discord-activity/lounge/ChessGameView.tsx:160)"}, "fullDescription": {"text": "`src/views/discord-activity/lounge/ChessGameView.tsx:160` calls `DELETE /api/v1/games/${game.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/games/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1be50c2527fa1985", "name": "Dangling fetch: POST /api/v1/games/${game.id}/join (src/views/discord-activity/lounge/ChessGameView.tsx:175)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/games/${game.id}/join (src/views/discord-activity/lounge/ChessGameView.tsx:175)"}, "fullDescription": {"text": "`src/views/discord-activity/lounge/ChessGameView.tsx:175` calls `POST /api/v1/games/${game.id}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/games/<p>/join`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4c0cd488ab63d9a", "name": "Dangling fetch: GET /api/config (src/views/discord-activity/discord/ActivityShell.tsx:130)", "shortDescription": {"text": "Dangling fetch: GET /api/config (src/views/discord-activity/discord/ActivityShell.tsx:130)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/ActivityShell.tsx:130` calls `GET /api/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7218347535c53d3c", "name": "Dangling fetch: GET /api/discord/activity/campaigns (src/views/discord-activity/discord/ChannelSetupView.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/discord/activity/campaigns (src/views/discord-activity/discord/ChannelSetupView.tsx:59)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/ChannelSetupView.tsx:59` calls `GET /api/discord/activity/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord/activity/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b487daa7aca864bb", "name": "Dangling fetch: POST /api/discord/activity/link (src/views/discord-activity/discord/ChannelSetupView.tsx:77)", "shortDescription": {"text": "Dangling fetch: POST /api/discord/activity/link (src/views/discord-activity/discord/ChannelSetupView.tsx:77)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/ChannelSetupView.tsx:77` calls `POST /api/discord/activity/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord/activity/link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6eb70e8e814c69c", "name": "Dangling fetch: POST /api/discord/activity/link (src/views/discord-activity/discord/ChannelSetupView.tsx:204)", "shortDescription": {"text": "Dangling fetch: POST /api/discord/activity/link (src/views/discord-activity/discord/ChannelSetupView.tsx:204)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/ChannelSetupView.tsx:204` calls `POST /api/discord/activity/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord/activity/link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13177a40bef89987", "name": "Dangling fetch: POST /api/discord/activity/parties (src/views/discord-activity/discord/ChannelSetupView.tsx:223)", "shortDescription": {"text": "Dangling fetch: POST /api/discord/activity/parties (src/views/discord-activity/discord/ChannelSetupView.tsx:223)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/ChannelSetupView.tsx:223` calls `POST /api/discord/activity/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord/activity/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e2bc2435c931f7e", "name": "Dangling fetch: POST /api/discord/activity/session (src/views/discord-activity/discord/DiscordActivityClient.tsx:84)", "shortDescription": {"text": "Dangling fetch: POST /api/discord/activity/session (src/views/discord-activity/discord/DiscordActivityClient.tsx:84)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/DiscordActivityClient.tsx:84` calls `POST /api/discord/activity/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord/activity/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10e092ca8f60fe3a", "name": "Dangling fetch: GET /api/discord/activity/context?channelId=${encodeURIComponent(cid)} (src/views/discord-activity/disco", "shortDescription": {"text": "Dangling fetch: GET /api/discord/activity/context?channelId=${encodeURIComponent(cid)} (src/views/discord-activity/discord/DiscordActivityClient.tsx:182)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/DiscordActivityClient.tsx:182` calls `GET /api/discord/activity/context?channelId=${encodeURIComponent(cid)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord/activity/context`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c66b884404ccbaf1", "name": "Dangling fetch: POST /api/discord/token (src/views/discord-activity/discord/DiscordActivityClient.tsx:290)", "shortDescription": {"text": "Dangling fetch: POST /api/discord/token (src/views/discord-activity/discord/DiscordActivityClient.tsx:290)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/DiscordActivityClient.tsx:290` calls `POST /api/discord/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/discord/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c60fa2469bde31ad", "name": "Dangling fetch: GET /api/campaigns/${campaign.id}/players (src/views/discord-activity/discord/CampaignActivityView.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/campaigns/${campaign.id}/players (src/views/discord-activity/discord/CampaignActivityView.tsx:152)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/CampaignActivityView.tsx:152` calls `GET /api/campaigns/${campaign.id}/players` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/campaigns/<p>/players`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad71ac6f61c5e73d", "name": "Dangling fetch: GET /api/campaigns/${campaign.id}/characters/${character.id} (src/views/discord-activity/discord/Campaig", "shortDescription": {"text": "Dangling fetch: GET /api/campaigns/${campaign.id}/characters/${character.id} (src/views/discord-activity/discord/CampaignActivityView.tsx:258)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/CampaignActivityView.tsx:258` calls `GET /api/campaigns/${campaign.id}/characters/${character.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3352326606ab9df9", "name": "Dangling fetch: GET /api/campaigns/${campaign.id}/characters/${character.id} (src/views/discord-activity/discord/Campaig", "shortDescription": {"text": "Dangling fetch: GET /api/campaigns/${campaign.id}/characters/${character.id} (src/views/discord-activity/discord/CampaignActivityView.tsx:335)"}, "fullDescription": {"text": "`src/views/discord-activity/discord/CampaignActivityView.tsx:335` calls `GET /api/campaigns/${campaign.id}/characters/${character.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07fe6711e3fc11d0", "name": "Dangling fetch: POST /api/campaigns/${campaignId}/dice/roll (src/views/discord-activity/campaigns/SystemDiceRoller.tsx:2", "shortDescription": {"text": "Dangling fetch: POST /api/campaigns/${campaignId}/dice/roll (src/views/discord-activity/campaigns/SystemDiceRoller.tsx:255)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/SystemDiceRoller.tsx:255` calls `POST /api/campaigns/${campaignId}/dice/roll` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/campaigns/<p>/dice/roll`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89c44fd14626c1b7", "name": "Dangling fetch: GET /api/v1/public/rates (src/views/discord-activity/campaigns/SkillControlPanel.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/discord-activity/campaigns/SkillControlPanel.tsx:63)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/SkillControlPanel.tsx:63` calls `GET /api/v1/public/rates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/rates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6096f12b558e7b95", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/personas/${personaId}/skills/${slug}/status (src/views/discor", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/personas/${personaId}/skills/${slug}/status (src/views/discord-activity/campaigns/SkillControlPanel.tsx:101)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/SkillControlPanel.tsx:101` calls `GET /api/v1/player/campaigns/${campaignId}/personas/${personaId}/skills/${slug}/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/personas/<p>/skills/<p>/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cf5d0816f0110ab", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/personas/${personaId}/skills/${slug}/${endpoint} (src/views/", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/personas/${personaId}/skills/${slug}/${endpoint} (src/views/discord-activity/campaigns/SkillControlPanel.tsx:131)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/SkillControlPanel.tsx:131` calls `POST /api/v1/player/campaigns/${campaignId}/personas/${personaId}/skills/${slug}/${endpoint}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/personas/<p>/skills/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-143e64e7b006b30e", "name": "Dangling fetch: GET /api/v1/public/game-systems/${gameSystemSlug}/mechanics (src/views/discord-activity/campaigns/Sessio", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/game-systems/${gameSystemSlug}/mechanics (src/views/discord-activity/campaigns/SessionToolsPanel.tsx:58)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/SessionToolsPanel.tsx:58` calls `GET /api/v1/public/game-systems/${gameSystemSlug}/mechanics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/game-systems/<p>/mechanics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ab6bd86591136f7", "name": "Dangling fetch: GET /api/compendiums?systemSlug=${encodeURIComponent(gameSystemSlug)}&limit=20 (src/views/discord-activi", "shortDescription": {"text": "Dangling fetch: GET /api/compendiums?systemSlug=${encodeURIComponent(gameSystemSlug)}&limit=20 (src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:57)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:57` calls `GET /api/compendiums?systemSlug=${encodeURIComponent(gameSystemSlug)}&limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compendiums`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fee7ed2edd558881", "name": "Dangling fetch: GET /api/compendiums/${selectedId}/entries?${qs} (src/views/discord-activity/campaigns/SessionCompendium", "shortDescription": {"text": "Dangling fetch: GET /api/compendiums/${selectedId}/entries?${qs} (src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:87)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:87` calls `GET /api/compendiums/${selectedId}/entries?${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compendiums/<p>/entries`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-217efe89b473a5ee", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/sessions/active/rolls (src/views/discord-activity/campaigns/R", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/sessions/active/rolls (src/views/discord-activity/campaigns/RollLogPanel.tsx:106)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/RollLogPanel.tsx:106` calls `GET /api/v1/player/campaigns/${campaignId}/sessions/active/rolls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/sessions/active/rolls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5cbe3cc87977afb", "name": "Dangling fetch: PATCH /api/campaigns/${campaignId}/characters/${characterId} (src/views/discord-activity/campaigns/Chara", "shortDescription": {"text": "Dangling fetch: PATCH /api/campaigns/${campaignId}/characters/${characterId} (src/views/discord-activity/campaigns/CharacterProfileEditor.tsx:73)"}, "fullDescription": {"text": "`src/views/discord-activity/campaigns/CharacterProfileEditor.tsx:73` calls `PATCH /api/campaigns/${campaignId}/characters/${characterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a1d63bc915f737c", "name": "Dangling fetch: GET /api/v1/player/hub/characters (src/views/components/templates/Shell/desktop-apps/CharacterManagerApp", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/hub/characters (src/views/components/templates/Shell/desktop-apps/CharacterManagerApp.tsx:30)"}, "fullDescription": {"text": "`src/views/components/templates/Shell/desktop-apps/CharacterManagerApp.tsx:30` calls `GET /api/v1/player/hub/characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/hub/characters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37996d36f876eb02", "name": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/templates/Shell/desktop-apps/CampaignManagerApp.tsx:2", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/templates/Shell/desktop-apps/CampaignManagerApp.tsx:26)"}, "fullDescription": {"text": "`src/views/components/templates/Shell/desktop-apps/CampaignManagerApp.tsx:26` calls `GET /api/v1/player/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12d696df6f7a30bb", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignSlug}/parties (src/views/components/molecules/PerPartySettingsLin", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignSlug}/parties (src/views/components/molecules/PerPartySettingsLinks.tsx:39)"}, "fullDescription": {"text": "`src/views/components/molecules/PerPartySettingsLinks.tsx:39` calls `GET /api/v1/player/campaigns/${campaignSlug}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15ffda2b9b9b40bd", "name": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/molecules/BuyCoinsSection.tsx:27)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/molecules/BuyCoinsSection.tsx:27)"}, "fullDescription": {"text": "`src/views/components/molecules/BuyCoinsSection.tsx:27` calls `POST /api/v1/account/payments/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c7f45e533c3b034", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/text-channels (src/views/components/molecules/Discord", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/text-channels (src/views/components/molecules/DiscordChannelThreadPicker.tsx:79)"}, "fullDescription": {"text": "`src/views/components/molecules/DiscordChannelThreadPicker.tsx:79` calls `GET /api/v1/player/campaigns/${campaignId}/discord/text-channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/text-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-229a6c2b3ed3eb92", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${channelId}/threads (src/views/components/m", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${channelId}/threads (src/views/components/molecules/DiscordChannelThreadPicker.tsx:108)"}, "fullDescription": {"text": "`src/views/components/molecules/DiscordChannelThreadPicker.tsx:108` calls `GET /api/v1/player/campaigns/${campaignId}/discord/channels/${channelId}/threads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/channels/<p>/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2a49ca906ab2685", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/channels/${channelId}/threads (src/views/components/", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/channels/${channelId}/threads (src/views/components/molecules/DiscordChannelThreadPicker.tsx:137)"}, "fullDescription": {"text": "`src/views/components/molecules/DiscordChannelThreadPicker.tsx:137` calls `POST /api/v1/player/campaigns/${campaignId}/discord/channels/${channelId}/threads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/channels/<p>/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75e1a77646a26c9a", "name": "Dangling fetch: POST /api/v1/account/payments/subscribe (src/views/components/molecules/SubscribeSection.tsx:66)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/subscribe (src/views/components/molecules/SubscribeSection.tsx:66)"}, "fullDescription": {"text": "`src/views/components/molecules/SubscribeSection.tsx:66` calls `POST /api/v1/account/payments/subscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/subscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d3e58ccca7da465", "name": "Dangling fetch: POST /api/v1/account/payments/portal (src/views/components/molecules/SubscribeSection.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/portal (src/views/components/molecules/SubscribeSection.tsx:88)"}, "fullDescription": {"text": "`src/views/components/molecules/SubscribeSection.tsx:88` calls `POST /api/v1/account/payments/portal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/portal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0ca3cf81f893eb6", "name": "Dangling fetch: POST /api/v1/account/payments/story-credit/convert (src/views/components/molecules/StoryCreditActions.ts", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/story-credit/convert (src/views/components/molecules/StoryCreditActions.tsx:38)"}, "fullDescription": {"text": "`src/views/components/molecules/StoryCreditActions.tsx:38` calls `POST /api/v1/account/payments/story-credit/convert` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/story-credit/convert`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-303a97be11033974", "name": "Dangling fetch: POST /api/v1/account/payments/story-credit/redeem (src/views/components/molecules/StoryCreditActions.tsx", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/story-credit/redeem (src/views/components/molecules/StoryCreditActions.tsx:59)"}, "fullDescription": {"text": "`src/views/components/molecules/StoryCreditActions.tsx:59` calls `POST /api/v1/account/payments/story-credit/redeem` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/story-credit/redeem`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0d62e572669d645", "name": "Dangling fetch: POST /api/v1/account/payments/connect/onboard (src/views/components/molecules/StoryCreditActions.tsx:79)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/connect/onboard (src/views/components/molecules/StoryCreditActions.tsx:79)"}, "fullDescription": {"text": "`src/views/components/molecules/StoryCreditActions.tsx:79` calls `POST /api/v1/account/payments/connect/onboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/connect/onboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13aa0063e191c877", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/join-request (src/views/components/molecules/JoinRequestButt", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/join-request (src/views/components/molecules/JoinRequestButton.tsx:24)"}, "fullDescription": {"text": "`src/views/components/molecules/JoinRequestButton.tsx:24` calls `POST /api/v1/player/campaigns/${campaignId}/join-request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/join-request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d08547f12817fcc", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/molecules/TipRecipientGroupCard.tsx:49)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/molecules/TipRecipientGroupCard.tsx:49)"}, "fullDescription": {"text": "`src/views/components/molecules/TipRecipientGroupCard.tsx:49` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b3da8758ebffa7d", "name": "Dangling fetch: POST /api/v1/account/avatar (src/views/components/molecules/ProfileForm.tsx:29)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/avatar (src/views/components/molecules/ProfileForm.tsx:29)"}, "fullDescription": {"text": "`src/views/components/molecules/ProfileForm.tsx:29` calls `POST /api/v1/account/avatar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/avatar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9f33c4da47602e72", "name": "Dangling fetch: PATCH /api/v1/account/profile (src/views/components/molecules/ProfileForm.tsx:47)", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/account/profile (src/views/components/molecules/ProfileForm.tsx:47)"}, "fullDescription": {"text": "`src/views/components/molecules/ProfileForm.tsx:47` calls `PATCH /api/v1/account/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51966a9a958303ea", "name": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/molecules/BuyCoinsInline.tsx:32)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/molecules/BuyCoinsInline.tsx:32)"}, "fullDescription": {"text": "`src/views/components/molecules/BuyCoinsInline.tsx:32` calls `POST /api/v1/account/payments/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45ef4b5b637cf73d", "name": "Dangling fetch: POST /api/v1/player/campaigns/invites/${code} (src/views/components/organisms/InviteAcceptView.tsx:38)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/invites/${code} (src/views/components/organisms/InviteAcceptView.tsx:38)"}, "fullDescription": {"text": "`src/views/components/organisms/InviteAcceptView.tsx:38` calls `POST /api/v1/player/campaigns/invites/${code}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/invites/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa93ee8ddc9a0cd6", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/PartiesView.tsx:108)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/PartiesView.tsx:108)"}, "fullDescription": {"text": "`src/views/components/organisms/PartiesView.tsx:108` calls `POST /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2275f92a8a59b9a", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/foundry/sync/${record.id}/resolve (src/views/components/orga", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/foundry/sync/${record.id}/resolve (src/views/components/organisms/VttSyncConflictPanel.tsx:127)"}, "fullDescription": {"text": "`src/views/components/organisms/VttSyncConflictPanel.tsx:127` calls `POST /api/v1/player/campaigns/${campaignId}/foundry/sync/${record.id}/resolve` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/foundry/sync/<p>/resolve`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12f0efe17a6930d2", "name": "Dangling fetch: GET /api/v1/platform/phase (src/views/components/organisms/dashboard/PhasePulseOffline.tsx:26)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/platform/phase (src/views/components/organisms/dashboard/PhasePulseOffline.tsx:26)"}, "fullDescription": {"text": "`src/views/components/organisms/dashboard/PhasePulseOffline.tsx:26` calls `GET /api/v1/platform/phase` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/platform/phase`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c006dde4ac03f34e", "name": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/organisms/access/AccessPanel.tsx:199)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/organisms/access/AccessPanel.tsx:199)"}, "fullDescription": {"text": "`src/views/components/organisms/access/AccessPanel.tsx:199` calls `GET /api/v1/player/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63743e7f51dd5a06", "name": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/organisms/access/AccessPanel.tsx:211)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/organisms/access/AccessPanel.tsx:211)"}, "fullDescription": {"text": "`src/views/components/organisms/access/AccessPanel.tsx:211` calls `GET /api/v1/player/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7dd27878bfa58c3", "name": "Dangling fetch: GET /api/v1/player/campaigns/${encodeURIComponent(c.id)}/parties (src/views/components/organisms/access/", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${encodeURIComponent(c.id)}/parties (src/views/components/organisms/access/AccessPanel.tsx:217)"}, "fullDescription": {"text": "`src/views/components/organisms/access/AccessPanel.tsx:217` calls `GET /api/v1/player/campaigns/${encodeURIComponent(c.id)}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13e597a51aff7446", "name": "Dangling fetch: GET /api/v1/account/profile (src/views/components/organisms/account/ProfilePanel.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/profile (src/views/components/organisms/account/ProfilePanel.tsx:43)"}, "fullDescription": {"text": "`src/views/components/organisms/account/ProfilePanel.tsx:43` calls `GET /api/v1/account/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6924fb1fd42ba24f", "name": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/LinkAccountPanel.tsx:75)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/LinkAccountPanel.tsx:75)"}, "fullDescription": {"text": "`src/views/components/organisms/account/LinkAccountPanel.tsx:75` calls `GET /api/v1/account/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4827beb22ab6c973", "name": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/DeveloperPanel.tsx:32)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/DeveloperPanel.tsx:32)"}, "fullDescription": {"text": "`src/views/components/organisms/account/DeveloperPanel.tsx:32` calls `GET /api/v1/account/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b217e1bf9356d762", "name": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/LinkedAccountsClient.tsx:89)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/LinkedAccountsClient.tsx:89)"}, "fullDescription": {"text": "`src/views/components/organisms/account/LinkedAccountsClient.tsx:89` calls `GET /api/v1/account/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a293c961ceebc86", "name": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/InstalledAppsPanel.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/InstalledAppsPanel.tsx:43)"}, "fullDescription": {"text": "`src/views/components/organisms/account/InstalledAppsPanel.tsx:43` calls `GET /api/v1/installations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff4814132234870c", "name": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/InstalledAppsPanel.tsx:43)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/InstalledAppsPanel.tsx:43)"}, "fullDescription": {"text": "`src/views/components/organisms/account/InstalledAppsPanel.tsx:43` calls `GET /api/v1/account/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4a49cf2bca2c2fb", "name": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/ConnectionsPanel.tsx:34)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/ConnectionsPanel.tsx:34)"}, "fullDescription": {"text": "`src/views/components/organisms/account/ConnectionsPanel.tsx:34` calls `GET /api/v1/account/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-265b1daba21abaf2", "name": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/account/FoundryOrphanWorldsPa", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:62)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:62` calls `GET /api/v1/public/game-systems?type=ttrpg` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/game-systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7e1ed6333afd64d", "name": "Dangling fetch: POST /api/v1/account/foundry/worlds/${encodeURIComponent(repairingId)}/repair (src/views/components/orga", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/foundry/worlds/${encodeURIComponent(repairingId)}/repair (src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:91)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:91` calls `POST /api/v1/account/foundry/worlds/${encodeURIComponent(repairingId)}/repair` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/worlds/<p>/repair`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9a0f063b94f5b85", "name": "Dangling fetch: DELETE /api/v1/account/foundry/worlds/${encodeURIComponent(deletingId)}?installationId=${encodeURICompon", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/worlds/${encodeURIComponent(deletingId)}?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:116)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:116` calls `DELETE /api/v1/account/foundry/worlds/${encodeURIComponent(deletingId)}?installationId=${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/worlds/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26dd9b2d681900e8", "name": "Dangling fetch: POST /api/v1/account/keys (src/views/components/organisms/account/ApiKeysClient.tsx:83)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/keys (src/views/components/organisms/account/ApiKeysClient.tsx:83)"}, "fullDescription": {"text": "`src/views/components/organisms/account/ApiKeysClient.tsx:83` calls `POST /api/v1/account/keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4399eed26a3c899", "name": "Dangling fetch: DELETE /api/v1/account/keys/${apiKey.id} (src/views/components/organisms/account/ApiKeysClient.tsx:231)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/keys/${apiKey.id} (src/views/components/organisms/account/ApiKeysClient.tsx:231)"}, "fullDescription": {"text": "`src/views/components/organisms/account/ApiKeysClient.tsx:231` calls `DELETE /api/v1/account/keys/${apiKey.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/keys/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-812dd2e7091c55d3", "name": "Dangling fetch: POST /api/v1/account/keys/${apiKey.id} (src/views/components/organisms/account/ApiKeysClient.tsx:242)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/keys/${apiKey.id} (src/views/components/organisms/account/ApiKeysClient.tsx:242)"}, "fullDescription": {"text": "`src/views/components/organisms/account/ApiKeysClient.tsx:242` calls `POST /api/v1/account/keys/${apiKey.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/keys/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4000e532f1614b73", "name": "Dangling fetch: GET /api/v1/account/keys (src/views/components/organisms/account/ApiKeysClient.tsx:358)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/keys (src/views/components/organisms/account/ApiKeysClient.tsx:358)"}, "fullDescription": {"text": "`src/views/components/organisms/account/ApiKeysClient.tsx:358` calls `GET /api/v1/account/keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd5a1a1ef770d291", "name": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:46)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:46)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:46` calls `GET /api/v1/installations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06011b673dc173aa", "name": "Dangling fetch: GET /api/v1/account/foundry/worlds?installationId=${encodeURIComponent(installationId)} (src/views/compo", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/foundry/worlds?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:60)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:60` calls `GET /api/v1/account/foundry/worlds?installationId=${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/worlds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee99ddb5aa4a40bc", "name": "Dangling fetch: POST /api/v1/account/foundry/installations/${installationId}/reset-key (src/views/components/organisms/a", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/foundry/installations/${installationId}/reset-key (src/views/components/organisms/account/FoundryInstallationResetKeyModal.tsx:48)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryInstallationResetKeyModal.tsx:48` calls `POST /api/v1/account/foundry/installations/${installationId}/reset-key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/installations/<p>/reset-key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb0fb75721968908", "name": "Dangling fetch: GET /api/v1/account/integrations (src/views/components/organisms/account/IntegrationsClient.tsx:333)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/integrations (src/views/components/organisms/account/IntegrationsClient.tsx:333)"}, "fullDescription": {"text": "`src/views/components/organisms/account/IntegrationsClient.tsx:333` calls `GET /api/v1/account/integrations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ab6f43ad85c738f", "name": "Dangling fetch: GET /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/IntegrationsCl", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/IntegrationsClient.tsx:352)"}, "fullDescription": {"text": "`src/views/components/organisms/account/IntegrationsClient.tsx:352` calls `GET /api/v1/account/integrations/${platform}/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations/<p>/link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-695f04e0c2b1d968", "name": "Dangling fetch: POST /api/v1/account/integrations/${platform}/key (src/views/components/organisms/account/IntegrationsCl", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/integrations/${platform}/key (src/views/components/organisms/account/IntegrationsClient.tsx:372)"}, "fullDescription": {"text": "`src/views/components/organisms/account/IntegrationsClient.tsx:372` calls `POST /api/v1/account/integrations/${platform}/key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations/<p>/key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46e11586d27cc1cc", "name": "Dangling fetch: DELETE /api/v1/account/integrations/${platform}/key (src/views/components/organisms/account/Integrations", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/integrations/${platform}/key (src/views/components/organisms/account/IntegrationsClient.tsx:397)"}, "fullDescription": {"text": "`src/views/components/organisms/account/IntegrationsClient.tsx:397` calls `DELETE /api/v1/account/integrations/${platform}/key` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations/<p>/key`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07916809ece39925", "name": "Dangling fetch: POST /api/v1/account/integrations/${platform}/key/rotate (src/views/components/organisms/account/Integra", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/integrations/${platform}/key/rotate (src/views/components/organisms/account/IntegrationsClient.tsx:419)"}, "fullDescription": {"text": "`src/views/components/organisms/account/IntegrationsClient.tsx:419` calls `POST /api/v1/account/integrations/${platform}/key/rotate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations/<p>/key/rotate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16bbc6a948360b6a", "name": "Dangling fetch: PUT /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/IntegrationsCl", "shortDescription": {"text": "Dangling fetch: PUT /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/IntegrationsClient.tsx:444)"}, "fullDescription": {"text": "`src/views/components/organisms/account/IntegrationsClient.tsx:444` calls `PUT /api/v1/account/integrations/${platform}/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations/<p>/link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1bb89d363ba62cb", "name": "Dangling fetch: DELETE /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/Integration", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/IntegrationsClient.tsx:467)"}, "fullDescription": {"text": "`src/views/components/organisms/account/IntegrationsClient.tsx:467` calls `DELETE /api/v1/account/integrations/${platform}/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations/<p>/link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e9f7a4d7bec7499", "name": "Dangling fetch: GET /api/v1/account/recording-consent (src/views/components/organisms/account/RecordingConsentClient.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/recording-consent (src/views/components/organisms/account/RecordingConsentClient.tsx:57)"}, "fullDescription": {"text": "`src/views/components/organisms/account/RecordingConsentClient.tsx:57` calls `GET /api/v1/account/recording-consent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/recording-consent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-472c133cc23688ea", "name": "Dangling fetch: DELETE /api/v1/account/recording-consent/${encodeURIComponent(id)} (src/views/components/organisms/accou", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/recording-consent/${encodeURIComponent(id)} (src/views/components/organisms/account/RecordingConsentClient.tsx:77)"}, "fullDescription": {"text": "`src/views/components/organisms/account/RecordingConsentClient.tsx:77` calls `DELETE /api/v1/account/recording-consent/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/recording-consent/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ccffbd4d0353489", "name": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/FoundryIntegrationClient.tsx:89)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/FoundryIntegrationClient.tsx:89)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryIntegrationClient.tsx:89` calls `GET /api/v1/installations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6aeb93c9ec97091", "name": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/account/FoundryIntegrationClient.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/account/FoundryIntegrationClient.tsx:115)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryIntegrationClient.tsx:115` calls `GET /api/v1/public/rates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/rates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7daf0c562d96d87a", "name": "Dangling fetch: POST /api/v1/installations (src/views/components/organisms/account/FoundryIntegrationClient.tsx:144)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/installations (src/views/components/organisms/account/FoundryIntegrationClient.tsx:144)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryIntegrationClient.tsx:144` calls `POST /api/v1/installations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65eddd9773db2889", "name": "Dangling fetch: DELETE /api/v1/installations/${id} (src/views/components/organisms/account/FoundryIntegrationClient.tsx:", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/installations/${id} (src/views/components/organisms/account/FoundryIntegrationClient.tsx:192)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryIntegrationClient.tsx:192` calls `DELETE /api/v1/installations/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f9d9fddecedfc41", "name": "Dangling fetch: PATCH /api/v1/installations/${id} (src/views/components/organisms/account/FoundryIntegrationClient.tsx:2", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/installations/${id} (src/views/components/organisms/account/FoundryIntegrationClient.tsx:218)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryIntegrationClient.tsx:218` calls `PATCH /api/v1/installations/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d49faf880720e404", "name": "Dangling fetch: GET /api/v1/account/integrations (src/views/components/organisms/account/AddConnectionPanel.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/integrations (src/views/components/organisms/account/AddConnectionPanel.tsx:33)"}, "fullDescription": {"text": "`src/views/components/organisms/account/AddConnectionPanel.tsx:33` calls `GET /api/v1/account/integrations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31edb87ae7fbf517", "name": "Dangling fetch: GET /api/v1/account/integrations/${p}/link (src/views/components/organisms/account/AddConnectionPanel.ts", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/integrations/${p}/link (src/views/components/organisms/account/AddConnectionPanel.tsx:44)"}, "fullDescription": {"text": "`src/views/components/organisms/account/AddConnectionPanel.tsx:44` calls `GET /api/v1/account/integrations/${p}/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/integrations/<p>/link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-871ea23895a3fd05", "name": "Dangling fetch: GET /api/v1/player/discord/connections (src/views/components/organisms/account/DiscordIntegrationClient.", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/connections (src/views/components/organisms/account/DiscordIntegrationClient.tsx:100)"}, "fullDescription": {"text": "`src/views/components/organisms/account/DiscordIntegrationClient.tsx:100` calls `GET /api/v1/player/discord/connections` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/connections`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ecc6549436b8072", "name": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/account/DiscordIntegrationClient.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/account/DiscordIntegrationClient.tsx:101)"}, "fullDescription": {"text": "`src/views/components/organisms/account/DiscordIntegrationClient.tsx:101` calls `GET /api/v1/player/discord/guilds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c581556de8b2bfe", "name": "Dangling fetch: GET /api/v1/installations/${installationId}/modules (src/views/components/organisms/account/FoundryInsta", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations/${installationId}/modules (src/views/components/organisms/account/FoundryInstalledModulesPanel.tsx:39)"}, "fullDescription": {"text": "`src/views/components/organisms/account/FoundryInstalledModulesPanel.tsx:39` calls `GET /api/v1/installations/${installationId}/modules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations/<p>/modules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d606ade58bc4b0f", "name": "Dangling fetch: POST /api/campaigns (src/views/components/organisms/admin/CampaignsPageContent.tsx:116)", "shortDescription": {"text": "Dangling fetch: POST /api/campaigns (src/views/components/organisms/admin/CampaignsPageContent.tsx:116)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/CampaignsPageContent.tsx:116` calls `POST /api/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e07f5e21dd01902", "name": "Dangling fetch: DELETE /api/v1/player/campaigns/${id} (src/views/components/organisms/admin/CampaignsPageContent.tsx:145", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${id} (src/views/components/organisms/admin/CampaignsPageContent.tsx:145)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/CampaignsPageContent.tsx:145` calls `DELETE /api/v1/player/campaigns/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a98c2fde39da40a6", "name": "Dangling fetch: GET /apps/admin-dashboard/api/users/${id} (src/views/components/organisms/admin/UserManageMergeSection.t", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${id} (src/views/components/organisms/admin/UserManageMergeSection.tsx:39)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManageMergeSection.tsx:39` calls `GET /apps/admin-dashboard/api/users/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e14fbd3bd3376b4a", "name": "Dangling fetch: POST /apps/admin-dashboard/api/users/merge (src/views/components/organisms/admin/UserManageMergeSection.", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/users/merge (src/views/components/organisms/admin/UserManageMergeSection.tsx:65)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManageMergeSection.tsx:65` calls `POST /apps/admin-dashboard/api/users/merge` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/merge`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b70123e340878434", "name": "Dangling fetch: GET /api/admin/foundry/status (src/views/components/organisms/admin/FoundryPlatformManager.tsx:69)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/foundry/status (src/views/components/organisms/admin/FoundryPlatformManager.tsx:69)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/FoundryPlatformManager.tsx:69` calls `GET /api/admin/foundry/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/foundry/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec4d3137cac57a6f", "name": "Dangling fetch: POST /api/admin/foundry/initialize (src/views/components/organisms/admin/FoundryPlatformManager.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/foundry/initialize (src/views/components/organisms/admin/FoundryPlatformManager.tsx:110)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/FoundryPlatformManager.tsx:110` calls `POST /api/admin/foundry/initialize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/foundry/initialize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-772e86bef693a188", "name": "Dangling fetch: POST /api/admin/foundry/cancel (src/views/components/organisms/admin/FoundryPlatformManager.tsx:301)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/foundry/cancel (src/views/components/organisms/admin/FoundryPlatformManager.tsx:301)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/FoundryPlatformManager.tsx:301` calls `POST /api/admin/foundry/cancel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/foundry/cancel`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-784a841ef1a2bb56", "name": "Dangling fetch: GET /api/admin/foundry/instances (src/views/components/organisms/admin/FoundryPlatformInstances.tsx:17)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/foundry/instances (src/views/components/organisms/admin/FoundryPlatformInstances.tsx:17)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/FoundryPlatformInstances.tsx:17` calls `GET /api/admin/foundry/instances` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/foundry/instances`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6acb97a06bb11c5", "name": "Dangling fetch: GET /api/games/systems (src/views/components/organisms/admin/StoryTypeSelector.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/games/systems (src/views/components/organisms/admin/StoryTypeSelector.tsx:48)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/StoryTypeSelector.tsx:48` calls `GET /api/games/systems` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/games/systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-335f5e2ff855e80a", "name": "Dangling fetch: PATCH /api/admin/game-systems/${encodeURIComponent(slug)}/license (src/views/components/organisms/admin/", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/game-systems/${encodeURIComponent(slug)}/license (src/views/components/organisms/admin/GameSystemLicenseForm.tsx:69)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/GameSystemLicenseForm.tsx:69` calls `PATCH /api/admin/game-systems/${encodeURIComponent(slug)}/license` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/game-systems/<p>/license`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95f14f3f44c8711b", "name": "Dangling fetch: POST /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManageWal", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManageWalletSection.tsx:64)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManageWalletSection.tsx:64` calls `POST /apps/admin-dashboard/api/users/${userId}/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ad5650df2cef51d", "name": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManageWall", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManageWalletSection.tsx:76)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManageWalletSection.tsx:76` calls `GET /apps/admin-dashboard/api/users/${userId}/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-88160fe830e09d26", "name": "Dangling fetch: GET /apps/admin-dashboard/api/economy-transactions?${qs} (src/views/components/organisms/admin/Transacti", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/economy-transactions?${qs} (src/views/components/organisms/admin/TransactionsAuditPageContent.tsx:110)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/TransactionsAuditPageContent.tsx:110` calls `GET /apps/admin-dashboard/api/economy-transactions?${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/economy-transactions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa8ac5c1891d40dd", "name": "Dangling fetch: GET /apps/admin-dashboard/api/economy-transactions?${qs} (src/views/components/organisms/admin/Transacti", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/economy-transactions?${qs} (src/views/components/organisms/admin/TransactionsAuditPageContent.tsx:131)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/TransactionsAuditPageContent.tsx:131` calls `GET /apps/admin-dashboard/api/economy-transactions?${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/economy-transactions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aab3341b5b7dbdfe", "name": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${id} (src/views/components/organisms/admin/SystemsPageContent.t", "shortDescription": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${id} (src/views/components/organisms/admin/SystemsPageContent.tsx:54)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/SystemsPageContent.tsx:54` calls `PATCH /apps/admin-dashboard/api/systems/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26a82f1d692e7c4f", "name": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${id}/sync (src/views/components/organisms/admin/SystemsPageConte", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${id}/sync (src/views/components/organisms/admin/SystemsPageContent.tsx:82)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/SystemsPageContent.tsx:82` calls `POST /apps/admin-dashboard/api/systems/${id}/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>/sync`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-503ddcc39ad80673", "name": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${id} (src/views/components/organisms/admin/SystemsPageContent.", "shortDescription": {"text": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${id} (src/views/components/organisms/admin/SystemsPageContent.tsx:94)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/SystemsPageContent.tsx:94` calls `DELETE /apps/admin-dashboard/api/systems/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-30adf9992eb735da", "name": "Dangling fetch: GET /apps/admin-dashboard/api/users?${params} (src/views/components/organisms/admin/UsersManagementPageC", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users?${params} (src/views/components/organisms/admin/UsersManagementPageContent.tsx:81)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UsersManagementPageContent.tsx:81` calls `GET /apps/admin-dashboard/api/users?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d49c918ade814ba0", "name": "Dangling fetch: GET /apps/admin-dashboard/api/users?${params} (src/views/components/organisms/admin/CoinsPageContent.tsx", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users?${params} (src/views/components/organisms/admin/CoinsPageContent.tsx:82)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/CoinsPageContent.tsx:82` calls `GET /apps/admin-dashboard/api/users?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-703b834745ed8508", "name": "Dangling fetch: GET /apps/admin-dashboard/api/users/${user.id}/coins (src/views/components/organisms/admin/CoinsPageCont", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${user.id}/coins (src/views/components/organisms/admin/CoinsPageContent.tsx:104)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/CoinsPageContent.tsx:104` calls `GET /apps/admin-dashboard/api/users/${user.id}/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbcf186fdd4ed1bc", "name": "Dangling fetch: POST /apps/admin-dashboard/api/users/${selectedUser.id}/coins (src/views/components/organisms/admin/Coin", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/users/${selectedUser.id}/coins (src/views/components/organisms/admin/CoinsPageContent.tsx:129)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/CoinsPageContent.tsx:129` calls `POST /apps/admin-dashboard/api/users/${selectedUser.id}/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6f57237f8d5c8e83", "name": "Dangling fetch: GET /apps/admin-dashboard/api/users/${selectedUser.id}/coins (src/views/components/organisms/admin/Coins", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${selectedUser.id}/coins (src/views/components/organisms/admin/CoinsPageContent.tsx:152)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/CoinsPageContent.tsx:152` calls `GET /apps/admin-dashboard/api/users/${selectedUser.id}/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b9f129743be61b3", "name": "Dangling fetch: GET /apps/admin-dashboard/api/audit-log?${params} (src/views/components/organisms/admin/CoinsPageContent", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/audit-log?${params} (src/views/components/organisms/admin/CoinsPageContent.tsx:170)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/CoinsPageContent.tsx:170` calls `GET /apps/admin-dashboard/api/audit-log?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/audit-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a885daff7728366f", "name": "Dangling fetch: GET /api/v1/admin/recording-servers (src/views/components/organisms/admin/RecordingServersPageContent.ts", "shortDescription": {"text": "Dangling fetch: GET /api/v1/admin/recording-servers (src/views/components/organisms/admin/RecordingServersPageContent.tsx:47)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/RecordingServersPageContent.tsx:47` calls `GET /api/v1/admin/recording-servers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/admin/recording-servers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a48c9ecd3a2873f", "name": "Dangling fetch: POST /api/v1/admin/recording-servers/${encodeURIComponent(installationId)}/stop (src/views/components/or", "shortDescription": {"text": "Dangling fetch: POST /api/v1/admin/recording-servers/${encodeURIComponent(installationId)}/stop (src/views/components/organisms/admin/RecordingServersPageContent.tsx:70)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/RecordingServersPageContent.tsx:70` calls `POST /api/v1/admin/recording-servers/${encodeURIComponent(installationId)}/stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/admin/recording-servers/<p>/stop`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a87c3c500d4fb9a", "name": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId} (src/views/components/organisms/admin/UserManagePanel.tsx:", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId} (src/views/components/organisms/admin/UserManagePanel.tsx:91)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManagePanel.tsx:91` calls `GET /apps/admin-dashboard/api/users/${userId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5bc42665c5145470", "name": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManagePane", "shortDescription": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManagePanel.tsx:92)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManagePanel.tsx:92` calls `GET /apps/admin-dashboard/api/users/${userId}/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c7edd5b081f24a2", "name": "Dangling fetch: PATCH /apps/admin-dashboard/api/users/${userId}/role (src/views/components/organisms/admin/UserManagePan", "shortDescription": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/users/${userId}/role (src/views/components/organisms/admin/UserManagePanel.tsx:134)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManagePanel.tsx:134` calls `PATCH /apps/admin-dashboard/api/users/${userId}/role` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/role`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7430f1b7e89a1562", "name": "Dangling fetch: DELETE /apps/admin-dashboard/api/users/${userId}/accounts/${provider} (src/views/components/organisms/ad", "shortDescription": {"text": "Dangling fetch: DELETE /apps/admin-dashboard/api/users/${userId}/accounts/${provider} (src/views/components/organisms/admin/UserManagePanel.tsx:164)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManagePanel.tsx:164` calls `DELETE /apps/admin-dashboard/api/users/${userId}/accounts/${provider}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/accounts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76729b714a70c8a9", "name": "Dangling fetch: POST /apps/admin-dashboard/api/users/${userId}/moderation (src/views/components/organisms/admin/UserMana", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/users/${userId}/moderation (src/views/components/organisms/admin/UserManagePanel.tsx:180)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/UserManagePanel.tsx:180` calls `POST /apps/admin-dashboard/api/users/${userId}/moderation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/users/<p>/moderation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6864eb6929d6996e", "name": "Dangling fetch: POST /apps/admin-dashboard/api/systems/ingest (src/views/components/organisms/admin/systems/IngestSystem", "shortDescription": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/systems/ingest (src/views/components/organisms/admin/systems/IngestSystemModal.tsx:78)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/systems/IngestSystemModal.tsx:78` calls `POST /apps/admin-dashboard/api/systems/ingest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/ingest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b461d8177643628d", "name": "Dangling fetch: GET /api/admin/foundry/status (src/views/components/organisms/admin/systems/IngestSystemModal.tsx:104)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/foundry/status (src/views/components/organisms/admin/systems/IngestSystemModal.tsx:104)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/systems/IngestSystemModal.tsx:104` calls `GET /api/admin/foundry/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/foundry/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e33188a38f658c82", "name": "Dangling fetch: POST /api/admin/foundry/systems/install (src/views/components/organisms/admin/systems/IngestSystemModal.", "shortDescription": {"text": "Dangling fetch: POST /api/admin/foundry/systems/install (src/views/components/organisms/admin/systems/IngestSystemModal.tsx:117)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/systems/IngestSystemModal.tsx:117` calls `POST /api/admin/foundry/systems/install` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/foundry/systems/install`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44170b128a92247b", "name": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/views/components/organisms/admin/systems/Cache", "shortDescription": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/views/components/organisms/admin/systems/CacheFoundryFilesModal.tsx:118)"}, "fullDescription": {"text": "`src/views/components/organisms/admin/systems/CacheFoundryFilesModal.tsx:118` calls `PATCH /apps/admin-dashboard/api/systems/${system.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/apps/admin-dashboard/api/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b47f5f4d403135d1", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCha", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:144)"}, "fullDescription": {"text": "`src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:144` calls `POST /api/v1/player/campaigns/${campaignId}/characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20ae3051a4e8ecb4", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCha", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:224)"}, "fullDescription": {"text": "`src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:224` calls `POST /api/v1/player/campaigns/${campaignId}/characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd33fc1a6837703c", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCha", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:293)"}, "fullDescription": {"text": "`src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:293` calls `POST /api/v1/player/campaigns/${campaignId}/characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a9e59b703ececda", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/assets (src/views/components/organisms/characters/NewCharact", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/assets (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:376)"}, "fullDescription": {"text": "`src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:376` calls `POST /api/v1/player/campaigns/${campaignId}/assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e4f55486ac1055a", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/assets/${asset.id} (src/views/components/organisms/characte", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/assets/${asset.id} (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:394)"}, "fullDescription": {"text": "`src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:394` calls `PATCH /api/v1/player/campaigns/${campaignId}/assets/${asset.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/assets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b44958e0002e852", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCha", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:404)"}, "fullDescription": {"text": "`src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:404` calls `POST /api/v1/player/campaigns/${campaignId}/characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79fbbd983bfbc92b", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCha", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:504)"}, "fullDescription": {"text": "`src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:504` calls `POST /api/v1/player/campaigns/${campaignId}/characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6725c39d9d2205a1", "name": "Dangling fetch: GET /api/v1/account/foundry/status?installationId=${installId} (src/views/components/organisms/vtt/AppVt", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/foundry/status?installationId=${installId} (src/views/components/organisms/vtt/AppVttContext.tsx:144)"}, "fullDescription": {"text": "`src/views/components/organisms/vtt/AppVttContext.tsx:144` calls `GET /api/v1/account/foundry/status?installationId=${installId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65b009a0a075791b", "name": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/vtt/AppVttContext.tsx:174)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/vtt/AppVttContext.tsx:174)"}, "fullDescription": {"text": "`src/views/components/organisms/vtt/AppVttContext.tsx:174` calls `GET /api/v1/installations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-894703b67861f9e0", "name": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/vtt/AppVttContext.tsx:192)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/vtt/AppVttContext.tsx:192)"}, "fullDescription": {"text": "`src/views/components/organisms/vtt/AppVttContext.tsx:192` calls `GET /api/v1/installations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60969ebc92328f2e", "name": "Dangling fetch: POST /api/v1/account/foundry/launch (src/views/components/organisms/vtt/AppVttContext.tsx:260)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/foundry/launch (src/views/components/organisms/vtt/AppVttContext.tsx:260)"}, "fullDescription": {"text": "`src/views/components/organisms/vtt/AppVttContext.tsx:260` calls `POST /api/v1/account/foundry/launch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/launch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aec1088c77565ddb", "name": "Dangling fetch: DELETE /api/v1/account/foundry/launch?installationId=${installId} (src/views/components/organisms/vtt/Ap", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/launch?installationId=${installId} (src/views/components/organisms/vtt/AppVttContext.tsx:287)"}, "fullDescription": {"text": "`src/views/components/organisms/vtt/AppVttContext.tsx:287` calls `DELETE /api/v1/account/foundry/launch?installationId=${installId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/launch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0aaee97f2b73eb7", "name": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/compendium-sources/Compendium", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:160)"}, "fullDescription": {"text": "`src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:160` calls `GET /api/v1/public/game-systems?type=ttrpg` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/game-systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c013076ffaae3972", "name": "Dangling fetch: GET /api/v1/storyteller/game-systems (src/views/components/organisms/compendium-sources/CompendiumSource", "shortDescription": {"text": "Dangling fetch: GET /api/v1/storyteller/game-systems (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:161)"}, "fullDescription": {"text": "`src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:161` calls `GET /api/v1/storyteller/game-systems` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/storyteller/game-systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb701f8e3b724a62", "name": "Dangling fetch: PATCH /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-s", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:187)"}, "fullDescription": {"text": "`src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:187` calls `PATCH /api/v1/storyteller/compendium-sources/${source.slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/storyteller/compendium-sources/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df5ea7a472065b9e", "name": "Dangling fetch: PATCH /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-s", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:310)"}, "fullDescription": {"text": "`src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:310` calls `PATCH /api/v1/storyteller/compendium-sources/${source.slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/storyteller/compendium-sources/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27a43c60e7871c22", "name": "Dangling fetch: DELETE /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:428)"}, "fullDescription": {"text": "`src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:428` calls `DELETE /api/v1/storyteller/compendium-sources/${source.slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/storyteller/compendium-sources/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3980313fa72552e0", "name": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/channels/${textChannelId}/threads (src/views/components/org", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/channels/${textChannelId}/threads (src/views/components/organisms/chat/ChatSettingsPanel.tsx:114)"}, "fullDescription": {"text": "`src/views/components/organisms/chat/ChatSettingsPanel.tsx:114` calls `GET /api/v1/player/discord/guilds/${guildId}/channels/${textChannelId}/threads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds/<p>/channels/<p>/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b3d4b7c56e997de4", "name": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/chat/ChatSettingsPanel.tsx:128)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/chat/ChatSettingsPanel.tsx:128)"}, "fullDescription": {"text": "`src/views/components/organisms/chat/ChatSettingsPanel.tsx:128` calls `GET /api/v1/player/discord/guilds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a739836499ca4e8c", "name": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/text-channels (src/views/components/organisms/chat/ChatSett", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/text-channels (src/views/components/organisms/chat/ChatSettingsPanel.tsx:152)"}, "fullDescription": {"text": "`src/views/components/organisms/chat/ChatSettingsPanel.tsx:152` calls `GET /api/v1/player/discord/guilds/${guildId}/text-channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds/<p>/text-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9827d72f56319371", "name": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/channels (src/views/components/organisms/chat/ChatSettingsP", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/channels (src/views/components/organisms/chat/ChatSettingsPanel.tsx:153)"}, "fullDescription": {"text": "`src/views/components/organisms/chat/ChatSettingsPanel.tsx:153` calls `GET /api/v1/player/discord/guilds/${guildId}/channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds/<p>/channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32ac0942174162f8", "name": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/roles (src/views/components/organisms/chat/ChatSettingsPane", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/roles (src/views/components/organisms/chat/ChatSettingsPanel.tsx:154)"}, "fullDescription": {"text": "`src/views/components/organisms/chat/ChatSettingsPanel.tsx:154` calls `GET /api/v1/player/discord/guilds/${guildId}/roles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds/<p>/roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eeef7bc5d10b2ee5", "name": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/text-channels (src/views/components/organisms/chat/ChatSet", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/text-channels (src/views/components/organisms/chat/ChatSettingsPanel.tsx:174)"}, "fullDescription": {"text": "`src/views/components/organisms/chat/ChatSettingsPanel.tsx:174` calls `POST /api/v1/player/discord/guilds/${guildId}/text-channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds/<p>/text-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ae3308df2d16283", "name": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/channels (src/views/components/organisms/chat/ChatSettings", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/channels (src/views/components/organisms/chat/ChatSettingsPanel.tsx:201)"}, "fullDescription": {"text": "`src/views/components/organisms/chat/ChatSettingsPanel.tsx:201` calls `POST /api/v1/player/discord/guilds/${guildId}/channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds/<p>/channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0b57ab1c8a087e2", "name": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/channels/${textChannelId}/threads (src/views/components/or", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/channels/${textChannelId}/threads (src/views/components/organisms/chat/ChatSettingsPanel.tsx:227)"}, "fullDescription": {"text": "`src/views/components/organisms/chat/ChatSettingsPanel.tsx:227` calls `POST /api/v1/player/discord/guilds/${guildId}/channels/${textChannelId}/threads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds/<p>/channels/<p>/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1d5c06b21d7b34d", "name": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/foundry/useFoundryInstallations.ts:29)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/foundry/useFoundryInstallations.ts:29)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/useFoundryInstallations.ts:29` calls `GET /api/v1/installations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ffd150b0eef43ca", "name": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:227)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:227)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/FoundryServerLauncher.tsx:227` calls `GET /api/v1/public/rates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/rates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-edccd3ffb15ac0f9", "name": "Dangling fetch: GET /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:248)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/FoundryServerLauncher.tsx:248` calls `GET /api/v1/installations/${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-99dd5e4f7d389a0d", "name": "Dangling fetch: GET /api/v1/installations/${encodeURIComponent(installationId)}/worlds (src/views/components/organisms/f", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations/${encodeURIComponent(installationId)}/worlds (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:267)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/FoundryServerLauncher.tsx:267` calls `GET /api/v1/installations/${encodeURIComponent(installationId)}/worlds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations/<p>/worlds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38b87da88d0430fa", "name": "Dangling fetch: POST /api/v1/account/foundry/launch (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:29", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/foundry/launch (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:295)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/FoundryServerLauncher.tsx:295` calls `POST /api/v1/account/foundry/launch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/launch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f77f85b30cbf8cf8", "name": "Dangling fetch: DELETE /api/v1/account/foundry/launch?installationId=${encodeURIComponent(installationId)} (src/views/co", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/launch?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:423)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/FoundryServerLauncher.tsx:423` calls `DELETE /api/v1/account/foundry/launch?installationId=${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/launch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf85fae5e2f3a84b", "name": "Dangling fetch: PATCH /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/foundr", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/_settings/FoundryServerGeneralSettings.tsx:70)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/_settings/FoundryServerGeneralSettings.tsx:70` calls `PATCH /api/v1/installations/${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dccf03f5788fafa0", "name": "Dangling fetch: GET /api/v1/account/foundry/modules?installationId=${encodeURIComponent(installationId)} (src/views/comp", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/foundry/modules?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:47)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:47` calls `GET /api/v1/account/foundry/modules?installationId=${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/modules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9733a1e41d2bc4f", "name": "Dangling fetch: DELETE /api/v1/account/foundry/installations/${encodeURIComponent(installationId)}/modules/${encodeURICo", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/installations/${encodeURIComponent(installationId)}/modules/${encodeURIComponent(mod.id)} (src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:74)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:74` calls `DELETE /api/v1/account/foundry/installations/${encodeURIComponent(installationId)}/modules/${encodeURIComponent(mod.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/installations/<p>/modules/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4191f5e30fec9622", "name": "Dangling fetch: POST /api/v1/installations/${encodeURIComponent(installationId)}/repair-plugin (src/views/components/org", "shortDescription": {"text": "Dangling fetch: POST /api/v1/installations/${encodeURIComponent(installationId)}/repair-plugin (src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:96)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:96` calls `POST /api/v1/installations/${encodeURIComponent(installationId)}/repair-plugin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations/<p>/repair-plugin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7894b02e0543e0a", "name": "Dangling fetch: DELETE /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/found", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/_settings/FoundryServerDangerZone.tsx:84)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/_settings/FoundryServerDangerZone.tsx:84` calls `DELETE /api/v1/installations/${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1cea661e43706f1", "name": "Dangling fetch: GET /api/v1/account/foundry/systems?installationId=${encodeURIComponent(installationId)} (src/views/comp", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/foundry/systems?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/_settings/FoundryServerSystemsPanel.tsx:43)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/_settings/FoundryServerSystemsPanel.tsx:43` calls `GET /api/v1/account/foundry/systems?installationId=${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8eed1ce4eec926d3", "name": "Dangling fetch: DELETE /api/v1/account/foundry/installations/${encodeURIComponent(installationId)}/systems/${encodeURICo", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/installations/${encodeURIComponent(installationId)}/systems/${encodeURIComponent(system.id)} (src/views/components/organisms/foundry/_settings/FoundryServerSystemsPanel.tsx:70)"}, "fullDescription": {"text": "`src/views/components/organisms/foundry/_settings/FoundryServerSystemsPanel.tsx:70` calls `DELETE /api/v1/account/foundry/installations/${encodeURIComponent(installationId)}/systems/${encodeURIComponent(system.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/installations/<p>/systems/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca76de88f1d3305e", "name": "Dangling fetch: GET /api/config (src/views/components/organisms/wallet/BalancesDropdown.tsx:157)", "shortDescription": {"text": "Dangling fetch: GET /api/config (src/views/components/organisms/wallet/BalancesDropdown.tsx:157)"}, "fullDescription": {"text": "`src/views/components/organisms/wallet/BalancesDropdown.tsx:157` calls `GET /api/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5faaddd7a326d3d1", "name": "Dangling fetch: GET /api/v1/account/wallet?period=${period}&limit=50 (src/views/components/organisms/wallet/Transactions", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet?period=${period}&limit=50 (src/views/components/organisms/wallet/TransactionsPanel.tsx:75)"}, "fullDescription": {"text": "`src/views/components/organisms/wallet/TransactionsPanel.tsx:75` calls `GET /api/v1/account/wallet?period=${period}&limit=50` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a59833190e70f66", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/wallet/PlanTiersPanel.tsx:31)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/wallet/PlanTiersPanel.tsx:31)"}, "fullDescription": {"text": "`src/views/components/organisms/wallet/PlanTiersPanel.tsx:31` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c9dbd6c0c2e95b9", "name": "Dangling fetch: GET /api/v1/account/subscription (src/views/components/organisms/wallet/PlanTiersPanel.tsx:32)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/subscription (src/views/components/organisms/wallet/PlanTiersPanel.tsx:32)"}, "fullDescription": {"text": "`src/views/components/organisms/wallet/PlanTiersPanel.tsx:32` calls `GET /api/v1/account/subscription` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/subscription`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3e29083f2916a43", "name": "Dangling fetch: GET /api/v1/account/payments/connect/status (src/views/components/organisms/wallet/PlanTiersPanel.tsx:33", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/payments/connect/status (src/views/components/organisms/wallet/PlanTiersPanel.tsx:33)"}, "fullDescription": {"text": "`src/views/components/organisms/wallet/PlanTiersPanel.tsx:33` calls `GET /api/v1/account/payments/connect/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/connect/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d392855cdae9081f", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/tip-jar/TipJarPanel.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/tip-jar/TipJarPanel.tsx:64)"}, "fullDescription": {"text": "`src/views/components/organisms/tip-jar/TipJarPanel.tsx:64` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2db7fa8100035b98", "name": "Dangling fetch: GET /api/config (src/views/components/organisms/tip-jar/TipJarPanel.tsx:75)", "shortDescription": {"text": "Dangling fetch: GET /api/config (src/views/components/organisms/tip-jar/TipJarPanel.tsx:75)"}, "fullDescription": {"text": "`src/views/components/organisms/tip-jar/TipJarPanel.tsx:75` calls `GET /api/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ebbd72e753ac4a8", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/tip-jar/TipJarPanel.tsx:109)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/tip-jar/TipJarPanel.tsx:109)"}, "fullDescription": {"text": "`src/views/components/organisms/tip-jar/TipJarPanel.tsx:109` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ed4d40362f95c50", "name": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/tip-jar/TipJarPanel.tsx:128)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/tip-jar/TipJarPanel.tsx:128)"}, "fullDescription": {"text": "`src/views/components/organisms/tip-jar/TipJarPanel.tsx:128` calls `POST /api/v1/account/payments/tip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/tip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c011defe6c67331", "name": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/apps/AppCatalogTile.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/apps/AppCatalogTile.tsx:167)"}, "fullDescription": {"text": "`src/views/components/organisms/apps/AppCatalogTile.tsx:167` calls `GET /api/v1/public/rates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/rates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6254f4943e46c4c7", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/shell/SystemTray.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/shell/SystemTray.tsx:59)"}, "fullDescription": {"text": "`src/views/components/organisms/shell/SystemTray.tsx:59` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-460b3ebc40ecdedf", "name": "Dangling fetch: GET /api/v1/account/subscription (src/views/components/organisms/persona/WalletPill.tsx:245)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/subscription (src/views/components/organisms/persona/WalletPill.tsx:245)"}, "fullDescription": {"text": "`src/views/components/organisms/persona/WalletPill.tsx:245` calls `GET /api/v1/account/subscription` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/subscription`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-987870598d52a63a", "name": "Dangling fetch: GET /api/config (src/views/components/organisms/persona/WalletPill.tsx:408)", "shortDescription": {"text": "Dangling fetch: GET /api/config (src/views/components/organisms/persona/WalletPill.tsx:408)"}, "fullDescription": {"text": "`src/views/components/organisms/persona/WalletPill.tsx:408` calls `GET /api/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eec9cea66775cbe6", "name": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/organisms/persona/WalletPill.tsx:494)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/organisms/persona/WalletPill.tsx:494)"}, "fullDescription": {"text": "`src/views/components/organisms/persona/WalletPill.tsx:494` calls `POST /api/v1/account/payments/coins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/coins`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09a1feced88b918d", "name": "Dangling fetch: GET /api/v1/files?${params.toString()} (src/views/components/organisms/file-explorer/UploadsTab.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/files?${params.toString()} (src/views/components/organisms/file-explorer/UploadsTab.tsx:73)"}, "fullDescription": {"text": "`src/views/components/organisms/file-explorer/UploadsTab.tsx:73` calls `GET /api/v1/files?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/files`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e5c584b5531ff7d0", "name": "Dangling fetch: DELETE /api/v1/files/${encodeURIComponent(row.id)} (src/views/components/organisms/file-explorer/Uploads", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/files/${encodeURIComponent(row.id)} (src/views/components/organisms/file-explorer/UploadsTab.tsx:110)"}, "fullDescription": {"text": "`src/views/components/organisms/file-explorer/UploadsTab.tsx:110` calls `DELETE /api/v1/files/${encodeURIComponent(row.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/files/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0141d0612f9aa0e6", "name": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:60)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:60)"}, "fullDescription": {"text": "`src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:60` calls `GET /api/v1/installations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/installations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27a10b1f8f14daae", "name": "Dangling fetch: GET /api/v1/account/foundry/worlds?installationId=${encodeURIComponent(inst.id)} (src/views/components/o", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/foundry/worlds?installationId=${encodeURIComponent(inst.id)} (src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:69)"}, "fullDescription": {"text": "`src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:69` calls `GET /api/v1/account/foundry/worlds?installationId=${encodeURIComponent(inst.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/worlds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1246ea0d3031e95d", "name": "Dangling fetch: PATCH /api/v1/storyteller/asset-packs/${slug} (src/views/components/organisms/asset-packs/AssetPackUploa", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/storyteller/asset-packs/${slug} (src/views/components/organisms/asset-packs/AssetPackUpload.tsx:126)"}, "fullDescription": {"text": "`src/views/components/organisms/asset-packs/AssetPackUpload.tsx:126` calls `PATCH /api/v1/storyteller/asset-packs/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/storyteller/asset-packs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab1e5518c43a948f", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/campaigns/Charact", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/campaigns/CharactersPage.tsx:238)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CharactersPage.tsx:238` calls `POST /api/v1/player/campaigns/${campaignId}/characters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8030e55b173b9ab", "name": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/characters/${characterId} (src/views/components/organisms/", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/characters/${characterId} (src/views/components/organisms/campaigns/CharactersPage.tsx:334)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CharactersPage.tsx:334` calls `DELETE /api/v1/player/campaigns/${campaignId}/characters/${characterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c0728310715d04ea", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/talespire (src/views/components/organisms/campaigns/Campa", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/talespire (src/views/components/organisms/campaigns/CampaignVttConnections.tsx:29)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignVttConnections.tsx:29` calls `GET /api/v1/player/campaigns/${campaignId}/vtt/talespire` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/vtt/talespire`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57e92befaed359ad", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignVttConnec", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignVttConnections.tsx:264)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignVttConnections.tsx:264` calls `PATCH /api/v1/player/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f36528f51745f497", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignHo", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignHome.tsx:93)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignHome.tsx:93` calls `POST /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bdc21205f07e38f", "name": "Dangling fetch: GET /api/v1/account/heroforge/meta?id=${miniId} (src/views/components/organisms/campaigns/CharacterSheet", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/heroforge/meta?id=${miniId} (src/views/components/organisms/campaigns/CharacterSheetClient.tsx:148)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CharacterSheetClient.tsx:148` calls `GET /api/v1/account/heroforge/meta?id=${miniId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/heroforge/meta`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af7b4018931063ef", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${characterId} (src/views/components/organisms/c", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${characterId} (src/views/components/organisms/campaigns/ExternalSheetView.tsx:245)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/ExternalSheetView.tsx:245` calls `PATCH /api/v1/player/campaigns/${campaignId}/characters/${characterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9983440812bee3b1", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-upload (src/views/components", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-upload (src/views/components/organisms/campaigns/ExternalSheetView.tsx:269)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/ExternalSheetView.tsx:269` calls `POST /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>/sheet-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4853cfd7b875edac", "name": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-upload (src/views/componen", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-upload (src/views/components/organisms/campaigns/ExternalSheetView.tsx:292)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/ExternalSheetView.tsx:292` calls `DELETE /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>/sheet-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5160e81545a81f17", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-import-foundry (src/views/co", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-import-foundry (src/views/components/organisms/campaigns/ExternalSheetView.tsx:321)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/ExternalSheetView.tsx:321` calls `POST /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-import-foundry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>/sheet-import-foundry`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a9f174cc82e10b9", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignSid", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignSidebar.tsx:125)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSidebar.tsx:125` calls `GET /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20a4c14381c70453", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/all-channels?guildId=${discordInfo.guildId} (src/view", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/all-channels?guildId=${discordInfo.guildId} (src/views/components/organisms/campaigns/CampaignSidebar.tsx:126)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSidebar.tsx:126` calls `GET /api/v1/player/campaigns/${campaignId}/discord/all-channels?guildId=${discordInfo.guildId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/all-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ca67e76f0b2fa4e", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${parentId}/threads (src/views/components/or", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${parentId}/threads (src/views/components/organisms/campaigns/CampaignSidebar.tsx:164)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSidebar.tsx:164` calls `GET /api/v1/player/campaigns/${campaignId}/discord/channels/${parentId}/threads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/channels/<p>/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0cde017321a3322a", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${chId}/recent (src/views/components/organis", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${chId}/recent (src/views/components/organisms/campaigns/CampaignSidebar.tsx:213)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSidebar.tsx:213` calls `GET /api/v1/player/campaigns/${campaignId}/discord/channels/${chId}/recent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/channels/<p>/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7b6c979ab38adcad", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${discordInfo.voiceChannelId}/recent (src/vi", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${discordInfo.voiceChannelId}/recent (src/views/components/organisms/campaigns/CampaignSidebar.tsx:227)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSidebar.tsx:227` calls `GET /api/v1/player/campaigns/${campaignId}/discord/channels/${discordInfo.voiceChannelId}/recent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/channels/<p>/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aec1765eea07ab8f", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${discordInfo.textChannelId}/recent (src/vie", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${discordInfo.textChannelId}/recent (src/views/components/organisms/campaigns/CampaignSidebar.tsx:240)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSidebar.tsx:240` calls `GET /api/v1/player/campaigns/${campaignId}/discord/channels/${discordInfo.textChannelId}/recent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/channels/<p>/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-292ff6efa0501b93", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/forum/recent (src/views/components/organisms/campaign", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/forum/recent (src/views/components/organisms/campaigns/CampaignSidebar.tsx:253)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSidebar.tsx:253` calls `GET /api/v1/player/campaigns/${campaignId}/discord/forum/recent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/forum/recent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f216f7f2ec84a965", "name": "Dangling fetch: POST /api/foundry/auth/validate (src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:57)", "shortDescription": {"text": "Dangling fetch: POST /api/foundry/auth/validate (src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:57)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:57` calls `POST /api/foundry/auth/validate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/foundry/auth/validate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d815586d15c11fec", "name": "Dangling fetch: GET /api/v1/account/foundry/status?installationId=${encodeURIComponent(installationId)} (src/views/compo", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/foundry/status?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:178)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:178` calls `GET /api/v1/account/foundry/status?installationId=${encodeURIComponent(installationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/foundry/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7e75b096c8860427", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/TipGmCard.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/TipGmCard.tsx:44)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/TipGmCard.tsx:44` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9dc7cff23ee8a731", "name": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/TipGmCard.tsx:61)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/TipGmCard.tsx:61)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/TipGmCard.tsx:61` calls `POST /api/v1/account/payments/tip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/tip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2072db93b2f72bf", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/PlayerManagement.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/PlayerManagement.tsx:70)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PlayerManagement.tsx:70` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ceacf2f6717c5ddc", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/PlayerMana", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/PlayerManagement.tsx:96)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PlayerManagement.tsx:96` calls `POST /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ecfd86bd1702e143", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/players/${playerId} (src/views/components/organisms/campaig", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/players/${playerId} (src/views/components/organisms/campaigns/PlayerManagement.tsx:135)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PlayerManagement.tsx:135` calls `PATCH /api/v1/player/campaigns/${campaignId}/players/${playerId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/players/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67f8f599bf09e1ee", "name": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/players/${playerId} (src/views/components/organisms/campai", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/players/${playerId} (src/views/components/organisms/campaigns/PlayerManagement.tsx:156)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PlayerManagement.tsx:156` calls `DELETE /api/v1/player/campaigns/${campaignId}/players/${playerId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/players/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab4e61b364d4710a", "name": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/PlayerManagement.tsx:166)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/PlayerManagement.tsx:166)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PlayerManagement.tsx:166` calls `POST /api/v1/account/payments/tip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/tip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba6f30e20316b1a7", "name": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/campaigns/CampaignGeneralSett", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/campaigns/CampaignGeneralSettings.tsx:45)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignGeneralSettings.tsx:45` calls `GET /api/v1/public/game-systems?type=ttrpg` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/game-systems`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-376c1dce66cabd87", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignGeneralSe", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignGeneralSettings.tsx:66)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignGeneralSettings.tsx:66` calls `PATCH /api/v1/player/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-732358de2ec0475d", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${textChannelId}/threads (src/views/componen", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${textChannelId}/threads (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:205)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:205` calls `GET /api/v1/player/campaigns/${campaignId}/discord/channels/${textChannelId}/threads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/channels/<p>/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c78a4434d0006272", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/forum-tags?forumChannelId=${forumChannelId} (src/view", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/forum-tags?forumChannelId=${forumChannelId} (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:218)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:218` calls `GET /api/v1/player/campaigns/${campaignId}/discord/forum-tags?forumChannelId=${forumChannelId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/forum-tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01ef15d9eff7e891", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/voice-channels (src/views/components/organisms/campa", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/voice-channels (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:230)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:230` calls `POST /api/v1/player/campaigns/${campaignId}/discord/voice-channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/voice-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7dd9c4a41b6eab5", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/channels/${textChannelId}/threads (src/views/compone", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/channels/${textChannelId}/threads (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:261)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:261` calls `POST /api/v1/player/campaigns/${campaignId}/discord/channels/${textChannelId}/threads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/channels/<p>/threads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ecab2379070e2fd4", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/text-channels (src/views/components/organisms/campai", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/text-channels (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:298)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:298` calls `POST /api/v1/player/campaigns/${campaignId}/discord/text-channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/text-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79445a914cff2fdd", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/forum-channels (src/views/components/organisms/campa", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/forum-channels (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:356)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:356` calls `POST /api/v1/player/campaigns/${campaignId}/discord/forum-channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/forum-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbd69c2c7937783e", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/forum-tags (src/views/components/organisms/campaigns", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/forum-tags (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:399)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:399` calls `POST /api/v1/player/campaigns/${campaignId}/discord/forum-tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/forum-tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c920b16f66ed33bf", "name": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/campaigns/PartyChatSettings.tsx:133)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/campaigns/PartyChatSettings.tsx:133)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyChatSettings.tsx:133` calls `GET /api/v1/player/discord/guilds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2ed08934600d1a5", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaign.id}/view (src/views/components/organisms/campaigns/PartyChatSett", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaign.id}/view (src/views/components/organisms/campaigns/PartyChatSettings.tsx:185)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyChatSettings.tsx:185` calls `GET /api/v1/player/campaigns/${campaign.id}/view` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/view`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a2e88e934b43156", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaign.id}/parties/${party.id} (src/views/components/organisms/campai", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaign.id}/parties/${party.id} (src/views/components/organisms/campaigns/PartyChatSettings.tsx:213)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyChatSettings.tsx:213` calls `PATCH /api/v1/player/campaigns/${campaign.id}/parties/${party.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc854e719576c8a9", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaign.id} (src/views/components/organisms/campaigns/PartyChatSetting", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaign.id} (src/views/components/organisms/campaigns/PartyChatSettings.tsx:237)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyChatSettings.tsx:237` calls `PATCH /api/v1/player/campaigns/${campaign.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-464221e04db53a39", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organisms/", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:122)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:122` calls `POST /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/members`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2537b0de3c046b08", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organisms", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:135)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:135` calls `PATCH /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/members`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a745645564ac96ae", "name": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organism", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:146)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:146` calls `DELETE /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/members`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fda81b701b56ca13", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/invites (src/views/components/organisms/campaigns/PartyPlaye", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/invites (src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:273)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:273` calls `POST /api/v1/player/campaigns/${campaignId}/invites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/invites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1fabbe2b1147a27", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/SessionPlayView.tsx:397)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/SessionPlayView.tsx:397)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/SessionPlayView.tsx:397` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d812ec8cc8185d9", "name": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/SessionPlayView.tsx:455)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/SessionPlayView.tsx:455)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/SessionPlayView.tsx:455` calls `GET /api/v1/account/wallet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/wallet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a216bf60fca95eb8", "name": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/SessionPlayView.tsx:466)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/SessionPlayView.tsx:466)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/SessionPlayView.tsx:466` calls `POST /api/v1/account/payments/tip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/payments/tip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-adf54673dbad2e7d", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignKey", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:56)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:56` calls `GET /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e3ea45d3f498d55", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties/${id}/key-terms (src/views/components/organisms/campa", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties/${id}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:68)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:68` calls `GET /api/v1/player/campaigns/${campaignId}/parties/${id}/key-terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/key-terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96263821b230e015", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/key-terms/preview (src/views/components/organisms/campaigns/C", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/key-terms/preview (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:87)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:87` calls `GET /api/v1/player/campaigns/${campaignId}/key-terms/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/key-terms/preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9af54a84f3c5171f", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/key-terms (src/views/components/organisms/campaigns/Campaig", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:111)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:111` calls `PATCH /api/v1/player/campaigns/${campaignId}/key-terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/key-terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-222998fb87f51272", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organism", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:124)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:124` calls `PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/key-terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e0529cd63a0fcdf", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/key-terms/preview (src/views/components/organisms/campaigns/C", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/key-terms/preview (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:253)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:253` calls `GET /api/v1/player/campaigns/${campaignId}/key-terms/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/key-terms/preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83502554f53ae3b6", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/key-terms (src/views/components/organisms/campaigns/Campaig", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:267)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:267` calls `PATCH /api/v1/player/campaigns/${campaignId}/key-terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/key-terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8ba98e176467869", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organisms/", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:331)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:331` calls `GET /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/key-terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a9a355c54ce769b", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organism", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:345)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:345` calls `PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/key-terms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a2b05702752d5cc", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/SheetProvidersSec", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/SheetProvidersSection.tsx:128)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/SheetProvidersSection.tsx:128` calls `PATCH /api/v1/player/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c133f0c1f2ed55d4", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignMan", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:98)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:98` calls `GET /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c82e021dffb74f05", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignMa", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:121)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:121` calls `POST /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b103a04f1c4d0947", "name": "Dangling fetch: GET /api/v1/account/heroforge/meta?id=${currentId} (src/views/components/organisms/campaigns/CharacterSh", "shortDescription": {"text": "Dangling fetch: GET /api/v1/account/heroforge/meta?id=${currentId} (src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:81)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:81` calls `GET /api/v1/account/heroforge/meta?id=${currentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/heroforge/meta`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14c7770d97a0e6b8", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:92)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:92` calls `PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b3642a262798ec6", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:118)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:118` calls `PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad834e567b29dc3d", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignSlug}/journal/${entry.id}/tip (src/views/components/organisms/ca", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignSlug}/journal/${entry.id}/tip (src/views/components/organisms/campaigns/JournalList.tsx:76)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/JournalList.tsx:76` calls `POST /api/v1/player/campaigns/${campaignSlug}/journal/${entry.id}/tip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/journal/<p>/tip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6a33c643e30a4eb", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/PartiesPag", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/PartiesPage.tsx:264)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartiesPage.tsx:264` calls `POST /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1cae89f52f175a41", "name": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaig", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaigns/PartiesPage.tsx:310)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartiesPage.tsx:310` calls `DELETE /api/v1/player/campaigns/${campaignId}/parties/${partyId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e3eb67a70aa2441", "name": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:170", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:170)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChatSettings.tsx:170` calls `GET /api/v1/player/discord/guilds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/discord/guilds`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f1ae8c5c0666cea", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignCha", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:186)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChatSettings.tsx:186` calls `GET /api/v1/player/campaigns/${campaignId}/parties` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69afefa526a5925d", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/all-channels?guildId=${guildId} (src/views/components", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/all-channels?guildId=${guildId} (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:206)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChatSettings.tsx:206` calls `GET /api/v1/player/campaigns/${campaignId}/discord/all-channels?guildId=${guildId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/all-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da7f88a0f85eb318", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/roles?guildId=${guildId} (src/views/components/organi", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/roles?guildId=${guildId} (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:209)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChatSettings.tsx:209` calls `GET /api/v1/player/campaigns/${campaignId}/discord/roles?guildId=${guildId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0f87208bc358a96", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignChatSetti", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:261)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignChatSettings.tsx:261` calls `PATCH /api/v1/player/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b5118a8e2b1bb18", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/Party", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/PartySheetsPanel.tsx:63)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartySheetsPanel.tsx:63` calls `GET /api/v1/player/campaigns/${campaignId}/vtt/page-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/vtt/page-data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0e3241ae84a5e12", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/Party", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/PartySheetsPanel.tsx:200)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartySheetsPanel.tsx:200` calls `GET /api/v1/player/campaigns/${campaignId}/vtt/page-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/vtt/page-data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7b5f5c4713e7847e", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/PartySheetsPanel.", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/PartySheetsPanel.tsx:220)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartySheetsPanel.tsx:220` calls `PATCH /api/v1/player/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd1972ce462d79d9", "name": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/invites/${id} (src/views/components/organisms/campaigns/Pa", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/invites/${id} (src/views/components/organisms/campaigns/PartyPlayersTabClient.tsx:30)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyPlayersTabClient.tsx:30` calls `DELETE /api/v1/player/campaigns/${campaignId}/invites/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/invites/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be82ac67559c7761", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/Party", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/PartyToolsPanel.tsx:36)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyToolsPanel.tsx:36` calls `GET /api/v1/player/campaigns/${campaignId}/vtt/page-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/vtt/page-data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78d172477dd205a4", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/Party", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/PartyVttPanel.tsx:50)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyVttPanel.tsx:50` calls `GET /api/v1/player/campaigns/${campaignId}/vtt/page-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/vtt/page-data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7600c2c388ebaaf", "name": "Dangling fetch: POST /api/v1/player/campaigns/${encodeURIComponent(campaignId)}/parties/${encodeURIComponent(partyId)}/t", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${encodeURIComponent(campaignId)}/parties/${encodeURIComponent(partyId)}/tip (src/views/components/organisms/campaigns/TipPartyGmCard.tsx:28)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/TipPartyGmCard.tsx:28` calls `POST /api/v1/player/campaigns/${encodeURIComponent(campaignId)}/parties/${encodeURIComponent(partyId)}/tip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/tip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-269c4bd1a41362ec", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignSlug}/parties/${partySlug}/entities (src/views/components/organi", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignSlug}/parties/${partySlug}/entities (src/views/components/organisms/campaigns/PartyEntityCreateForm.tsx:120)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyEntityCreateForm.tsx:120` calls `POST /api/v1/player/campaigns/${campaignSlug}/parties/${partySlug}/entities` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/entities`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6acbf0ad9fee24e9", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/campaigns/CharacterSheetProvider.tsx:105)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CharacterSheetProvider.tsx:105` calls `PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1f6423a09644d6b", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/campaigns/CharacterSheetInfoTab.tsx:43)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CharacterSheetInfoTab.tsx:43` calls `PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba11214ccb0e23d3", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/sessions/active/rolls (src/views/components/organisms/campaig", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/sessions/active/rolls (src/views/components/organisms/campaigns/RollLogPanel.tsx:106)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/RollLogPanel.tsx:106` calls `GET /api/v1/player/campaigns/${campaignId}/sessions/active/rolls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/sessions/active/rolls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1766108c3857747c", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/journal/${entry.id}/tip (src/views/components/organisms/camp", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/journal/${entry.id}/tip (src/views/components/organisms/campaigns/JournalEntryView.tsx:37)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/JournalEntryView.tsx:37` calls `POST /api/v1/player/campaigns/${campaignId}/journal/${entry.id}/tip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/journal/<p>/tip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a74f52d16100dd6", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${party.id} (src/views/components/organisms/campaig", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${party.id} (src/views/components/organisms/campaigns/PartyGeneralSettings.tsx:60)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyGeneralSettings.tsx:60` calls `PATCH /api/v1/player/campaigns/${campaignId}/parties/${party.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-647f6b6326ce2cfc", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/roles (src/views/components/organisms/campaigns/Part", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/roles (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:168)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyDiscordSection.tsx:168` calls `POST /api/v1/player/campaigns/${campaignId}/discord/roles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5e1546d1a78b044", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaign", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:183)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyDiscordSection.tsx:183` calls `PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-842994ee68be5c3a", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/voice-channels (src/views/components/organisms/campa", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/voice-channels (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:206)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyDiscordSection.tsx:206` calls `POST /api/v1/player/campaigns/${campaignId}/discord/voice-channels` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/discord/voice-channels`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff5eac8275e48503", "name": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties/${partyId}/sync-discord-role (src/views/components/o", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties/${partyId}/sync-discord-role (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:237)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyDiscordSection.tsx:237` calls `POST /api/v1/player/campaigns/${campaignId}/parties/${partyId}/sync-discord-role` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>/sync-discord-role`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0251c8e8beb8939", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaign", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:258)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/PartyDiscordSection.tsx:258` calls `PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/parties/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71d4751c77e8cf65", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsPag", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:260)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:260` calls `GET /api/v1/player/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca1f840f2180e0ea", "name": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/Campa", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:405)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:405` calls `GET /api/v1/player/campaigns/${campaignId}/vtt/page-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/vtt/page-data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-570be1ce10e267d0", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsP", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:436)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:436` calls `PATCH /api/v1/player/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0019152080aeaf8", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsP", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:458)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:458` calls `PATCH /api/v1/player/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f5b62218562a586", "name": "Dangling fetch: POST /api/v1/player/campaigns/${encodeURIComponent(campaignId)}/tip (src/views/components/organisms/camp", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${encodeURIComponent(campaignId)}/tip (src/views/components/organisms/campaigns/TipStorytellerCard.tsx:46)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/TipStorytellerCard.tsx:46` calls `POST /api/v1/player/campaigns/${encodeURIComponent(campaignId)}/tip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/tip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b05730f2599543d2", "name": "Dangling fetch: POST /api/v1/player/campaigns/${props.campaignId}/characters/${props.character.id}/sheet-import-foundry ", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${props.campaignId}/characters/${props.character.id}/sheet-import-foundry (src/views/components/organisms/campaigns/sheets/CoreSheetRenderer.tsx:33)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/sheets/CoreSheetRenderer.tsx:33` calls `POST /api/v1/player/campaigns/${props.campaignId}/characters/${props.character.id}/sheet-import-foundry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>/sheet-import-foundry`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-64a499fedd71b9eb", "name": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${characterId}/hp (src/views/components/organism", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${characterId}/hp (src/views/components/organisms/campaigns/sheets/useEditableHp.ts:111)"}, "fullDescription": {"text": "`src/views/components/organisms/campaigns/sheets/useEditableHp.ts:111` calls `PATCH /api/v1/player/campaigns/${campaignId}/characters/${characterId}/hp` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:fetcher\nNormalized path used for matching: `/v1/player/campaigns/<p>/characters/<p>/hp`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47a696ebe1a3babc", "name": "Dangling fetch: PATCH /api/v1/account/compute/auto-reload (src/views/components/atoms/AutoReloadToggle.tsx:12)", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/account/compute/auto-reload (src/views/components/atoms/AutoReloadToggle.tsx:12)"}, "fullDescription": {"text": "`src/views/components/atoms/AutoReloadToggle.tsx:12` calls `PATCH /api/v1/account/compute/auto-reload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/account/compute/auto-reload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c6c2a444a497f9c", "name": "Dangling fetch: POST /api/v1/public/pair (src/views/talespire/TalespireSignInView.tsx:41)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/public/pair (src/views/talespire/TalespireSignInView.tsx:41)"}, "fullDescription": {"text": "`src/views/talespire/TalespireSignInView.tsx:41` calls `POST /api/v1/public/pair` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/pair`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-312e1208f8e41aef", "name": "Dangling fetch: GET /api/v1/public/pair/${pairId} (src/views/talespire/TalespireSignInView.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/public/pair/${pairId} (src/views/talespire/TalespireSignInView.tsx:72)"}, "fullDescription": {"text": "`src/views/talespire/TalespireSignInView.tsx:72` calls `GET /api/v1/public/pair/${pairId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/public/pair/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbbd62fe060dd5f4", "name": "Dangling fetch: GET /api/v1/player/campaigns (src/views/talespire/TalespireCampaignPicker.tsx:80)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/player/campaigns (src/views/talespire/TalespireCampaignPicker.tsx:80)"}, "fullDescription": {"text": "`src/views/talespire/TalespireCampaignPicker.tsx:80` calls `GET /api/v1/player/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d5bab10b4b976ad", "name": "Dangling fetch: POST /api/v1/player/campaigns (src/views/talespire/TalespireCampaignPicker.tsx:118)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/player/campaigns (src/views/talespire/TalespireCampaignPicker.tsx:118)"}, "fullDescription": {"text": "`src/views/talespire/TalespireCampaignPicker.tsx:118` calls `POST /api/v1/player/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/player/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9cad95be24ad6aa6", "name": "Unused endpoint: GET /creatures", "shortDescription": {"text": "Unused endpoint: GET /creatures"}, "fullDescription": {"text": "`src/clients/browser/vtt-companion.ts` declares `GET /creatures` 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-d41bbe6a83623f62", "name": "Unused endpoint: GET /initiative", "shortDescription": {"text": "Unused endpoint: GET /initiative"}, "fullDescription": {"text": "`src/clients/browser/vtt-companion.ts` declares `GET /initiative` 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-cff8da5fbc19c76d", "name": "Unused endpoint: POST /chat", "shortDescription": {"text": "Unused endpoint: POST /chat"}, "fullDescription": {"text": "`src/clients/browser/vtt-companion.ts` declares `POST /chat` 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-684f0e83ba7e1558", "name": "Unused endpoint: GET ", "shortDescription": {"text": "Unused endpoint: GET "}, "fullDescription": {"text": "`src/clients/browser/vtt-companion.ts` declares `GET ` 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/25128"}, "properties": {"repository": "Crit-Fumble/cfg-core-browser", "repoUrl": "https://github.com/Crit-Fumble/cfg-core-browser", "branch": "main"}, "results": [{"ruleId": "scanner-7778e5662824acca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/asset-pack-manager/page.tsx:85"}, "properties": {"repobilityId": "44ff42f021d332f2", "scanner": "scanner-primary", "fingerprint": "7778e5662824acca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3129606a98e3b6fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/app-manager/authored/page.tsx:81"}, "properties": {"repobilityId": "189dd9e93e2a63f5", "scanner": "scanner-primary", "fingerprint": "3129606a98e3b6fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23c234cb182dd2dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/campaign-manager/[id]/layout.tsx:109"}, "properties": {"repobilityId": "d2a25a7541a0fce3", "scanner": "scanner-primary", "fingerprint": "23c234cb182dd2dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-30a527b339782118", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/campaign-manager/[id]/play/layout.tsx:43"}, "properties": {"repobilityId": "772f5fbb6424e36a", "scanner": "scanner-primary", "fingerprint": "30a527b339782118", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e2db0e04bd51271", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/apps/(core)/admin-dashboard/locations/create/page.tsx:1"}, "properties": {"repobilityId": "8c90022dd6413c63", "scanner": "scanner-primary", "fingerprint": "1e2db0e04bd51271", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-44fd654eda656783", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SourcesTab.tsx:77"}, "properties": {"repobilityId": "a7842dae7996a1c3", "scanner": "scanner-primary", "fingerprint": "44fd654eda656783", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-60a717a81415a0b5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:531"}, "properties": {"repobilityId": "9a70dc9023a528e7", "scanner": "scanner-primary", "fingerprint": "60a717a81415a0b5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-daef9709b4412a11", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:101"}, "properties": {"repobilityId": "5f6a2b2498add599", "scanner": "scanner-primary", "fingerprint": "daef9709b4412a11", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-cf271023c1209c4e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/admin-dashboard/audit-log/page.tsx:114"}, "properties": {"repobilityId": "0c5d249440fc3531", "scanner": "scanner-primary", "fingerprint": "cf271023c1209c4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f3217455f16d497d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(core)/game-system-manager/[slug]/sources/page.tsx:125"}, "properties": {"repobilityId": "a6beec491dd8fae2", "scanner": "scanner-primary", "fingerprint": "f3217455f16d497d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d7ce33f0dd818ef0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/layout.tsx:122"}, "properties": {"repobilityId": "7cc2003849a067f1", "scanner": "scanner-primary", "fingerprint": "d7ce33f0dd818ef0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7dc7df793dfedea7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignJoinView.tsx:57"}, "properties": {"repobilityId": "f2463cb22990d4fe", "scanner": "scanner-primary", "fingerprint": "7dc7df793dfedea7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f98eb3170e1f6d02", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordActivityTopBar.tsx:112"}, "properties": {"repobilityId": "79296f0ea445a7ff", "scanner": "scanner-primary", "fingerprint": "f98eb3170e1f6d02", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c8ea4c9fb3947572", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityHubView.tsx:201"}, "properties": {"repobilityId": "b47ed4fae045059b", "scanner": "scanner-primary", "fingerprint": "c8ea4c9fb3947572", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3fcbf6505e2ac548", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ChannelSetupView.tsx:261"}, "properties": {"repobilityId": "7e6b3034cb034dcf", "scanner": "scanner-primary", "fingerprint": "3fcbf6505e2ac548", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3633b8b7291ea1f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedSessions.tsx:84"}, "properties": {"repobilityId": "a0a2cfb44fb14dcb", "scanner": "scanner-primary", "fingerprint": "3633b8b7291ea1f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86fcd72b5038b7b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedTabs.tsx:84"}, "properties": {"repobilityId": "362817c451ef2123", "scanner": "scanner-primary", "fingerprint": "86fcd72b5038b7b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8ad7e98931a8af7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/LoungeActivityView.tsx:217"}, "properties": {"repobilityId": "436706f5766bf898", "scanner": "scanner-primary", "fingerprint": "e8ad7e98931a8af7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37725f902c087046", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivitySessionView.tsx:101"}, "properties": {"repobilityId": "54c22cb5cf5e76a3", "scanner": "scanner-primary", "fingerprint": "37725f902c087046", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e332deeaf54421c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignActivityView.tsx:442"}, "properties": {"repobilityId": "04fddd4dd8eccd82", "scanner": "scanner-primary", "fingerprint": "e332deeaf54421c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-365493f9a527a125", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityKickoffPopover.tsx:161"}, "properties": {"repobilityId": "a9f1b7f814f1b859", "scanner": "scanner-primary", "fingerprint": "365493f9a527a125", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-92c74778ad981ab0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/ActivityTipJarSection.tsx:130"}, "properties": {"repobilityId": "129d42b750c85378", "scanner": "scanner-primary", "fingerprint": "92c74778ad981ab0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-797d0a925900a5dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedView.tsx:209"}, "properties": {"repobilityId": "457e56009fb4b0ec", "scanner": "scanner-primary", "fingerprint": "797d0a925900a5dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d4b1051d0b0d7b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/CampaignChannelView.tsx:56"}, "properties": {"repobilityId": "61ee0010908ade15", "scanner": "scanner-primary", "fingerprint": "0d4b1051d0b0d7b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5509f6cd93dca83b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/discord/DiscordLinkedVoiceMembers.tsx:141"}, "properties": {"repobilityId": "50c5e8846058781d", "scanner": "scanner-primary", "fingerprint": "5509f6cd93dca83b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-97c69cfac0e94159", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:181"}, "properties": {"repobilityId": "38d616be29770ebe", "scanner": "scanner-primary", "fingerprint": "97c69cfac0e94159", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-af6421f49903719e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/discord-activity/campaigns/RollLogPanel.tsx:81"}, "properties": {"repobilityId": "246bf18b19fb3c9b", "scanner": "scanner-primary", "fingerprint": "af6421f49903719e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8beab34fae8cfbd8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/templates/remote/RemoteShell.tsx:313"}, "properties": {"repobilityId": "c64270334bea9513", "scanner": "scanner-primary", "fingerprint": "8beab34fae8cfbd8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea04332ea56bc279", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/templates/Shell/desktop-apps/DesktopAppsHost.tsx:243"}, "properties": {"repobilityId": "c54996910b17a5f7", "scanner": "scanner-primary", "fingerprint": "ea04332ea56bc279", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-978865f68b4f273d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/TipJar.tsx:134"}, "properties": {"repobilityId": "6a7aa82c4d1ba218", "scanner": "scanner-primary", "fingerprint": "978865f68b4f273d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6986cfe36e6a37ef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/FileMenu.tsx:398"}, "properties": {"repobilityId": "e5251eed07bead72", "scanner": "scanner-primary", "fingerprint": "6986cfe36e6a37ef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b1220fbec2b2390", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/PerPartySettingsLinks.tsx:67"}, "properties": {"repobilityId": "ea7c7547d122e47c", "scanner": "scanner-primary", "fingerprint": "5b1220fbec2b2390", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74fd6ea543281666", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/molecules/GlassCard.tsx:25"}, "properties": {"repobilityId": "0df9eeceb2bf11ba", "scanner": "scanner-primary", "fingerprint": "74fd6ea543281666", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-aa28286304ea0ae9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/EventSeriesList.tsx:56"}, "properties": {"repobilityId": "8fcc566265c1855f", "scanner": "scanner-primary", "fingerprint": "aa28286304ea0ae9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68b082d282b02ab5", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/molecules/ContentNav.tsx:25"}, "properties": {"repobilityId": "3b2a419b881f0ad1", "scanner": "scanner-primary", "fingerprint": "68b082d282b02ab5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-51f46262e7b41418", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/BreezeAppFrame.tsx:60"}, "properties": {"repobilityId": "7afe2dc15eef70f9", "scanner": "scanner-primary", "fingerprint": "51f46262e7b41418", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32b4ab39d81628cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/TipRecipientGroupCard.tsx:82"}, "properties": {"repobilityId": "2f1500fb5cd8f19b", "scanner": "scanner-primary", "fingerprint": "32b4ab39d81628cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-60a32dc2bbf3286f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/molecules/DiscordEventCard.tsx:122"}, "properties": {"repobilityId": "1a3482ba0d0601fa", "scanner": "scanner-primary", "fingerprint": "60a32dc2bbf3286f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e10050351c52bdce", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/InviteAcceptView.stories.tsx:4"}, "properties": {"repobilityId": "052bc8efcbc4b0ae", "scanner": "scanner-primary", "fingerprint": "e10050351c52bdce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-75aba6d1e656a530", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/PartiesView.tsx:42"}, "properties": {"repobilityId": "8530299140c98e84", "scanner": "scanner-primary", "fingerprint": "75aba6d1e656a530", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b37a8e43978be20c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/TransactionsFloatingWindow.tsx:48"}, "properties": {"repobilityId": "0c3103eab9ee54db", "scanner": "scanner-primary", "fingerprint": "b37a8e43978be20c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-67296c60fcc18634", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/InstalledAppsFloatingWindow.tsx:56"}, "properties": {"repobilityId": "b5b5484ac20de668", "scanner": "scanner-primary", "fingerprint": "67296c60fcc18634", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7f4fc620209b5d5e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/DeveloperFloatingWindow.tsx:53"}, "properties": {"repobilityId": "531c55a069560936", "scanner": "scanner-primary", "fingerprint": "7f4fc620209b5d5e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-259aa5f8e8f527b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/LinkedAccountsFloatingWindow.tsx:60"}, "properties": {"repobilityId": "9a4eb3f292c78cd5", "scanner": "scanner-primary", "fingerprint": "259aa5f8e8f527b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5dda6a132f099298", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/WindowChrome.tsx:240"}, "properties": {"repobilityId": "583c481f998ed03a", "scanner": "scanner-primary", "fingerprint": "5dda6a132f099298", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-664a840196bdb6c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/FloatingWindow.tsx:676"}, "properties": {"repobilityId": "ce2e1b601a8b5c37", "scanner": "scanner-primary", "fingerprint": "664a840196bdb6c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-017b64beb69df37e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/ProfileFloatingWindow.tsx:63"}, "properties": {"repobilityId": "aa274a2669f734e6", "scanner": "scanner-primary", "fingerprint": "017b64beb69df37e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-150b98d5c4732a31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/PlanTiersFloatingWindow.tsx:44"}, "properties": {"repobilityId": "c7837876817e7f2d", "scanner": "scanner-primary", "fingerprint": "150b98d5c4732a31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2924023eaa276eb7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/AccountFloatingWindow.tsx:134"}, "properties": {"repobilityId": "cb7c54794bdf37d9", "scanner": "scanner-primary", "fingerprint": "2924023eaa276eb7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a056fa96ad90643f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/windows/FloatingWindow.stories.tsx:4"}, "properties": {"repobilityId": "abcf119aca630e41", "scanner": "scanner-primary", "fingerprint": "a056fa96ad90643f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9ec010b2d67451b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/windows/ConnectionsFloatingWindow.tsx:59"}, "properties": {"repobilityId": "f2204c239be74693", "scanner": "scanner-primary", "fingerprint": "9ec010b2d67451b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abd5db9de59db5a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshEventsTab.tsx:194"}, "properties": {"repobilityId": "a7748e44395160ac", "scanner": "scanner-primary", "fingerprint": "abd5db9de59db5a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7c23df5d062d51b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshChannelList.tsx:426"}, "properties": {"repobilityId": "8ab380e5b152765f", "scanner": "scanner-primary", "fingerprint": "7c23df5d062d51b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-34deb6320d58dd01", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/resesh/ReseshChannelList.tsx:421"}, "properties": {"repobilityId": "66974126884b25ab", "scanner": "scanner-primary", "fingerprint": "34deb6320d58dd01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-13d81cb0ca65c2f9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshWidgets.tsx:327"}, "properties": {"repobilityId": "300efc83eaa60431", "scanner": "scanner-primary", "fingerprint": "13d81cb0ca65c2f9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-38b3b7a8283c4bd4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/resesh/ReseshCaptions.tsx:113"}, "properties": {"repobilityId": "5c1e74e956eeb915", "scanner": "scanner-primary", "fingerprint": "38b3b7a8283c4bd4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-64afbb2c866c5eb4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/AccessPanel.tsx:361"}, "properties": {"repobilityId": "667267b0b2320b8e", "scanner": "scanner-primary", "fingerprint": "64afbb2c866c5eb4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2eccc349ed802172", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/MemberRosterPanel.tsx:139"}, "properties": {"repobilityId": "a977dacda7fb87c0", "scanner": "scanner-primary", "fingerprint": "2eccc349ed802172", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-652f115b3cae893b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/FoundryUsersSection.tsx:210"}, "properties": {"repobilityId": "bda387049e54e465", "scanner": "scanner-primary", "fingerprint": "652f115b3cae893b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a5611ba82407876", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/access/EntityCard.tsx:71"}, "properties": {"repobilityId": "b7b0bc2cd4bd06c8", "scanner": "scanner-primary", "fingerprint": "1a5611ba82407876", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd36cffbb6cba66b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/sheets/InlinePdfViewer.tsx:66"}, "properties": {"repobilityId": "3a4f24efe0945ec5", "scanner": "scanner-primary", "fingerprint": "cd36cffbb6cba66b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c4e801e370004ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/sheets/SheetViewer.tsx:98"}, "properties": {"repobilityId": "c8a8b177b7be756d", "scanner": "scanner-primary", "fingerprint": "2c4e801e370004ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ad6b87e79db24822", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/account/ApiKeysClient.stories.tsx:4"}, "properties": {"repobilityId": "1234e257bc77668b", "scanner": "scanner-primary", "fingerprint": "ad6b87e79db24822", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7837bcbce82a6ed9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/LinkAccountPanel.tsx:138"}, "properties": {"repobilityId": "f1cf98809fe915da", "scanner": "scanner-primary", "fingerprint": "7837bcbce82a6ed9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9969453a400956b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/InstalledAppsPanel.tsx:194"}, "properties": {"repobilityId": "3f54b9e31c7eb4a7", "scanner": "scanner-primary", "fingerprint": "9969453a400956b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44cb9cbb23d919ef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:167"}, "properties": {"repobilityId": "5cdb9b59b32f09f0", "scanner": "scanner-primary", "fingerprint": "44cb9cbb23d919ef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f0d493afe2979da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/ApiKeysClient.tsx:255"}, "properties": {"repobilityId": "43c0b402fdfddb45", "scanner": "scanner-primary", "fingerprint": "5f0d493afe2979da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c1100c2d342d3b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:143"}, "properties": {"repobilityId": "b93c957fbb17ed07", "scanner": "scanner-primary", "fingerprint": "5c1100c2d342d3b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e6e30de791d35ae", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/account/DiscordIntegrationClient.stories.tsx:4"}, "properties": {"repobilityId": "8512155ad1a56a95", "scanner": "scanner-primary", "fingerprint": "6e6e30de791d35ae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-391d6933fb926414", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/RecordingConsentClient.tsx:131"}, "properties": {"repobilityId": "002030695c716fd0", "scanner": "scanner-primary", "fingerprint": "391d6933fb926414", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da347894fcdead4b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryIntegrationClient.tsx:311"}, "properties": {"repobilityId": "a79a1af51f72bc9e", "scanner": "scanner-primary", "fingerprint": "da347894fcdead4b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3f48777e334a223b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/AddConnectionPanel.tsx:118"}, "properties": {"repobilityId": "6af2ab887247c55c", "scanner": "scanner-primary", "fingerprint": "3f48777e334a223b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8cf595b77ce6d54b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/DiscordIntegrationClient.tsx:152"}, "properties": {"repobilityId": "cbc135fc6c9d7906", "scanner": "scanner-primary", "fingerprint": "8cf595b77ce6d54b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6286cc6edcbcba13", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/FoundryInstalledModulesPanel.tsx:102"}, "properties": {"repobilityId": "157a0473f149d164", "scanner": "scanner-primary", "fingerprint": "6286cc6edcbcba13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-85f8ed61de78fa42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/account/InstallAppPanel.tsx:60"}, "properties": {"repobilityId": "3a86360880dcb714", "scanner": "scanner-primary", "fingerprint": "85f8ed61de78fa42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c6d07501445bb600", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/CampaignsPageContent.tsx:215"}, "properties": {"repobilityId": "4399631e51ceb3c7", "scanner": "scanner-primary", "fingerprint": "c6d07501445bb600", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-26e08c9cb829966a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/UserManageMergeSection.stories.tsx:5"}, "properties": {"repobilityId": "fc4cc821f872e621", "scanner": "scanner-primary", "fingerprint": "26e08c9cb829966a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1ab640f7e0b92780", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/UserManageWalletSection.tsx:149"}, "properties": {"repobilityId": "2506e3600487870e", "scanner": "scanner-primary", "fingerprint": "1ab640f7e0b92780", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3dbe2309f1c4addd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/TransactionsAuditPageContent.tsx:385"}, "properties": {"repobilityId": "094a390435151fde", "scanner": "scanner-primary", "fingerprint": "3dbe2309f1c4addd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-22486f6fdecde3d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/CoinsPageContent.tsx:449"}, "properties": {"repobilityId": "470126127d11d325", "scanner": "scanner-primary", "fingerprint": "22486f6fdecde3d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f5c513cbf560aeb3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/FoundryPlatformManager.stories.tsx:4"}, "properties": {"repobilityId": "055e7570a32017f7", "scanner": "scanner-primary", "fingerprint": "f5c513cbf560aeb3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9c0ef2132f956cf3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/UserManageWalletSection.stories.tsx:5"}, "properties": {"repobilityId": "c58f2da5ab8391d6", "scanner": "scanner-primary", "fingerprint": "9c0ef2132f956cf3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-54dcace7ab61d9d9", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/admin/TransactionsAuditPageContent.stories.tsx:4"}, "properties": {"repobilityId": "028f2473ddc09149", "scanner": "scanner-primary", "fingerprint": "54dcace7ab61d9d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-fb741a00841384f5", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/views/components/organisms/admin/UserManagePanel.tsx:224"}, "properties": {"repobilityId": "9e4993b785c25cab", "scanner": "scanner-primary", "fingerprint": "fb741a00841384f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7e5a18a18c37eecf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/admin/chat-setup/DiscordSetupPanel.tsx:99"}, "properties": {"repobilityId": "f87d77081c15e293", "scanner": "scanner-primary", "fingerprint": "7e5a18a18c37eecf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-730cf79d63ddd584", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/characters/NewCharacterDetailSteps.stories.tsx:5"}, "properties": {"repobilityId": "3b14b285ed4d8d57", "scanner": "scanner-primary", "fingerprint": "730cf79d63ddd584", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-13731ca96ee9160c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/vtt/AppVttOverlay.tsx:129"}, "properties": {"repobilityId": "2ea6aea954471734", "scanner": "scanner-primary", "fingerprint": "13731ca96ee9160c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9e907f2bfe82fdc6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/nav-host/BrowserNavHost.tsx:47"}, "properties": {"repobilityId": "c4ee205f5e09e37c", "scanner": "scanner-primary", "fingerprint": "9e907f2bfe82fdc6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2b60af79936c34c6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.stories.tsx:4"}, "properties": {"repobilityId": "946d857b94d39cb8", "scanner": "scanner-primary", "fingerprint": "2b60af79936c34c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-faf3aa18cf2d7302", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryServerNav.tsx:56"}, "properties": {"repobilityId": "ce7af534590fc794", "scanner": "scanner-primary", "fingerprint": "faf3aa18cf2d7302", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fce31f324cbe4c89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryServerHeader.tsx:43"}, "properties": {"repobilityId": "972b3d653f81ae06", "scanner": "scanner-primary", "fingerprint": "fce31f324cbe4c89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-52ade0a11336678d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/FoundryWorldNav.tsx:39"}, "properties": {"repobilityId": "5162256e19949636", "scanner": "scanner-primary", "fingerprint": "52ade0a11336678d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-574a6da16609af91", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:210"}, "properties": {"repobilityId": "c5d55d1a894d0432", "scanner": "scanner-primary", "fingerprint": "574a6da16609af91", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c82280ab33fc611c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/foundry/_settings/FoundryServerSystemsPanel.tsx:131"}, "properties": {"repobilityId": "3d70337b207fa32d", "scanner": "scanner-primary", "fingerprint": "c82280ab33fc611c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-27b4ae1757f17309", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/game-apps/GameAppSettingsView.stories.tsx:4"}, "properties": {"repobilityId": "dd528a521ee904ee", "scanner": "scanner-primary", "fingerprint": "27b4ae1757f17309", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-5233e6db1d988d83", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.tsx:47"}, "properties": {"repobilityId": "b7e5136f4e1b93fd", "scanner": "scanner-primary", "fingerprint": "5233e6db1d988d83", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8059de3f057cd492", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.tsx:76"}, "properties": {"repobilityId": "8f57a2a05908d4b8", "scanner": "scanner-primary", "fingerprint": "8059de3f057cd492", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-2d54d87984c046ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/CoreDockLeftZone.tsx:53"}, "properties": {"repobilityId": "93bce58140c70b27", "scanner": "scanner-primary", "fingerprint": "2d54d87984c046ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ce6d7bfe85719cb", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/dock/CoreDock/CoreDockLeftZone.stories.tsx:5"}, "properties": {"repobilityId": "1bee687dd99b1087", "scanner": "scanner-primary", "fingerprint": "0ce6d7bfe85719cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-155376870e2507c6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/dock/CoreDock/CoreDockRightZone.stories.tsx:5"}, "properties": {"repobilityId": "07e44ce48cf2d263", "scanner": "scanner-primary", "fingerprint": "155376870e2507c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b49dc8d312697d9b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/dock/CoreDock/DockDisplayIndicator.tsx:84"}, "properties": {"repobilityId": "5004db3092f23868", "scanner": "scanner-primary", "fingerprint": "b49dc8d312697d9b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ddd9a8ee67bdfc54", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/wallet/TransactionsPanel.tsx:160"}, "properties": {"repobilityId": "8eae69f9ec8de84e", "scanner": "scanner-primary", "fingerprint": "ddd9a8ee67bdfc54", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e991b20de049c6a1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/wallet/BalancesDropdown.stories.tsx:5"}, "properties": {"repobilityId": "3ae12fc95f96a5de", "scanner": "scanner-primary", "fingerprint": "e991b20de049c6a1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-734f9eb4969500f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/catalog/EntityCatalog.tsx:196"}, "properties": {"repobilityId": "e24675b72898862b", "scanner": "scanner-primary", "fingerprint": "734f9eb4969500f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0277d8cd53934c2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/collaboration/CollaborationSessionsPanel.tsx:464"}, "properties": {"repobilityId": "010584dddd4be93e", "scanner": "scanner-primary", "fingerprint": "0277d8cd53934c2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b69bd50d906dd81", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/apps/AppCatalogTile.tsx:259"}, "properties": {"repobilityId": "e92dfb768a19c3e5", "scanner": "scanner-primary", "fingerprint": "9b69bd50d906dd81", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f9828ca22d85674", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/EventEditModal.tsx:88"}, "properties": {"repobilityId": "fbb6ac086fd7299a", "scanner": "scanner-primary", "fingerprint": "6f9828ca22d85674", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-85c9557fea56f3ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/CalendarSourceList.tsx:56"}, "properties": {"repobilityId": "b02aad954f04ade3", "scanner": "scanner-primary", "fingerprint": "85c9557fea56f3ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e9b684b3c94ac8f1", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/calendar/CalendarSourceList.tsx:45"}, "properties": {"repobilityId": "d23750f5f937fc00", "scanner": "scanner-primary", "fingerprint": "e9b684b3c94ac8f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-cb1e675deea9ba5f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/calendar/EventAttachedResources.tsx:117"}, "properties": {"repobilityId": "8f5acbef4ab59eca", "scanner": "scanner-primary", "fingerprint": "cb1e675deea9ba5f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0bc6dd9788f14fa1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffDndProvider.tsx:183"}, "properties": {"repobilityId": "3a33e35c3e202a9a", "scanner": "scanner-primary", "fingerprint": "0bc6dd9788f14fa1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3f6adab2cc8a8f96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffAppRow.tsx:159"}, "properties": {"repobilityId": "3aa7c69382b6adaa", "scanner": "scanner-primary", "fingerprint": "3f6adab2cc8a8f96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e6849021c658292", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/SystemTrayPopover.tsx:89"}, "properties": {"repobilityId": "b4ad7d215318be5b", "scanner": "scanner-primary", "fingerprint": "8e6849021c658292", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1df910367d14e856", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffSharedUI.tsx:50"}, "properties": {"repobilityId": "f9915b7c2903e7f0", "scanner": "scanner-primary", "fingerprint": "1df910367d14e856", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1c541e95dd72222", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/KickoffRuntimeAppRow.tsx:108"}, "properties": {"repobilityId": "31b63556838ed571", "scanner": "scanner-primary", "fingerprint": "d1c541e95dd72222", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7789136e4360a08e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/shell/CfgKickoffLauncher.tsx:357"}, "properties": {"repobilityId": "911b20a99c8f92ef", "scanner": "scanner-primary", "fingerprint": "7789136e4360a08e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ede08c78ea5c33a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/factorio/FactorioWorldsSection.tsx:241"}, "properties": {"repobilityId": "22b41fb91bd4127e", "scanner": "scanner-primary", "fingerprint": "ede08c78ea5c33a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e22d157b7d9b8336", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/factorio/FactorioServerLauncher.tsx:195"}, "properties": {"repobilityId": "60d53c1922867e90", "scanner": "scanner-primary", "fingerprint": "e22d157b7d9b8336", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d4c9f40deeceb91e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/discord/DiscordServerRail.tsx:186"}, "properties": {"repobilityId": "c4f2d72fd03212a7", "scanner": "scanner-primary", "fingerprint": "d4c9f40deeceb91e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2b5ebdc6786d638f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/persona/CalendarPill.tsx:427"}, "properties": {"repobilityId": "95427d4e55a7573f", "scanner": "scanner-primary", "fingerprint": "2b5ebdc6786d638f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd816896e2644d23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:154"}, "properties": {"repobilityId": "bf2a0b98a110acfc", "scanner": "scanner-primary", "fingerprint": "fd816896e2644d23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b4a10b255565f96e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/server-manager/ServerManagerView.tsx:264"}, "properties": {"repobilityId": "82a9f1a267cd6772", "scanner": "scanner-primary", "fingerprint": "b4a10b255565f96e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c5a0a902d62f895", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/asset-packs/AssetPackSettingsView.stories.tsx:4"}, "properties": {"repobilityId": "fd118e5837b9c83e", "scanner": "scanner-primary", "fingerprint": "0c5a0a902d62f895", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b7cfd5bac3fb9fc1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/asset-packs/AssetPackUpload.tsx:222"}, "properties": {"repobilityId": "311ef4e2c69cadfb", "scanner": "scanner-primary", "fingerprint": "b7cfd5bac3fb9fc1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-52c48a1be3dd2d83", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaServerLauncher.tsx:235"}, "properties": {"repobilityId": "651eaa06002e8fba", "scanner": "scanner-primary", "fingerprint": "52c48a1be3dd2d83", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33c3dbf925b82de1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaWorldOverview.tsx:188"}, "properties": {"repobilityId": "51ae5e63af4983c8", "scanner": "scanner-primary", "fingerprint": "33c3dbf925b82de1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b7079e7f92ba4e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/terraria/TerrariaWorldsSection.tsx:274"}, "properties": {"repobilityId": "85f420839da033a4", "scanner": "scanner-primary", "fingerprint": "5b7079e7f92ba4e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d98472bbbda2fa3b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CharactersPage.tsx:127"}, "properties": {"repobilityId": "9e129379ba0ddbcd", "scanner": "scanner-primary", "fingerprint": "d98472bbbda2fa3b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28c46de797dc11c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.tsx:91"}, "properties": {"repobilityId": "280903428391c7fd", "scanner": "scanner-primary", "fingerprint": "28c46de797dc11c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a687dd4a81982ac6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/ExternalSheetView.stories.tsx:5"}, "properties": {"repobilityId": "bfb7d3af80a27a18", "scanner": "scanner-primary", "fingerprint": "a687dd4a81982ac6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-78c41618b192adda", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetClient.stories.tsx:4"}, "properties": {"repobilityId": "7d7bb534801b7d9f", "scanner": "scanner-primary", "fingerprint": "78c41618b192adda", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c536fac526d73896", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignHome.tsx:241"}, "properties": {"repobilityId": "03359a17d6b1afa0", "scanner": "scanner-primary", "fingerprint": "c536fac526d73896", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-787bcaa5b71c5725", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetAvatar.stories.tsx:5"}, "properties": {"repobilityId": "3ddd352b07791c6a", "scanner": "scanner-primary", "fingerprint": "787bcaa5b71c5725", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-cfe3b5b6557b059f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyCharactersPage.tsx:227"}, "properties": {"repobilityId": "33433bec816e3001", "scanner": "scanner-primary", "fingerprint": "cfe3b5b6557b059f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-90002b4e1c1122c8", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.stories.tsx:4"}, "properties": {"repobilityId": "a94a28a75be6717c", "scanner": "scanner-primary", "fingerprint": "90002b4e1c1122c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a885f570a67c240f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionPlayView.stories.tsx:4"}, "properties": {"repobilityId": "f8f815945c540fc5", "scanner": "scanner-primary", "fingerprint": "a885f570a67c240f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9732c32c8dec9845", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignSidebar.tsx:80"}, "properties": {"repobilityId": "bbdcb8a7d3c13882", "scanner": "scanner-primary", "fingerprint": "9732c32c8dec9845", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e99307a5d2e0d4a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/JournalEntryView.stories.tsx:4"}, "properties": {"repobilityId": "91af51495d25b755", "scanner": "scanner-primary", "fingerprint": "5e99307a5d2e0d4a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2ecf684031bf1f9f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.stories.tsx:5"}, "properties": {"repobilityId": "3e2d0ebe517f2e3e", "scanner": "scanner-primary", "fingerprint": "2ecf684031bf1f9f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-442e3c7f6784b48c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyNav.stories.tsx:4"}, "properties": {"repobilityId": "c982c1d313001560", "scanner": "scanner-primary", "fingerprint": "442e3c7f6784b48c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bb2b95923c11335c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyDiscordSection.stories.tsx:5"}, "properties": {"repobilityId": "b019316ca8f9e336", "scanner": "scanner-primary", "fingerprint": "bb2b95923c11335c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d31c76558878529e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:228"}, "properties": {"repobilityId": "09b946f89c5dcb75", "scanner": "scanner-primary", "fingerprint": "d31c76558878529e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3f99bea99b055014", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/TipGmCard.tsx:84"}, "properties": {"repobilityId": "2ccf08d10538cbbe", "scanner": "scanner-primary", "fingerprint": "3f99bea99b055014", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b4d217301fd17d1d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PlayerManagement.tsx:294"}, "properties": {"repobilityId": "e83bff5d9858b645", "scanner": "scanner-primary", "fingerprint": "b4d217301fd17d1d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-22683e4d00ad9aba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionControlWidget.tsx:271"}, "properties": {"repobilityId": "0ff4d3c0c7cafa93", "scanner": "scanner-primary", "fingerprint": "22683e4d00ad9aba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44c21e98d8998d78", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:206"}, "properties": {"repobilityId": "6eb09ec5b91c7487", "scanner": "scanner-primary", "fingerprint": "44c21e98d8998d78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c75e74f0ebb0a7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyInheritedSettingsPanel.tsx:79"}, "properties": {"repobilityId": "f0dd42a384da2b17", "scanner": "scanner-primary", "fingerprint": "5c75e74f0ebb0a7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-271ee3658b340c48", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionPlayView.tsx:265"}, "properties": {"repobilityId": "c11dd84ff5bf888c", "scanner": "scanner-primary", "fingerprint": "271ee3658b340c48", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c14049eb5d7f726", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChannelConfigSettings.stories.tsx:5"}, "properties": {"repobilityId": "e4edaf3caca93651", "scanner": "scanner-primary", "fingerprint": "1c14049eb5d7f726", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-741773f80235ec97", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SheetProvidersSection.tsx:330"}, "properties": {"repobilityId": "2817613f15e4d92b", "scanner": "scanner-primary", "fingerprint": "741773f80235ec97", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96fa8ebb019461e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyNav.tsx:48"}, "properties": {"repobilityId": "34d7692729cc9803", "scanner": "scanner-primary", "fingerprint": "96fa8ebb019461e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f0724f7afb076b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/SessionsPage.tsx:334"}, "properties": {"repobilityId": "14089e3f8714fe68", "scanner": "scanner-primary", "fingerprint": "2f0724f7afb076b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e7b0d114e0bb192", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:161"}, "properties": {"repobilityId": "640fed18a96f1dfe", "scanner": "scanner-primary", "fingerprint": "0e7b0d114e0bb192", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a8323a724ce330e7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/PartyDetailPage.stories.tsx:4"}, "properties": {"repobilityId": "3ad65405efab9072", "scanner": "scanner-primary", "fingerprint": "a8323a724ce330e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bf1da668f77d3d3b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/JournalList.tsx:94"}, "properties": {"repobilityId": "3304ecade0ce9a53", "scanner": "scanner-primary", "fingerprint": "bf1da668f77d3d3b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cddf75778f1e1130", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.tsx:449"}, "properties": {"repobilityId": "48d50c5358a92d8f", "scanner": "scanner-primary", "fingerprint": "cddf75778f1e1130", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b1b61763153752f2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionDetailPage.stories.tsx:4"}, "properties": {"repobilityId": "14aefc1be783f938", "scanner": "scanner-primary", "fingerprint": "b1b61763153752f2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-47d2cc718635fc98", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.stories.tsx:4"}, "properties": {"repobilityId": "48b3f6169feaf1df", "scanner": "scanner-primary", "fingerprint": "47d2cc718635fc98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f7dd59e839bdc6d7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetProvider.stories.tsx:5"}, "properties": {"repobilityId": "e7e7da86f0802aff", "scanner": "scanner-primary", "fingerprint": "f7dd59e839bdc6d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-32adca93537d3f48", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignFoundryLinkPicker.tsx:219"}, "properties": {"repobilityId": "11ce5163bcb82695", "scanner": "scanner-primary", "fingerprint": "32adca93537d3f48", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c3b640b8b8eb060", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/PartyDetailPage.tsx:204"}, "properties": {"repobilityId": "a005d9c9e97d1e35", "scanner": "scanner-primary", "fingerprint": "4c3b640b8b8eb060", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1adcadf8d514983b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignTranscriptsPage.tsx:298"}, "properties": {"repobilityId": "95e3f45a8f8ca2f4", "scanner": "scanner-primary", "fingerprint": "1adcadf8d514983b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9c45444d6307248", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignsPage.tsx:63"}, "properties": {"repobilityId": "0d86c9f0bed0d593", "scanner": "scanner-primary", "fingerprint": "d9c45444d6307248", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5dc47d17d770e2c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/CampaignQuickNav.tsx:32"}, "properties": {"repobilityId": "33476700d541fcf4", "scanner": "scanner-primary", "fingerprint": "5dc47d17d770e2c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4cfe5adaa57d3887", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SheetProvidersSection.stories.tsx:5"}, "properties": {"repobilityId": "560c0114eab0d467", "scanner": "scanner-primary", "fingerprint": "4cfe5adaa57d3887", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0fb5df3c7d6f450d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CharacterSheetInfoTab.stories.tsx:5"}, "properties": {"repobilityId": "9c2fc998cb7458bf", "scanner": "scanner-primary", "fingerprint": "0fb5df3c7d6f450d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8b4b3ae60e468e88", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignChannelConfig.stories.tsx:5"}, "properties": {"repobilityId": "54daa73140d9f59d", "scanner": "scanner-primary", "fingerprint": "8b4b3ae60e468e88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-519f920b95cbd467", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/RollLogPanel.tsx:81"}, "properties": {"repobilityId": "1ec5f5ce063804ee", "scanner": "scanner-primary", "fingerprint": "519f920b95cbd467", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8b39b2600ca6f2a3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/CampaignGeneralSettings.stories.tsx:4"}, "properties": {"repobilityId": "880d53905fd314c9", "scanner": "scanner-primary", "fingerprint": "8b39b2600ca6f2a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1c378d3ca479df7b", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:524"}, "properties": {"repobilityId": "4262ad3bba4b5aee", "scanner": "scanner-primary", "fingerprint": "1c378d3ca479df7b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-0737a53bbf450154", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/SessionsPage.stories.tsx:4"}, "properties": {"repobilityId": "c18c98ca4119b882", "scanner": "scanner-primary", "fingerprint": "0737a53bbf450154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-89787e6343a00f52", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/FoundryActorSheet.stories.tsx:5"}, "properties": {"repobilityId": "a166a0fd2d3e2cfc", "scanner": "scanner-primary", "fingerprint": "89787e6343a00f52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-80ff3014100f4c05", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/FoundryItemDetail.tsx:202"}, "properties": {"repobilityId": "01045d6977f1637b", "scanner": "scanner-primary", "fingerprint": "80ff3014100f4c05", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df14b650a5cd5cf0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/views/components/organisms/campaigns/sheets/FoundryItemDetail.tsx:19"}, "properties": {"repobilityId": "036e73b238582743", "scanner": "scanner-primary", "fingerprint": "df14b650a5cd5cf0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5706893428cf9027", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/CoreSheetRenderer.stories.tsx:5"}, "properties": {"repobilityId": "7a932569741a6efa", "scanner": "scanner-primary", "fingerprint": "5706893428cf9027", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-21624945e1d52846", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/FoundryActorSheet.tsx:469"}, "properties": {"repobilityId": "9b675b4f0bb9e006", "scanner": "scanner-primary", "fingerprint": "21624945e1d52846", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e630232fe6f98605", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/organisms/campaigns/sheets/generic/BlankCoreSheet.stories.tsx:5"}, "properties": {"repobilityId": "487563e067bbbbaa", "scanner": "scanner-primary", "fingerprint": "e630232fe6f98605", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e0f968ac69242b4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/sheets/generic/BlankCoreSheet.tsx:52"}, "properties": {"repobilityId": "531ec970267f104e", "scanner": "scanner-primary", "fingerprint": "e0f968ac69242b4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f33cd41fc984b46", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/components/organisms/campaigns/create-wizard/CampaignCreateWizard.tsx:477"}, "properties": {"repobilityId": "41a055bb8bcfdc5f", "scanner": "scanner-primary", "fingerprint": "1f33cd41fc984b46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1d82994feb325929", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/views/components/atoms/SignInButtons.tsx:19"}, "properties": {"repobilityId": "8a170720b70803ad", "scanner": "scanner-primary", "fingerprint": "1d82994feb325929", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8c3c402ed8af4c21", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/talespire/TalespireLinkedView.tsx:213"}, "properties": {"repobilityId": "be46e3aa1e0d27b8", "scanner": "scanner-primary", "fingerprint": "8c3c402ed8af4c21", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8424949183b1ce12", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/views/talespire/TalespireCampaignPicker.tsx:271"}, "properties": {"repobilityId": "7605bab50c907c55", "scanner": "scanner-primary", "fingerprint": "8424949183b1ce12", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25de52372c63f233", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:24-slim"}, "properties": {"repobilityId": "2369646b29c3ff9d", "scanner": "scanner-primary", "fingerprint": "25de52372c63f233", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 26}}}]}, {"ruleId": "scanner-0c5403a76abace4c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-deprecated-classes.mjs:22"}, "properties": {"repobilityId": "7f533f57e21dbde4", "scanner": "scanner-primary", "fingerprint": "0c5403a76abace4c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-deprecated-classes.mjs"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2644034c718fb80d", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "714673743ff59cef", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-d6308e260b952f95", "level": "note", "message": {"text": "52 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "d6308e260b952f95", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "cf4ff9e956379a8c", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "57b699b2c139a7eb", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "d0efb605e7845e82", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-18fc45f42eff14ef", "level": "none", "message": {"text": "Commented-code block (9 lines) in next.config.mjs:20"}, "properties": {"repobilityId": "c09c3eaa54e73d59", "scanner": "scanner-primary", "fingerprint": "18fc45f42eff14ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f42aa272c55e1dea", "level": "none", "message": {"text": "Commented-code block (5 lines) in jest.config.ts:15"}, "properties": {"repobilityId": "ed62c8b0624293fe", "scanner": "scanner-primary", "fingerprint": "f42aa272c55e1dea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-006e9371469bc2fa", "level": "none", "message": {"text": "Commented-code block (7 lines) in eslint.config.js:81"}, "properties": {"repobilityId": "acf79a4f9b973f7c", "scanner": "scanner-primary", "fingerprint": "006e9371469bc2fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a0a82b247eb8045", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/views/hooks/useEntityCache.test.tsx:87"}, "properties": {"repobilityId": "b3b1b8f1e5b90fae", "scanner": "scanner-primary", "fingerprint": "2a0a82b247eb8045", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c33beb3c15827ce", "level": "none", "message": {"text": "Commented-code block (10 lines) in tests/unit/views/hooks/uiPreferencesPrune.test.ts:187"}, "properties": {"repobilityId": "58909c1667d3a962", "scanner": "scanner-primary", "fingerprint": "3c33beb3c15827ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-340828d8efa0f467", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/views/hooks/useOpenDesktopApp.test.tsx:117"}, "properties": {"repobilityId": "8277c5ff6b0cf54f", "scanner": "scanner-primary", "fingerprint": "340828d8efa0f467", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6223f34e33dfc74c", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/views/hooks/useDiscordVoiceState.test.tsx:276"}, "properties": {"repobilityId": "94ba24b078ee3c1a", "scanner": "scanner-primary", "fingerprint": "6223f34e33dfc74c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cd919acf0e18f91", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/views/hooks/useDockPreferences.test.tsx:127"}, "properties": {"repobilityId": "81103851a4d43376", "scanner": "scanner-primary", "fingerprint": "9cd919acf0e18f91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d908fa991efc68ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/views/hooks/homescreenLayoutPolicy.test.ts:331"}, "properties": {"repobilityId": "0df729419ee7df65", "scanner": "scanner-primary", "fingerprint": "d908fa991efc68ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-781d85f5dad9ccac", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/views/components/templates/Shell/ShellHomeScreen.test.tsx:26"}, "properties": {"repobilityId": "d866aea61ae6a045", "scanner": "scanner-primary", "fingerprint": "781d85f5dad9ccac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07c6a0dd43625820", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/views/components/templates/Shell/desktop-apps/extracted-apps.test.tsx:25"}, "properties": {"repobilityId": "a5615021e12fcf4d", "scanner": "scanner-primary", "fingerprint": "07c6a0dd43625820", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf64073f22981b92", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/views/components/organisms/windows/FloatingWindow.iframe.test.tsx:154"}, "properties": {"repobilityId": "ebdbe1f49edb9ffb", "scanner": "scanner-primary", "fingerprint": "cf64073f22981b92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-068d5ad9300f42e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/views/components/organisms/shell/CfgKickoffLauncher.test.tsx:46"}, "properties": {"repobilityId": "96425ac0447730f1", "scanner": "scanner-primary", "fingerprint": "068d5ad9300f42e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61fff348a8427baf", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/unit/views/components/organisms/persona/CalendarPill.test.tsx:138"}, "properties": {"repobilityId": "64115e4b96f63537", "scanner": "scanner-primary", "fingerprint": "61fff348a8427baf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53a53761b4978aab", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/views/components/organisms/persona/CalendarPill.live-events.test.tsx:154"}, "properties": {"repobilityId": "e62a054b4d2aad99", "scanner": "scanner-primary", "fingerprint": "53a53761b4978aab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6956dfae12b873ee", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/unit/views/components/organisms/persona/WalletPill.test.tsx:37"}, "properties": {"repobilityId": "5a279b60bd006fe0", "scanner": "scanner-primary", "fingerprint": "6956dfae12b873ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22ede8838e4f1f98", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/config/jest.setup.ts:9"}, "properties": {"repobilityId": "db585af5e6c02a5a", "scanner": "scanner-primary", "fingerprint": "22ede8838e4f1f98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f8a2c40e589896d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/proxy.ts:193"}, "properties": {"repobilityId": "40fbfeb4d97e8973", "scanner": "scanner-primary", "fingerprint": "8f8a2c40e589896d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bac91c225596b2bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/clients/browser/api-fetch.ts:36"}, "properties": {"repobilityId": "c668d21c9a9df4ce", "scanner": "scanner-primary", "fingerprint": "bac91c225596b2bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8074b8120237dc4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/api-fetch.ts:2"}, "properties": {"repobilityId": "e331fd3eba1dbcee", "scanner": "scanner-primary", "fingerprint": "e8074b8120237dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de00a893251c7b08", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/auth-fetch.tsx:7"}, "properties": {"repobilityId": "1dcffbd6fd27d287", "scanner": "scanner-primary", "fingerprint": "de00a893251c7b08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-05ff98f79404315f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/vtt-companion.ts:52"}, "properties": {"repobilityId": "5955ece2de4f265c", "scanner": "scanner-primary", "fingerprint": "05ff98f79404315f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00ef8a80b31fa8a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/cypher-tools/client.ts:28"}, "properties": {"repobilityId": "cdd94177c8d7a96f", "scanner": "scanner-primary", "fingerprint": "00ef8a80b31fa8a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7043b0dc16184224", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/core/client.ts:5"}, "properties": {"repobilityId": "fca58bb135be0c35", "scanner": "scanner-primary", "fingerprint": "7043b0dc16184224", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-964c803588368370", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/clients/browser/ddb/client.ts:30"}, "properties": {"repobilityId": "2e010e3be281e534", "scanner": "scanner-primary", "fingerprint": "964c803588368370", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-263a5f3d5c81847e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/global-error.tsx:15"}, "properties": {"repobilityId": "cf7e922d0c08202c", "scanner": "scanner-primary", "fingerprint": "263a5f3d5c81847e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58a770a12f1487d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/apps/(core)/layout.tsx:64"}, "properties": {"repobilityId": "fd92bfc2956dd687", "scanner": "scanner-primary", "fingerprint": "58a770a12f1487d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66bca73af7ef217a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/apps/(core)/app-manager/page.tsx:66"}, "properties": {"repobilityId": "9d987bb80c974917", "scanner": "scanner-primary", "fingerprint": "66bca73af7ef217a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb37cf27831ac81b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/apps/(core)/campaign-manager/[id]/layout.tsx:52"}, "properties": {"repobilityId": "f0fd05d4e2a865eb", "scanner": "scanner-primary", "fingerprint": "eb37cf27831ac81b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cb525407ea9f7dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/apps/(core)/campaign-manager/[id]/parties/[partyId]/layout.tsx:44"}, "properties": {"repobilityId": "29fc04aced8373cb", "scanner": "scanner-primary", "fingerprint": "9cb525407ea9f7dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a820c2984563411e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/compendium-manager/new/page.tsx:47"}, "properties": {"repobilityId": "bad4eb08f4ad5077", "scanner": "scanner-primary", "fingerprint": "a820c2984563411e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c07e5df74f3f8b8f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/apps/(core)/admin-dashboard/api/users/[id]/coins/route.ts:38"}, "properties": {"repobilityId": "3e6166a585206e03", "scanner": "scanner-primary", "fingerprint": "c07e5df74f3f8b8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58a4a3453e1d3668", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:96"}, "properties": {"repobilityId": "54cf2e9a20095789", "scanner": "scanner-primary", "fingerprint": "58a4a3453e1d3668", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0179f2e84a0838f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:49"}, "properties": {"repobilityId": "f01aedd96f3d3c24", "scanner": "scanner-primary", "fingerprint": "c0179f2e84a0838f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8261f4bb6d9dd5f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:76"}, "properties": {"repobilityId": "a2b14fbfa85ff7d0", "scanner": "scanner-primary", "fingerprint": "8261f4bb6d9dd5f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2204fbe6fcbb2eb5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:140"}, "properties": {"repobilityId": "bd2f12266a8d3b93", "scanner": "scanner-primary", "fingerprint": "2204fbe6fcbb2eb5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3f9c758b344c352b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIntegrationTab.tsx:71"}, "properties": {"repobilityId": "1035d32ab96f0d32", "scanner": "scanner-primary", "fingerprint": "3f9c758b344c352b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8f81cf271a58c87", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:192"}, "properties": {"repobilityId": "cc76d2aa063d2f31", "scanner": "scanner-primary", "fingerprint": "d8f81cf271a58c87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-84d3fa9238b527f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/apps/(webserver)/server-manager/page.tsx:47"}, "properties": {"repobilityId": "8b785a1d8dbfd3a4", "scanner": "scanner-primary", "fingerprint": "84d3fa9238b527f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-817abd10617a6f83", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/apps/(webserver)/server-manager/[id]/layout.tsx:55"}, "properties": {"repobilityId": "b38a661a881153d7", "scanner": "scanner-primary", "fingerprint": "817abd10617a6f83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1116b56bfbd2d9de", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/layout.tsx:79"}, "properties": {"repobilityId": "fef6ea1865fd8349", "scanner": "scanner-primary", "fingerprint": "1116b56bfbd2d9de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66aa23104bcdde85", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/page.tsx:45"}, "properties": {"repobilityId": "8d50cf0db951ad77", "scanner": "scanner-primary", "fingerprint": "66aa23104bcdde85", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-194e5827423ccc10", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:102"}, "properties": {"repobilityId": "42d4cb64c479c43d", "scanner": "scanner-primary", "fingerprint": "194e5827423ccc10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e19fdb8ea8b5fa1b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:122"}, "properties": {"repobilityId": "bbfae162c05d3b41", "scanner": "scanner-primary", "fingerprint": "e19fdb8ea8b5fa1b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-25e85d73a8c9d73d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/discord/resesh/layout.tsx:28"}, "properties": {"repobilityId": "2975cefa34e777fe", "scanner": "scanner-primary", "fingerprint": "25e85d73a8c9d73d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9542da6a73b97c67", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/utils/server/server-fetch.ts:44"}, "properties": {"repobilityId": "488b06239eacc983", "scanner": "scanner-primary", "fingerprint": "9542da6a73b97c67", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-767f87a7cea2bdc0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/hooks/useUiPreferences.ts:291"}, "properties": {"repobilityId": "2023615b3c328d3a", "scanner": "scanner-primary", "fingerprint": "767f87a7cea2bdc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-111c34669d1340bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/hooks/useExternalLauncher.ts:65"}, "properties": {"repobilityId": "d442427b2e2e290b", "scanner": "scanner-primary", "fingerprint": "111c34669d1340bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c27d00266f0b63da", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/hooks/useDiscordVoiceState.ts:329"}, "properties": {"repobilityId": "9d853887a0412576", "scanner": "scanner-primary", "fingerprint": "c27d00266f0b63da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-589be2a78b290ef2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/hooks/useEntityCache.ts:121"}, "properties": {"repobilityId": "38f4854a08822033", "scanner": "scanner-primary", "fingerprint": "589be2a78b290ef2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62bee699bae1c7d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/hooks/useDisplayIdentity.ts:88"}, "properties": {"repobilityId": "b03d86ff9562d080", "scanner": "scanner-primary", "fingerprint": "62bee699bae1c7d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-31dd50fcb5fb3d98", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/hooks/useDockPreferences.ts:37"}, "properties": {"repobilityId": "1be184661cd8f6ac", "scanner": "scanner-primary", "fingerprint": "31dd50fcb5fb3d98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7864e804786e6aaf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/hooks/defaultDockPins.ts:20"}, "properties": {"repobilityId": "581d132a22d90f1c", "scanner": "scanner-primary", "fingerprint": "7864e804786e6aaf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-282d5f4b8e45bf80", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/hooks/uiPreferencesPrune.ts:141"}, "properties": {"repobilityId": "13a3e7c4d053dab0", "scanner": "scanner-primary", "fingerprint": "282d5f4b8e45bf80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7eec3d42bb9fc346", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/hooks/useHomescreenLayout.ts:14"}, "properties": {"repobilityId": "604ef8e8c8a59410", "scanner": "scanner-primary", "fingerprint": "7eec3d42bb9fc346", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7e6600c1a9e5c18", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/discord-activity/resesh/ReSeshActivityClient.tsx:73"}, "properties": {"repobilityId": "38d5e679195e4d83", "scanner": "scanner-primary", "fingerprint": "b7e6600c1a9e5c18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc1658ed0107813f", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/discord-activity/discord/ActivityWindowRestorer.tsx:80"}, "properties": {"repobilityId": "a444b1394288c176", "scanner": "scanner-primary", "fingerprint": "dc1658ed0107813f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-316be0ca4ea94999", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/discord-activity/discord/ActivityHubView.tsx:179"}, "properties": {"repobilityId": "c3911cbf80ac30ef", "scanner": "scanner-primary", "fingerprint": "316be0ca4ea94999", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8daed318485b7803", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/discord-activity/discord/ActivityShell.tsx:81"}, "properties": {"repobilityId": "81a83e7d6f20171d", "scanner": "scanner-primary", "fingerprint": "8daed318485b7803", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5009787c404ac3f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/discord-activity/discord/useActivityDockApps.tsx:34"}, "properties": {"repobilityId": "771f54e06a71535e", "scanner": "scanner-primary", "fingerprint": "a5009787c404ac3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4ab9ba2da1bcdf0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/ChannelSetupView.tsx:59"}, "properties": {"repobilityId": "d675a0392aaae775", "scanner": "scanner-primary", "fingerprint": "c4ab9ba2da1bcdf0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a03028dcae0fd615", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/discord-activity/discord/DiscordActivityClient.tsx:229"}, "properties": {"repobilityId": "55eccc1de20bf3c8", "scanner": "scanner-primary", "fingerprint": "a03028dcae0fd615", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ec3736c48d693ba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/DiscordActivityClient.tsx:182"}, "properties": {"repobilityId": "a7a271a82f49e725", "scanner": "scanner-primary", "fingerprint": "7ec3736c48d693ba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b7c4d44c86a010d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/discord/LoungeActivityView.tsx:81"}, "properties": {"repobilityId": "40546f90df43ae81", "scanner": "scanner-primary", "fingerprint": "0b7c4d44c86a010d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d797046248091491", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/discord-activity/discord/ActivityLauncherView.tsx:72"}, "properties": {"repobilityId": "6904e5d8d0feda50", "scanner": "scanner-primary", "fingerprint": "d797046248091491", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48785b7c51026649", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/discord-activity/discord/ActivityDock.tsx:65"}, "properties": {"repobilityId": "d12ed7388fd64734", "scanner": "scanner-primary", "fingerprint": "48785b7c51026649", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b8cad6e09de1759", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/discord-activity/discord/DiscordLinkedView.tsx:139"}, "properties": {"repobilityId": "1f0376cf5605b22b", "scanner": "scanner-primary", "fingerprint": "6b8cad6e09de1759", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ee43be637b1c7ca", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/discord-activity/campaigns/SkillControlPanel.tsx:76"}, "properties": {"repobilityId": "d90bb0158afa7166", "scanner": "scanner-primary", "fingerprint": "3ee43be637b1c7ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3501330a102ef1ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:57"}, "properties": {"repobilityId": "def41868a66c4cd9", "scanner": "scanner-primary", "fingerprint": "3501330a102ef1ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-28cf0813a86e15e4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/templates/Shell/ShellHomeScreen.tsx:99"}, "properties": {"repobilityId": "f698772a74f889d4", "scanner": "scanner-primary", "fingerprint": "28cf0813a86e15e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b44903593fb15791", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/templates/Shell/ShellDesktop.tsx:92"}, "properties": {"repobilityId": "a8ef72d5bb9f89f7", "scanner": "scanner-primary", "fingerprint": "b44903593fb15791", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6e72c75db785037", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/templates/Shell/SurfaceAwareExternalLinkOpener.tsx:62"}, "properties": {"repobilityId": "8308bdb6236c427f", "scanner": "scanner-primary", "fingerprint": "b6e72c75db785037", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb980cfe5a1fb25b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/templates/Shell/ShellHomeScreenFolders.tsx:194"}, "properties": {"repobilityId": "5183e65f1f6066ae", "scanner": "scanner-primary", "fingerprint": "eb980cfe5a1fb25b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aaeced2234f7c1b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/templates/Shell/window-manager/url-sync.ts:44"}, "properties": {"repobilityId": "756ad373783e07c7", "scanner": "scanner-primary", "fingerprint": "6aaeced2234f7c1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24c339180c4a32ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/templates/Shell/window-manager/WindowManagerContext.tsx:337"}, "properties": {"repobilityId": "125c23426bd3ca7f", "scanner": "scanner-primary", "fingerprint": "24c339180c4a32ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d76255374723f213", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/templates/Shell/window-manager/dockToggle.ts:43"}, "properties": {"repobilityId": "d4ad7a8a54025403", "scanner": "scanner-primary", "fingerprint": "d76255374723f213", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ff346c925092e57", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/templates/Shell/window-manager/clampToViewport.ts:32"}, "properties": {"repobilityId": "374a7cfa1c73a752", "scanner": "scanner-primary", "fingerprint": "1ff346c925092e57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24c21648055dd216", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/DesktopAppRegistry.tsx:107"}, "properties": {"repobilityId": "e9ed20edfa3a2a93", "scanner": "scanner-primary", "fingerprint": "24c21648055dd216", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0922aaecd30bd624", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/DesktopAppsHost.tsx:72"}, "properties": {"repobilityId": "fa073014fc9dcee2", "scanner": "scanner-primary", "fingerprint": "0922aaecd30bd624", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-799a4132fd0d559e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/templates/Shell/desktop-apps/launcherOrdering.ts:59"}, "properties": {"repobilityId": "7ea7f541230b0212", "scanner": "scanner-primary", "fingerprint": "799a4132fd0d559e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbcd7584c6254a11", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/molecules/FileMenu.tsx:188"}, "properties": {"repobilityId": "22e96ba26d0e603b", "scanner": "scanner-primary", "fingerprint": "cbcd7584c6254a11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc78c93bb8c68497", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/molecules/CoreAppChrome.tsx:66"}, "properties": {"repobilityId": "7097e94d08d77dc4", "scanner": "scanner-primary", "fingerprint": "bc78c93bb8c68497", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe884fb3c87c9008", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/views/components/organisms/PlayerLayoutShell.tsx:97"}, "properties": {"repobilityId": "c45c22bb94581e49", "scanner": "scanner-primary", "fingerprint": "fe884fb3c87c9008", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ccdca110d803e0b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/DockAppsSync.tsx:195"}, "properties": {"repobilityId": "9efd2c2ee0e47737", "scanner": "scanner-primary", "fingerprint": "4ccdca110d803e0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcd0ff8c493aa9f2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/windows/WindowChrome.tsx:271"}, "properties": {"repobilityId": "8206a72a107322d1", "scanner": "scanner-primary", "fingerprint": "fcd0ff8c493aa9f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9c07d790716c692", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/windows/FloatingWindow.tsx:236"}, "properties": {"repobilityId": "691afd9f5b534411", "scanner": "scanner-primary", "fingerprint": "d9c07d790716c692", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a44cc3347959a188", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/views/components/organisms/resesh/ReseshPermissionsChecklist.tsx:146"}, "properties": {"repobilityId": "31b6f588c3120c95", "scanner": "scanner-primary", "fingerprint": "a44cc3347959a188", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37d925b9b5601ba0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshTabbedChannelView.tsx:129"}, "properties": {"repobilityId": "345b7922d201a195", "scanner": "scanner-primary", "fingerprint": "37d925b9b5601ba0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c7438b272b9ae5b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/organisms/resesh/ReseshConsentRow.tsx:82"}, "properties": {"repobilityId": "52a2b295c35d5f36", "scanner": "scanner-primary", "fingerprint": "8c7438b272b9ae5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f2bb03edd6cefb6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/resesh/InstallReSeshBanner.tsx:36"}, "properties": {"repobilityId": "41436155a6140b43", "scanner": "scanner-primary", "fingerprint": "1f2bb03edd6cefb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b4a00a72d7a0cc7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/resesh/ReseshRemoteRecorder.tsx:211"}, "properties": {"repobilityId": "3e617918d47427b9", "scanner": "scanner-primary", "fingerprint": "7b4a00a72d7a0cc7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-044a295991928909", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/resesh/ReSeshAppView.tsx:254"}, "properties": {"repobilityId": "d1985f40535dbdf7", "scanner": "scanner-primary", "fingerprint": "044a295991928909", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-368a6c3c7d0ed95e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshRecordingPanel.tsx:28"}, "properties": {"repobilityId": "2ba012b7eeace96f", "scanner": "scanner-primary", "fingerprint": "368a6c3c7d0ed95e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3955460821ca4a1f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/resesh/ReseshChannelSettingsForm.tsx:179"}, "properties": {"repobilityId": "1f9b537571d90e27", "scanner": "scanner-primary", "fingerprint": "3955460821ca4a1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62b1ed33e64b19a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/resesh/ReseshChannelList.tsx:169"}, "properties": {"repobilityId": "36be3eed15a35f40", "scanner": "scanner-primary", "fingerprint": "62b1ed33e64b19a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d657a9dc8be624a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/resesh/ReseshCaptions.tsx:23"}, "properties": {"repobilityId": "508f38868b1106bf", "scanner": "scanner-primary", "fingerprint": "4d657a9dc8be624a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40a9047f0cf1f8a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/dashboard/PhasePulseOffline.tsx:26"}, "properties": {"repobilityId": "a8c1799d411ed89e", "scanner": "scanner-primary", "fingerprint": "40a9047f0cf1f8a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0518c8eb7eec86e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/launcher/LauncherShell.tsx:67"}, "properties": {"repobilityId": "3163f69d1dd7ad2d", "scanner": "scanner-primary", "fingerprint": "0518c8eb7eec86e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57547ebe5911a951", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/access/AccessPanel.tsx:270"}, "properties": {"repobilityId": "9e471cac44dd03df", "scanner": "scanner-primary", "fingerprint": "57547ebe5911a951", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eb502fa2b8b708b8", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/organisms/account/DiscordIntegrationClient.tsx:267"}, "properties": {"repobilityId": "01b4bb20f855d7ab", "scanner": "scanner-primary", "fingerprint": "eb502fa2b8b708b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0d89b03273df3e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/FoundryPlatformManager.tsx:301"}, "properties": {"repobilityId": "95741b3c1e268866", "scanner": "scanner-primary", "fingerprint": "e0d89b03273df3e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7ba7e48719b4390a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/UserManageWalletSection.tsx:76"}, "properties": {"repobilityId": "f3713a336fc3f3c7", "scanner": "scanner-primary", "fingerprint": "7ba7e48719b4390a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ccdffa382ea6f307", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/SystemsPageContent.tsx:54"}, "properties": {"repobilityId": "13ce2b1205b94b13", "scanner": "scanner-primary", "fingerprint": "ccdffa382ea6f307", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1832b4d7a36d576c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/UsersManagementPageContent.tsx:81"}, "properties": {"repobilityId": "69abdda173573918", "scanner": "scanner-primary", "fingerprint": "1832b4d7a36d576c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9ce240c9958a813", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/admin/CoinsPageContent.tsx:82"}, "properties": {"repobilityId": "7f68b4d1426bddac", "scanner": "scanner-primary", "fingerprint": "c9ce240c9958a813", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b349a7c3c3ad502c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/admin/systems/SystemsTable.tsx:258"}, "properties": {"repobilityId": "2eae0050860bdfa6", "scanner": "scanner-primary", "fingerprint": "b349a7c3c3ad502c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6a221aa3a7dc0d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:388"}, "properties": {"repobilityId": "e463a769b7473b3b", "scanner": "scanner-primary", "fingerprint": "f6a221aa3a7dc0d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd7a46974a751bfc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/vtt/AppVttOverlay.tsx:64"}, "properties": {"repobilityId": "f97e80bbce93ee92", "scanner": "scanner-primary", "fingerprint": "dd7a46974a751bfc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09765f817db72ef3", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/organisms/vtt/AppVttContext.tsx:133"}, "properties": {"repobilityId": "2c9b33a35ecd5479", "scanner": "scanner-primary", "fingerprint": "09765f817db72ef3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ded8600f5fc1bd8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/vtt/AppVttContext.tsx:192"}, "properties": {"repobilityId": "dbeff600a20a7d07", "scanner": "scanner-primary", "fingerprint": "ded8600f5fc1bd8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2630a01bfefd9977", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:160"}, "properties": {"repobilityId": "1971a148bab4931c", "scanner": "scanner-primary", "fingerprint": "2630a01bfefd9977", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-659804d36f646551", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/chat/ChatSettingsPanel.tsx:152"}, "properties": {"repobilityId": "d1af7b02c0151481", "scanner": "scanner-primary", "fingerprint": "659804d36f646551", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bd99afc28fa16d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/foundry/FoundryServerLauncher.tsx:332"}, "properties": {"repobilityId": "ce262cd61f72ed33", "scanner": "scanner-primary", "fingerprint": "3bd99afc28fa16d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72e749c3e3dc8e91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/foundry/FoundryServerLauncher.tsx:267"}, "properties": {"repobilityId": "687ed4dfe71f5f6c", "scanner": "scanner-primary", "fingerprint": "72e749c3e3dc8e91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8940afe53d41bf2b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/organisms/dock/CoreDock/CoreDockCenterZone.tsx:115"}, "properties": {"repobilityId": "15a12c6b27cf0489", "scanner": "scanner-primary", "fingerprint": "8940afe53d41bf2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7515ccf1f348985a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/dock/CoreDock/AppExternalVttSync.tsx:64"}, "properties": {"repobilityId": "9c92fe40de06807a", "scanner": "scanner-primary", "fingerprint": "7515ccf1f348985a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f56982fb0d739a6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/dock/CoreDock/CoreDock.tsx:103"}, "properties": {"repobilityId": "64253c8130273ddf", "scanner": "scanner-primary", "fingerprint": "0f56982fb0d739a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99e63137afb44fa4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/wallet/BalancesDropdown.tsx:103"}, "properties": {"repobilityId": "c89ea78ac3d15981", "scanner": "scanner-primary", "fingerprint": "99e63137afb44fa4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bf064faec65c71e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/wallet/TipHistoryPanel.tsx:65"}, "properties": {"repobilityId": "330834dd51478980", "scanner": "scanner-primary", "fingerprint": "8bf064faec65c71e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7175028c232d2262", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/catalog/EntityCatalog.tsx:15"}, "properties": {"repobilityId": "c951485121eab258", "scanner": "scanner-primary", "fingerprint": "7175028c232d2262", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-78bb29c8a6d38a22", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/collaboration/CollaborationSessionsPanel.tsx:214"}, "properties": {"repobilityId": "2843f78153acec1a", "scanner": "scanner-primary", "fingerprint": "78bb29c8a6d38a22", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d50f51a458aa0d6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/fermi/FermiLauncherCard.tsx:53"}, "properties": {"repobilityId": "67bb0f2329e2ae0a", "scanner": "scanner-primary", "fingerprint": "d50f51a458aa0d6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6aa23a1e887e4243", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/apps/GameAppManagerMenu.tsx:19"}, "properties": {"repobilityId": "0643cc17e443ff99", "scanner": "scanner-primary", "fingerprint": "6aa23a1e887e4243", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b313c5973bef358c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/apps/AppCatalogTile.tsx:183"}, "properties": {"repobilityId": "4e7da5c81351a94c", "scanner": "scanner-primary", "fingerprint": "b313c5973bef358c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7e34ce18248a24f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/calendar/EventEditModal.tsx:674"}, "properties": {"repobilityId": "3ae0f0d612ac3776", "scanner": "scanner-primary", "fingerprint": "c7e34ce18248a24f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d4fb2e54fc10cc5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/calendar/CalendarPageView.tsx:289"}, "properties": {"repobilityId": "8aa50ec8d26b945c", "scanner": "scanner-primary", "fingerprint": "9d4fb2e54fc10cc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-699f2d91d3bb50bb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/calendar/MiniMonthGrid.tsx:29"}, "properties": {"repobilityId": "7036fe27dbd4f06f", "scanner": "scanner-primary", "fingerprint": "699f2d91d3bb50bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3b66486659c74d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/shell/kickoffDragPolicy.ts:127"}, "properties": {"repobilityId": "618744e797c963a0", "scanner": "scanner-primary", "fingerprint": "a3b66486659c74d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58ad47cf9a00bc2b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/shell/CfgKickoffLauncher.tsx:146"}, "properties": {"repobilityId": "4b8390e633334dda", "scanner": "scanner-primary", "fingerprint": "58ad47cf9a00bc2b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c36f75f772f4569e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/factorio/FactorioServerLauncher.tsx:109"}, "properties": {"repobilityId": "b96e33bbfb7f6948", "scanner": "scanner-primary", "fingerprint": "c36f75f772f4569e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34ec6b0daed25c0d", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/views/components/organisms/discord/DiscordServerRail.tsx:264"}, "properties": {"repobilityId": "8ad8434294945a49", "scanner": "scanner-primary", "fingerprint": "34ec6b0daed25c0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a56808c744eae2e2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/persona/WalletPill.tsx:80"}, "properties": {"repobilityId": "904ec22b00274a41", "scanner": "scanner-primary", "fingerprint": "a56808c744eae2e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07fd713d0665b845", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/persona/calendar-recurrence.ts:136"}, "properties": {"repobilityId": "6753abab39be745c", "scanner": "scanner-primary", "fingerprint": "07fd713d0665b845", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e5b5226737aa293", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/persona/CalendarPill.tsx:173"}, "properties": {"repobilityId": "2a9aa686f35363ee", "scanner": "scanner-primary", "fingerprint": "2e5b5226737aa293", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d4a4a90f6bdc4d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/server-manager/ServerManagerView.tsx:171"}, "properties": {"repobilityId": "5479dfe548cf6c40", "scanner": "scanner-primary", "fingerprint": "9d4a4a90f6bdc4d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b13191ffb9c83778", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/server-manager/CreateServerModal.tsx:338"}, "properties": {"repobilityId": "64276888b951f2a7", "scanner": "scanner-primary", "fingerprint": "b13191ffb9c83778", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ac8637e72c3d962", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/asset-packs/AssetPackUpload.tsx:11"}, "properties": {"repobilityId": "9318e02409983e39", "scanner": "scanner-primary", "fingerprint": "5ac8637e72c3d962", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a9eeda76b4e52d67", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/organisms/terraria/TerrariaServerLauncher.tsx:141"}, "properties": {"repobilityId": "e6e4a336d1e558f2", "scanner": "scanner-primary", "fingerprint": "a9eeda76b4e52d67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d31945bb4e4a41e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CharactersPage.tsx:334"}, "properties": {"repobilityId": "d8efe95d9957cc5d", "scanner": "scanner-primary", "fingerprint": "d31945bb4e4a41e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0e9d6c0b879d6e2b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignVttConnections.tsx:29"}, "properties": {"repobilityId": "e1bc8d98f0ef9908", "scanner": "scanner-primary", "fingerprint": "0e9d6c0b879d6e2b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54a0e41143c70054", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfigWidgets.tsx:394"}, "properties": {"repobilityId": "8d151a4692f9226a", "scanner": "scanner-primary", "fingerprint": "54a0e41143c70054", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e51046d948c3d57", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfigSettings.tsx:85"}, "properties": {"repobilityId": "d61ac409bd483048", "scanner": "scanner-primary", "fingerprint": "6e51046d948c3d57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-429ec059b7554f3f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignSidebar.tsx:125"}, "properties": {"repobilityId": "7829481475d1c06b", "scanner": "scanner-primary", "fingerprint": "429ec059b7554f3f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a7706e21a2da8101", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:161"}, "properties": {"repobilityId": "237abb4993cb4d69", "scanner": "scanner-primary", "fingerprint": "a7706e21a2da8101", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc484fd59483d2e9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:178"}, "properties": {"repobilityId": "c7328868553414d1", "scanner": "scanner-primary", "fingerprint": "bc484fd59483d2e9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f41b3feda0abc3e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/SessionControlWidget.tsx:398"}, "properties": {"repobilityId": "79847ff6f8c1a165", "scanner": "scanner-primary", "fingerprint": "6f41b3feda0abc3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e381776974845828", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:179"}, "properties": {"repobilityId": "302148c0c2dffb65", "scanner": "scanner-primary", "fingerprint": "e381776974845828", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9258b7214984a27", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyChatSettings.tsx:159"}, "properties": {"repobilityId": "e7e000c7b1ba1d4e", "scanner": "scanner-primary", "fingerprint": "d9258b7214984a27", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5e1131a71d0e636", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:110"}, "properties": {"repobilityId": "327cd0cad51799d3", "scanner": "scanner-primary", "fingerprint": "c5e1131a71d0e636", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-010f160b248cd7a6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:122"}, "properties": {"repobilityId": "6b92183d8a0ff70d", "scanner": "scanner-primary", "fingerprint": "010f160b248cd7a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59c25d37ade2223e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyNav.tsx:25"}, "properties": {"repobilityId": "b5524f58ab5e0438", "scanner": "scanner-primary", "fingerprint": "59c25d37ade2223e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4115749b633d190", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:141"}, "properties": {"repobilityId": "66b22edd5e333eeb", "scanner": "scanner-primary", "fingerprint": "e4115749b633d190", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bea4e13de866a9d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:98"}, "properties": {"repobilityId": "e23e1817c3c93072", "scanner": "scanner-primary", "fingerprint": "bea4e13de866a9d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-219bb927b0824064", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/views/components/organisms/campaigns/CampaignVttLauncher.tsx:150"}, "properties": {"repobilityId": "8fd05adc08c7305f", "scanner": "scanner-primary", "fingerprint": "219bb927b0824064", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6726b6eb1c584e51", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:6"}, "properties": {"repobilityId": "0740b53522e4d0e1", "scanner": "scanner-primary", "fingerprint": "6726b6eb1c584e51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2286f5d205a7e8af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartiesPage.tsx:310"}, "properties": {"repobilityId": "540d8b023a67dc9f", "scanner": "scanner-primary", "fingerprint": "2286f5d205a7e8af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b58f644369099950", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignChatSettings.tsx:151"}, "properties": {"repobilityId": "1965070a892af4f3", "scanner": "scanner-primary", "fingerprint": "b58f644369099950", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-586eabd291bc5cf0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignChatSettings.tsx:206"}, "properties": {"repobilityId": "331949ce1e8dd905", "scanner": "scanner-primary", "fingerprint": "586eabd291bc5cf0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1340b6f8ad7478d5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartySheetsPanel.tsx:63"}, "properties": {"repobilityId": "0af4eb29e27d8625", "scanner": "scanner-primary", "fingerprint": "1340b6f8ad7478d5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48dcaf04ee3333ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyToolsPanel.tsx:36"}, "properties": {"repobilityId": "5c316551b69675c2", "scanner": "scanner-primary", "fingerprint": "48dcaf04ee3333ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9d5cd2353be02471", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/PartyVttPanel.tsx:50"}, "properties": {"repobilityId": "e29c7f01c5c430c6", "scanner": "scanner-primary", "fingerprint": "9d5cd2353be02471", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c6cdc94930907127", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartySettingsPage.tsx:71"}, "properties": {"repobilityId": "24395630749ae315", "scanner": "scanner-primary", "fingerprint": "c6cdc94930907127", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-442ded6b19e6fa44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CharacterSheetProvider.tsx:105"}, "properties": {"repobilityId": "baa1e0af2fdae79a", "scanner": "scanner-primary", "fingerprint": "442ded6b19e6fa44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eb182a61e8ee7e8a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/PartyDiscordSection.tsx:268"}, "properties": {"repobilityId": "a5758cbf52c36909", "scanner": "scanner-primary", "fingerprint": "eb182a61e8ee7e8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a174eaa35375454", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:20"}, "properties": {"repobilityId": "059a5f79c25b5a84", "scanner": "scanner-primary", "fingerprint": "7a174eaa35375454", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4e73c7aab826b59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:405"}, "properties": {"repobilityId": "86bcdfbe4c3a401a", "scanner": "scanner-primary", "fingerprint": "e4e73c7aab826b59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ccb232f8ab38760", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/views/components/organisms/campaigns/create-wizard/CampaignCreateWizard.tsx:42"}, "properties": {"repobilityId": "593c4ccbf32a4c56", "scanner": "scanner-primary", "fingerprint": "1ccb232f8ab38760", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8081d521f2fd92f1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/atoms/SignInButtons.tsx:21"}, "properties": {"repobilityId": "dff1ea2c477cf4ad", "scanner": "scanner-primary", "fingerprint": "8081d521f2fd92f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a7304dd6728bc31", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/views/components/atoms/LocalTime.tsx:33"}, "properties": {"repobilityId": "08579a5eff8b318d", "scanner": "scanner-primary", "fingerprint": "6a7304dd6728bc31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d0da432180499f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireClient.tsx:52"}, "properties": {"repobilityId": "d51c3074bf7488e4", "scanner": "scanner-primary", "fingerprint": "0d0da432180499f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cbc2a1b6077bc679", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireLinkedView.tsx:53"}, "properties": {"repobilityId": "9e4ed18a6a48ebdf", "scanner": "scanner-primary", "fingerprint": "cbc2a1b6077bc679", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f6bb29a037e7da90", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/views/talespire/TalespireCampaignPicker.tsx:80"}, "properties": {"repobilityId": "2d9fd884ec72dacf", "scanner": "scanner-primary", "fingerprint": "f6bb29a037e7da90", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e97a7ec5dfb8399d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/constants/local-installed-apps.ts:227"}, "properties": {"repobilityId": "465ef294f5649536", "scanner": "scanner-primary", "fingerprint": "e97a7ec5dfb8399d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d67ef7e8f03c2182", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/server/discord/discord-service.ts:36"}, "properties": {"repobilityId": "2b337f1b30bb06c6", "scanner": "scanner-primary", "fingerprint": "d67ef7e8f03c2182", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f57d1d9a220b1cd1", "level": "none", "message": {"text": "Commented-code block (5 lines) in stubs/elliptic/index.js:8"}, "properties": {"repobilityId": "265c19926a9fbf27", "scanner": "scanner-primary", "fingerprint": "f57d1d9a220b1cd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e297075fb960cebc", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/cypher-tools/proxy (src/clients/browser/cypher-tools/client.ts:28)"}, "properties": {"repobilityId": "533b118b43061234", "scanner": "scanner-primary", "fingerprint": "e297075fb960cebc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2cd4c7a70fed9c07", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/dndbeyond/proxy (src/clients/browser/ddb/client.ts:30)"}, "properties": {"repobilityId": "a979bfbb9ab93db3", "scanner": "scanner-primary", "fingerprint": "2cd4c7a70fed9c07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6adb896ad5609016", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/invites/${code} (src/app/invite/[code]/InviteAcceptView.tsx:41)"}, "properties": {"repobilityId": "9279e3464ceeef7a", "scanner": "scanner-primary", "fingerprint": "6adb896ad5609016", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9876416de7aa8dd2", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/invites/${code} (src/app/invite/[code]/InviteAcceptView.tsx:58)"}, "properties": {"repobilityId": "67110aa689ebd87b", "scanner": "scanner-primary", "fingerprint": "9876416de7aa8dd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4c908454d0266b8", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/app/apps/(core)/compendium-manager/new/page.tsx:47)"}, "properties": {"repobilityId": "aaf124f8258b7c63", "scanner": "scanner-primary", "fingerprint": "f4c908454d0266b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f643af60c517c35", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/compendium-sources/${sourceId}/key-terms (src/app/apps/(core)/admin-dashboard/compendium-sources/[id]/_components/KeyTermsEditor.tsx:41)"}, "properties": {"repobilityId": "f2b943c49a4cf8b6", "scanner": "scanner-primary", "fingerprint": "3f643af60c517c35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e112a5f8abc2bd0b", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:38)"}, "properties": {"repobilityId": "3019a42eb899d8ee", "scanner": "scanner-primary", "fingerprint": "e112a5f8abc2bd0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6fde86855c93de8", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${found.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/page.tsx:49)"}, "properties": {"repobilityId": "a817d7354eaf2e90", "scanner": "scanner-primary", "fingerprint": "f6fde86855c93de8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7f89cb0b89d52cc", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:65)"}, "properties": {"repobilityId": "704f308ff72b1480", "scanner": "scanner-primary", "fingerprint": "d7f89cb0b89d52cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de80d24490b70230", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${system.id}/sources/${sourceId} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:76)"}, "properties": {"repobilityId": "dfa9e13f478a8864", "scanner": "scanner-primary", "fingerprint": "de80d24490b70230", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5cb3beceab120380", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/parse-document (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/sources/[sourceId]/page.tsx:110)"}, "properties": {"repobilityId": "d3ac1d8ed5b541ba", "scanner": "scanner-primary", "fingerprint": "5cb3beceab120380", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef4ceb10910ec53a", "level": "error", "message": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SheetProvidersTab.tsx:51)"}, "properties": {"repobilityId": "0df0aad3f3a3e6a6", "scanner": "scanner-primary", "fingerprint": "ef4ceb10910ec53a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39995a1431a7d96b", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/sources (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SourcesTab.tsx:13)"}, "properties": {"repobilityId": "628b792f1e26a253", "scanner": "scanner-primary", "fingerprint": "39995a1431a7d96b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-870f08108f989280", "level": "error", "message": {"text": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${systemId}/sources/${s.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/SourcesTab.tsx:31)"}, "properties": {"repobilityId": "8f1faaaa61541ab7", "scanner": "scanner-primary", "fingerprint": "870f08108f989280", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03769ea5f3279a05", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/kb (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:46)"}, "properties": {"repobilityId": "9ab830258d56e485", "scanner": "scanner-primary", "fingerprint": "03769ea5f3279a05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bcbefd21069f5d6a", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/sources (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:47)"}, "properties": {"repobilityId": "7f4e0081111df7e8", "scanner": "scanner-primary", "fingerprint": "bcbefd21069f5d6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3daca63b0302975", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems/${systemId}/kb/${article.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:90)"}, "properties": {"repobilityId": "d7c8cae3578918b4", "scanner": "scanner-primary", "fingerprint": "e3daca63b0302975", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7deeb801da4bc49d", "level": "error", "message": {"text": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${systemId}/kb/${article.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:163)"}, "properties": {"repobilityId": "95057a8db634fc16", "scanner": "scanner-primary", "fingerprint": "7deeb801da4bc49d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-16020ef87bedaa22", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${systemId}/kb/embed (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KbTab.tsx:211)"}, "properties": {"repobilityId": "7cb22cd9fb0c0749", "scanner": "scanner-primary", "fingerprint": "16020ef87bedaa22", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d59e3fdc0726fade", "level": "error", "message": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIntegrationTab.tsx:71)"}, "properties": {"repobilityId": "1e3023c266f13942", "scanner": "scanner-primary", "fingerprint": "d59e3fdc0726fade", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-992fcf98f45b1b5e", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${system.id}/sync (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/VttIntegrationTab.tsx:128)"}, "properties": {"repobilityId": "875876663adef4fe", "scanner": "scanner-primary", "fingerprint": "992fcf98f45b1b5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a4b8a1796a048f7", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/systems (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:172)"}, "properties": {"repobilityId": "1fe2d0f04b612b3e", "scanner": "scanner-primary", "fingerprint": "2a4b8a1796a048f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abeca75afd87bdbc", "level": "error", "message": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/OverviewTab.tsx:192)"}, "properties": {"repobilityId": "19ecabd6223def33", "scanner": "scanner-primary", "fingerprint": "abeca75afd87bdbc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2c6f8cdcc62adef", "level": "error", "message": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/CompendiumTab.tsx:39)"}, "properties": {"repobilityId": "766c78ddb3a99204", "scanner": "scanner-primary", "fingerprint": "f2c6f8cdcc62adef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb3d0038ca91c236", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/game-systems/${system.id}/key-terms (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KeyTermsTab.tsx:46)"}, "properties": {"repobilityId": "8fccdc4365f28ca6", "scanner": "scanner-primary", "fingerprint": "cb3d0038ca91c236", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cde66c09fad10ceb", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/game-systems/${system.id}/key-terms/reset-to-defaults (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/KeyTermsTab.tsx:72)"}, "properties": {"repobilityId": "55c996b45c7196b1", "scanner": "scanner-primary", "fingerprint": "cde66c09fad10ceb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88ad102c0c0a33e3", "level": "error", "message": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/app/apps/(core)/admin-dashboard/systems/[systemSlug]/_components/CompendiumProvidersTab.tsx:42)"}, "properties": {"repobilityId": "0024f26a321a91e6", "scanner": "scanner-primary", "fingerprint": "88ad102c0c0a33e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4462a46f1f438f6e", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/subscribe (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:76)"}, "properties": {"repobilityId": "ee6af7eefc026485", "scanner": "scanner-primary", "fingerprint": "4462a46f1f438f6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f32774a66a7afb7", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/portal (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:95)"}, "properties": {"repobilityId": "6094f513fc639ae7", "scanner": "scanner-primary", "fingerprint": "1f32774a66a7afb7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-503047aa1ac8bb1e", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/compute/topup (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:112)"}, "properties": {"repobilityId": "8de92b484a50edff", "scanner": "scanner-primary", "fingerprint": "503047aa1ac8bb1e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46c94d371ca540b4", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/coins (src/app/apps/(core)/settings/wallet/SubscriptionClient.tsx:135)"}, "properties": {"repobilityId": "2d1242b90952b2a8", "scanner": "scanner-primary", "fingerprint": "46c94d371ca540b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02d6abf5baea55a9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/game-worlds/${encodeURIComponent(worldId)} (src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/sessions/NextSessionEditor.tsx:39)"}, "properties": {"repobilityId": "84852e38634b74a9", "scanner": "scanner-primary", "fingerprint": "02d6abf5baea55a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0dc7a9d494984e1c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:122)"}, "properties": {"repobilityId": "aa7cc183ae6be8e8", "scanner": "scanner-primary", "fingerprint": "0dc7a9d494984e1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-666837134da43204", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/game-worlds/${encodeURIComponent(world.id)} (src/app/apps/(webserver)/server-manager/[id]/worlds/[worldId]/settings/GameWorldSettingsForm.tsx:179)"}, "properties": {"repobilityId": "0ac9cf992137cd0f", "scanner": "scanner-primary", "fingerprint": "666837134da43204", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bff95006aad7141", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/game-worlds (src/app/apps/(webserver)/server-manager/[id]/worlds/new/CreateGameWorldForm.tsx:52)"}, "properties": {"repobilityId": "d6f9987cff5072f0", "scanner": "scanner-primary", "fingerprint": "4bff95006aad7141", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5ab0a13db0f3c8f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/account/profile (src/views/hooks/useTimezoneSync.ts:39)"}, "properties": {"repobilityId": "fd1fd3f9f6492845", "scanner": "scanner-primary", "fingerprint": "c5ab0a13db0f3c8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b1bdfe88894587f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/platform/phase (src/views/hooks/usePhaseProgress.ts:62)"}, "properties": {"repobilityId": "959dcc04b6de0771", "scanner": "scanner-primary", "fingerprint": "1b1bdfe88894587f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0441ece9970c4b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/hooks/useDiscordVoiceState.ts:392)"}, "properties": {"repobilityId": "3cfc78752e359bb1", "scanner": "scanner-primary", "fingerprint": "f0441ece9970c4b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5ac8b78563efbaa", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/displays (src/views/hooks/useDisplayIdentity.ts:64)"}, "properties": {"repobilityId": "9fc3bcfde0c11153", "scanner": "scanner-primary", "fingerprint": "a5ac8b78563efbaa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea6d00c50f160b9f", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/displays/checkin (src/views/hooks/useDisplayIdentity.ts:88)"}, "properties": {"repobilityId": "ec1bc5e628e13ac0", "scanner": "scanner-primary", "fingerprint": "ea6d00c50f160b9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f7dff6420a792eb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:115)"}, "properties": {"repobilityId": "b7f711bae3239c55", "scanner": "scanner-primary", "fingerprint": "9f7dff6420a792eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f66ba31b43ff92f7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:129)"}, "properties": {"repobilityId": "79aabc98c0163654", "scanner": "scanner-primary", "fingerprint": "f66ba31b43ff92f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-59c97d3e149e05b7", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/displays/${encodeURIComponent(id)} (src/views/hooks/useDisplayIdentity.ts:147)"}, "properties": {"repobilityId": "d46bd169edf4dedb", "scanner": "scanner-primary", "fingerprint": "59c97d3e149e05b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bfa3de2818216078", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/integrations/pair (src/views/pair/PairClient.tsx:19)"}, "properties": {"repobilityId": "576e3189f985c5dd", "scanner": "scanner-primary", "fingerprint": "bfa3de2818216078", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff3c440169dda27d", "level": "error", "message": {"text": "Dangling fetch: POST /api/discord/resesh/token (src/views/discord-activity/resesh/ReSeshActivityClient.tsx:148)"}, "properties": {"repobilityId": "5d49f63acd9e9a20", "scanner": "scanner-primary", "fingerprint": "ff3c440169dda27d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f48a61fe776ac06b", "level": "error", "message": {"text": "Dangling fetch: GET /api/game-systems/${game.systemSlug}/definition (src/views/discord-activity/lounge/ChessGameView.tsx:77)"}, "properties": {"repobilityId": "c0355cc853ee9e2a", "scanner": "scanner-primary", "fingerprint": "f48a61fe776ac06b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf6c2a90e6402113", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/games/${game.id}/move (src/views/discord-activity/lounge/ChessGameView.tsx:123)"}, "properties": {"repobilityId": "d421b8c4d1a9de37", "scanner": "scanner-primary", "fingerprint": "cf6c2a90e6402113", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09d46f996b4e0557", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/games/${game.id}/resign (src/views/discord-activity/lounge/ChessGameView.tsx:145)"}, "properties": {"repobilityId": "48bc13c9b96ec14d", "scanner": "scanner-primary", "fingerprint": "09d46f996b4e0557", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b972c3470d6e6d65", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/games/${game.id} (src/views/discord-activity/lounge/ChessGameView.tsx:160)"}, "properties": {"repobilityId": "299d7598658599bc", "scanner": "scanner-primary", "fingerprint": "b972c3470d6e6d65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1be50c2527fa1985", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/games/${game.id}/join (src/views/discord-activity/lounge/ChessGameView.tsx:175)"}, "properties": {"repobilityId": "ab6cf1a300e38baf", "scanner": "scanner-primary", "fingerprint": "1be50c2527fa1985", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4c0cd488ab63d9a", "level": "error", "message": {"text": "Dangling fetch: GET /api/config (src/views/discord-activity/discord/ActivityShell.tsx:130)"}, "properties": {"repobilityId": "c3f2c1a56171206c", "scanner": "scanner-primary", "fingerprint": "c4c0cd488ab63d9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7218347535c53d3c", "level": "error", "message": {"text": "Dangling fetch: GET /api/discord/activity/campaigns (src/views/discord-activity/discord/ChannelSetupView.tsx:59)"}, "properties": {"repobilityId": "02e5f82cb8bde4a7", "scanner": "scanner-primary", "fingerprint": "7218347535c53d3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b487daa7aca864bb", "level": "error", "message": {"text": "Dangling fetch: POST /api/discord/activity/link (src/views/discord-activity/discord/ChannelSetupView.tsx:77)"}, "properties": {"repobilityId": "e874155386879286", "scanner": "scanner-primary", "fingerprint": "b487daa7aca864bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6eb70e8e814c69c", "level": "error", "message": {"text": "Dangling fetch: POST /api/discord/activity/link (src/views/discord-activity/discord/ChannelSetupView.tsx:204)"}, "properties": {"repobilityId": "8ca4583b3d3e19d2", "scanner": "scanner-primary", "fingerprint": "f6eb70e8e814c69c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13177a40bef89987", "level": "error", "message": {"text": "Dangling fetch: POST /api/discord/activity/parties (src/views/discord-activity/discord/ChannelSetupView.tsx:223)"}, "properties": {"repobilityId": "ac288d6ad7348969", "scanner": "scanner-primary", "fingerprint": "13177a40bef89987", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e2bc2435c931f7e", "level": "error", "message": {"text": "Dangling fetch: POST /api/discord/activity/session (src/views/discord-activity/discord/DiscordActivityClient.tsx:84)"}, "properties": {"repobilityId": "4d7aed72383a5ce3", "scanner": "scanner-primary", "fingerprint": "1e2bc2435c931f7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-10e092ca8f60fe3a", "level": "error", "message": {"text": "Dangling fetch: GET /api/discord/activity/context?channelId=${encodeURIComponent(cid)} (src/views/discord-activity/discord/DiscordActivityClient.tsx:182)"}, "properties": {"repobilityId": "412c344ef37c637b", "scanner": "scanner-primary", "fingerprint": "10e092ca8f60fe3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c66b884404ccbaf1", "level": "error", "message": {"text": "Dangling fetch: POST /api/discord/token (src/views/discord-activity/discord/DiscordActivityClient.tsx:290)"}, "properties": {"repobilityId": "de19f2554213425f", "scanner": "scanner-primary", "fingerprint": "c66b884404ccbaf1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c60fa2469bde31ad", "level": "error", "message": {"text": "Dangling fetch: GET /api/campaigns/${campaign.id}/players (src/views/discord-activity/discord/CampaignActivityView.tsx:152)"}, "properties": {"repobilityId": "22b707dadcfaacd1", "scanner": "scanner-primary", "fingerprint": "c60fa2469bde31ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad71ac6f61c5e73d", "level": "error", "message": {"text": "Dangling fetch: GET /api/campaigns/${campaign.id}/characters/${character.id} (src/views/discord-activity/discord/CampaignActivityView.tsx:258)"}, "properties": {"repobilityId": "c2dcb8ee5680e13e", "scanner": "scanner-primary", "fingerprint": "ad71ac6f61c5e73d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3352326606ab9df9", "level": "error", "message": {"text": "Dangling fetch: GET /api/campaigns/${campaign.id}/characters/${character.id} (src/views/discord-activity/discord/CampaignActivityView.tsx:335)"}, "properties": {"repobilityId": "81cd4158453fc952", "scanner": "scanner-primary", "fingerprint": "3352326606ab9df9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07fe6711e3fc11d0", "level": "error", "message": {"text": "Dangling fetch: POST /api/campaigns/${campaignId}/dice/roll (src/views/discord-activity/campaigns/SystemDiceRoller.tsx:255)"}, "properties": {"repobilityId": "f7c1254c2584dbdd", "scanner": "scanner-primary", "fingerprint": "07fe6711e3fc11d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89c44fd14626c1b7", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/discord-activity/campaigns/SkillControlPanel.tsx:63)"}, "properties": {"repobilityId": "f922f1d86fd3ae4b", "scanner": "scanner-primary", "fingerprint": "89c44fd14626c1b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6096f12b558e7b95", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/personas/${personaId}/skills/${slug}/status (src/views/discord-activity/campaigns/SkillControlPanel.tsx:101)"}, "properties": {"repobilityId": "25a7cba116bb34c4", "scanner": "scanner-primary", "fingerprint": "6096f12b558e7b95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6cf5d0816f0110ab", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/personas/${personaId}/skills/${slug}/${endpoint} (src/views/discord-activity/campaigns/SkillControlPanel.tsx:131)"}, "properties": {"repobilityId": "641710d1df07dd2b", "scanner": "scanner-primary", "fingerprint": "6cf5d0816f0110ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-143e64e7b006b30e", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/game-systems/${gameSystemSlug}/mechanics (src/views/discord-activity/campaigns/SessionToolsPanel.tsx:58)"}, "properties": {"repobilityId": "4103d6aa2a7c3cf9", "scanner": "scanner-primary", "fingerprint": "143e64e7b006b30e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ab6bd86591136f7", "level": "error", "message": {"text": "Dangling fetch: GET /api/compendiums?systemSlug=${encodeURIComponent(gameSystemSlug)}&limit=20 (src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:57)"}, "properties": {"repobilityId": "8bb6303a9341095b", "scanner": "scanner-primary", "fingerprint": "8ab6bd86591136f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fee7ed2edd558881", "level": "error", "message": {"text": "Dangling fetch: GET /api/compendiums/${selectedId}/entries?${qs} (src/views/discord-activity/campaigns/SessionCompendiumPanel.tsx:87)"}, "properties": {"repobilityId": "bcb007dbbf061496", "scanner": "scanner-primary", "fingerprint": "fee7ed2edd558881", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-217efe89b473a5ee", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/sessions/active/rolls (src/views/discord-activity/campaigns/RollLogPanel.tsx:106)"}, "properties": {"repobilityId": "0cf45e2219ad499b", "scanner": "scanner-primary", "fingerprint": "217efe89b473a5ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5cbe3cc87977afb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/campaigns/${campaignId}/characters/${characterId} (src/views/discord-activity/campaigns/CharacterProfileEditor.tsx:73)"}, "properties": {"repobilityId": "08a7d513d219323f", "scanner": "scanner-primary", "fingerprint": "f5cbe3cc87977afb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a1d63bc915f737c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/hub/characters (src/views/components/templates/Shell/desktop-apps/CharacterManagerApp.tsx:30)"}, "properties": {"repobilityId": "fe9ebd9650ac0b4f", "scanner": "scanner-primary", "fingerprint": "0a1d63bc915f737c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37996d36f876eb02", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/templates/Shell/desktop-apps/CampaignManagerApp.tsx:26)"}, "properties": {"repobilityId": "72ce37aa6868b924", "scanner": "scanner-primary", "fingerprint": "37996d36f876eb02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12d696df6f7a30bb", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignSlug}/parties (src/views/components/molecules/PerPartySettingsLinks.tsx:39)"}, "properties": {"repobilityId": "7d42951e8d5c5fd7", "scanner": "scanner-primary", "fingerprint": "12d696df6f7a30bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15ffda2b9b9b40bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/molecules/BuyCoinsSection.tsx:27)"}, "properties": {"repobilityId": "d2b5d4d587d6fe3c", "scanner": "scanner-primary", "fingerprint": "15ffda2b9b9b40bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c7f45e533c3b034", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/text-channels (src/views/components/molecules/DiscordChannelThreadPicker.tsx:79)"}, "properties": {"repobilityId": "27f0a8b26765af26", "scanner": "scanner-primary", "fingerprint": "7c7f45e533c3b034", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-229a6c2b3ed3eb92", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${channelId}/threads (src/views/components/molecules/DiscordChannelThreadPicker.tsx:108)"}, "properties": {"repobilityId": "74edf7b8e7e1ca34", "scanner": "scanner-primary", "fingerprint": "229a6c2b3ed3eb92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2a49ca906ab2685", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/channels/${channelId}/threads (src/views/components/molecules/DiscordChannelThreadPicker.tsx:137)"}, "properties": {"repobilityId": "aeb087eb7920667f", "scanner": "scanner-primary", "fingerprint": "b2a49ca906ab2685", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75e1a77646a26c9a", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/subscribe (src/views/components/molecules/SubscribeSection.tsx:66)"}, "properties": {"repobilityId": "cc53e933265aecec", "scanner": "scanner-primary", "fingerprint": "75e1a77646a26c9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d3e58ccca7da465", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/portal (src/views/components/molecules/SubscribeSection.tsx:88)"}, "properties": {"repobilityId": "0b6f7cafcef61b3f", "scanner": "scanner-primary", "fingerprint": "5d3e58ccca7da465", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0ca3cf81f893eb6", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/story-credit/convert (src/views/components/molecules/StoryCreditActions.tsx:38)"}, "properties": {"repobilityId": "e1ce7229235a9e34", "scanner": "scanner-primary", "fingerprint": "f0ca3cf81f893eb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-303a97be11033974", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/story-credit/redeem (src/views/components/molecules/StoryCreditActions.tsx:59)"}, "properties": {"repobilityId": "a3ea9e447c45e47a", "scanner": "scanner-primary", "fingerprint": "303a97be11033974", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0d62e572669d645", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/connect/onboard (src/views/components/molecules/StoryCreditActions.tsx:79)"}, "properties": {"repobilityId": "2c3d99900f337944", "scanner": "scanner-primary", "fingerprint": "b0d62e572669d645", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13aa0063e191c877", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/join-request (src/views/components/molecules/JoinRequestButton.tsx:24)"}, "properties": {"repobilityId": "e8bc327d43349ee6", "scanner": "scanner-primary", "fingerprint": "13aa0063e191c877", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d08547f12817fcc", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/molecules/TipRecipientGroupCard.tsx:49)"}, "properties": {"repobilityId": "b43e0e337ddbac64", "scanner": "scanner-primary", "fingerprint": "1d08547f12817fcc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b3da8758ebffa7d", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/avatar (src/views/components/molecules/ProfileForm.tsx:29)"}, "properties": {"repobilityId": "4559bb9f73c3e7f2", "scanner": "scanner-primary", "fingerprint": "4b3da8758ebffa7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f33c4da47602e72", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/account/profile (src/views/components/molecules/ProfileForm.tsx:47)"}, "properties": {"repobilityId": "5bba7fa5feffcb54", "scanner": "scanner-primary", "fingerprint": "9f33c4da47602e72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51966a9a958303ea", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/molecules/BuyCoinsInline.tsx:32)"}, "properties": {"repobilityId": "2833fc85960a5643", "scanner": "scanner-primary", "fingerprint": "51966a9a958303ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45ef4b5b637cf73d", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/invites/${code} (src/views/components/organisms/InviteAcceptView.tsx:38)"}, "properties": {"repobilityId": "e314c54ced6ad3be", "scanner": "scanner-primary", "fingerprint": "45ef4b5b637cf73d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa93ee8ddc9a0cd6", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/PartiesView.tsx:108)"}, "properties": {"repobilityId": "fb3b1d1c4206c8d3", "scanner": "scanner-primary", "fingerprint": "fa93ee8ddc9a0cd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2275f92a8a59b9a", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/foundry/sync/${record.id}/resolve (src/views/components/organisms/VttSyncConflictPanel.tsx:127)"}, "properties": {"repobilityId": "e046b6a6f6561cfc", "scanner": "scanner-primary", "fingerprint": "a2275f92a8a59b9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12f0efe17a6930d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/platform/phase (src/views/components/organisms/dashboard/PhasePulseOffline.tsx:26)"}, "properties": {"repobilityId": "7a1e997f45ddb3b7", "scanner": "scanner-primary", "fingerprint": "12f0efe17a6930d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c006dde4ac03f34e", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/organisms/access/AccessPanel.tsx:199)"}, "properties": {"repobilityId": "74fce9db54135050", "scanner": "scanner-primary", "fingerprint": "c006dde4ac03f34e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63743e7f51dd5a06", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns (src/views/components/organisms/access/AccessPanel.tsx:211)"}, "properties": {"repobilityId": "95b7792ebccb1464", "scanner": "scanner-primary", "fingerprint": "63743e7f51dd5a06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7dd27878bfa58c3", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${encodeURIComponent(c.id)}/parties (src/views/components/organisms/access/AccessPanel.tsx:217)"}, "properties": {"repobilityId": "edcc3d234bca0442", "scanner": "scanner-primary", "fingerprint": "f7dd27878bfa58c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13e597a51aff7446", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/profile (src/views/components/organisms/account/ProfilePanel.tsx:43)"}, "properties": {"repobilityId": "81fa9bf08d261ead", "scanner": "scanner-primary", "fingerprint": "13e597a51aff7446", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6924fb1fd42ba24f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/LinkAccountPanel.tsx:75)"}, "properties": {"repobilityId": "85bc437fbee12274", "scanner": "scanner-primary", "fingerprint": "6924fb1fd42ba24f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4827beb22ab6c973", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/DeveloperPanel.tsx:32)"}, "properties": {"repobilityId": "92b661f7edd06f21", "scanner": "scanner-primary", "fingerprint": "4827beb22ab6c973", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b217e1bf9356d762", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/LinkedAccountsClient.tsx:89)"}, "properties": {"repobilityId": "125b3e950b39c9a4", "scanner": "scanner-primary", "fingerprint": "b217e1bf9356d762", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a293c961ceebc86", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/InstalledAppsPanel.tsx:43)"}, "properties": {"repobilityId": "f0f14936f611f5d9", "scanner": "scanner-primary", "fingerprint": "6a293c961ceebc86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff4814132234870c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/InstalledAppsPanel.tsx:43)"}, "properties": {"repobilityId": "adedce0cd74b2b3a", "scanner": "scanner-primary", "fingerprint": "ff4814132234870c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4a49cf2bca2c2fb", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/user (src/views/components/organisms/account/ConnectionsPanel.tsx:34)"}, "properties": {"repobilityId": "635857459d7ac8db", "scanner": "scanner-primary", "fingerprint": "c4a49cf2bca2c2fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-265b1daba21abaf2", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:62)"}, "properties": {"repobilityId": "da0437457ba4e30b", "scanner": "scanner-primary", "fingerprint": "265b1daba21abaf2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a7e1ed6333afd64d", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/foundry/worlds/${encodeURIComponent(repairingId)}/repair (src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:91)"}, "properties": {"repobilityId": "6f9a8876d435d9e7", "scanner": "scanner-primary", "fingerprint": "a7e1ed6333afd64d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9a0f063b94f5b85", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/worlds/${encodeURIComponent(deletingId)}?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/account/FoundryOrphanWorldsPanel.tsx:116)"}, "properties": {"repobilityId": "2e098a1b4b9ec09c", "scanner": "scanner-primary", "fingerprint": "c9a0f063b94f5b85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26dd9b2d681900e8", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/keys (src/views/components/organisms/account/ApiKeysClient.tsx:83)"}, "properties": {"repobilityId": "c932425998a0e068", "scanner": "scanner-primary", "fingerprint": "26dd9b2d681900e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4399eed26a3c899", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/keys/${apiKey.id} (src/views/components/organisms/account/ApiKeysClient.tsx:231)"}, "properties": {"repobilityId": "ad1d58989720e4d1", "scanner": "scanner-primary", "fingerprint": "c4399eed26a3c899", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-812dd2e7091c55d3", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/keys/${apiKey.id} (src/views/components/organisms/account/ApiKeysClient.tsx:242)"}, "properties": {"repobilityId": "1fda173a01f44a5a", "scanner": "scanner-primary", "fingerprint": "812dd2e7091c55d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4000e532f1614b73", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/keys (src/views/components/organisms/account/ApiKeysClient.tsx:358)"}, "properties": {"repobilityId": "9ab0eca10607606a", "scanner": "scanner-primary", "fingerprint": "4000e532f1614b73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd5a1a1ef770d291", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:46)"}, "properties": {"repobilityId": "55fe9cfe40414a4c", "scanner": "scanner-primary", "fingerprint": "cd5a1a1ef770d291", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06011b673dc173aa", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/foundry/worlds?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/account/FoundryWorldsDiagnosticClient.tsx:60)"}, "properties": {"repobilityId": "a2ff96b9b7c3caa3", "scanner": "scanner-primary", "fingerprint": "06011b673dc173aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee99ddb5aa4a40bc", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/foundry/installations/${installationId}/reset-key (src/views/components/organisms/account/FoundryInstallationResetKeyModal.tsx:48)"}, "properties": {"repobilityId": "77dafc9024f60036", "scanner": "scanner-primary", "fingerprint": "ee99ddb5aa4a40bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb0fb75721968908", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/integrations (src/views/components/organisms/account/IntegrationsClient.tsx:333)"}, "properties": {"repobilityId": "3ba30777e39c7dfd", "scanner": "scanner-primary", "fingerprint": "fb0fb75721968908", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ab6f43ad85c738f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/IntegrationsClient.tsx:352)"}, "properties": {"repobilityId": "6d2086d00c41d626", "scanner": "scanner-primary", "fingerprint": "4ab6f43ad85c738f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-695f04e0c2b1d968", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/integrations/${platform}/key (src/views/components/organisms/account/IntegrationsClient.tsx:372)"}, "properties": {"repobilityId": "80d67dcad0427519", "scanner": "scanner-primary", "fingerprint": "695f04e0c2b1d968", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46e11586d27cc1cc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/integrations/${platform}/key (src/views/components/organisms/account/IntegrationsClient.tsx:397)"}, "properties": {"repobilityId": "eb9d09a9e9d96beb", "scanner": "scanner-primary", "fingerprint": "46e11586d27cc1cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07916809ece39925", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/integrations/${platform}/key/rotate (src/views/components/organisms/account/IntegrationsClient.tsx:419)"}, "properties": {"repobilityId": "75920e561d8dc77b", "scanner": "scanner-primary", "fingerprint": "07916809ece39925", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-16bbc6a948360b6a", "level": "error", "message": {"text": "Dangling fetch: PUT /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/IntegrationsClient.tsx:444)"}, "properties": {"repobilityId": "d098054c75df5566", "scanner": "scanner-primary", "fingerprint": "16bbc6a948360b6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1bb89d363ba62cb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/integrations/${platform}/link (src/views/components/organisms/account/IntegrationsClient.tsx:467)"}, "properties": {"repobilityId": "a6217806b61033a8", "scanner": "scanner-primary", "fingerprint": "f1bb89d363ba62cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e9f7a4d7bec7499", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/recording-consent (src/views/components/organisms/account/RecordingConsentClient.tsx:57)"}, "properties": {"repobilityId": "c5100d9cb3f488fc", "scanner": "scanner-primary", "fingerprint": "2e9f7a4d7bec7499", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-472c133cc23688ea", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/recording-consent/${encodeURIComponent(id)} (src/views/components/organisms/account/RecordingConsentClient.tsx:77)"}, "properties": {"repobilityId": "7a440187a03a31ca", "scanner": "scanner-primary", "fingerprint": "472c133cc23688ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ccffbd4d0353489", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/account/FoundryIntegrationClient.tsx:89)"}, "properties": {"repobilityId": "4ef566a935c7db2a", "scanner": "scanner-primary", "fingerprint": "0ccffbd4d0353489", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6aeb93c9ec97091", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/account/FoundryIntegrationClient.tsx:115)"}, "properties": {"repobilityId": "59e5445a89041a99", "scanner": "scanner-primary", "fingerprint": "c6aeb93c9ec97091", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7daf0c562d96d87a", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/installations (src/views/components/organisms/account/FoundryIntegrationClient.tsx:144)"}, "properties": {"repobilityId": "f7d64b437d76854f", "scanner": "scanner-primary", "fingerprint": "7daf0c562d96d87a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65eddd9773db2889", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/installations/${id} (src/views/components/organisms/account/FoundryIntegrationClient.tsx:192)"}, "properties": {"repobilityId": "2a8862ed980f0b00", "scanner": "scanner-primary", "fingerprint": "65eddd9773db2889", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f9d9fddecedfc41", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/installations/${id} (src/views/components/organisms/account/FoundryIntegrationClient.tsx:218)"}, "properties": {"repobilityId": "66f2b6cdc507979e", "scanner": "scanner-primary", "fingerprint": "0f9d9fddecedfc41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d49faf880720e404", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/integrations (src/views/components/organisms/account/AddConnectionPanel.tsx:33)"}, "properties": {"repobilityId": "c81291bc33bba601", "scanner": "scanner-primary", "fingerprint": "d49faf880720e404", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31edb87ae7fbf517", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/integrations/${p}/link (src/views/components/organisms/account/AddConnectionPanel.tsx:44)"}, "properties": {"repobilityId": "63509414a06d9b60", "scanner": "scanner-primary", "fingerprint": "31edb87ae7fbf517", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-871ea23895a3fd05", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/connections (src/views/components/organisms/account/DiscordIntegrationClient.tsx:100)"}, "properties": {"repobilityId": "817023d75cff4b7c", "scanner": "scanner-primary", "fingerprint": "871ea23895a3fd05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ecc6549436b8072", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/account/DiscordIntegrationClient.tsx:101)"}, "properties": {"repobilityId": "4aa66a7894ed30ff", "scanner": "scanner-primary", "fingerprint": "8ecc6549436b8072", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c581556de8b2bfe", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations/${installationId}/modules (src/views/components/organisms/account/FoundryInstalledModulesPanel.tsx:39)"}, "properties": {"repobilityId": "a01fef2bf983a92e", "scanner": "scanner-primary", "fingerprint": "4c581556de8b2bfe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d606ade58bc4b0f", "level": "error", "message": {"text": "Dangling fetch: POST /api/campaigns (src/views/components/organisms/admin/CampaignsPageContent.tsx:116)"}, "properties": {"repobilityId": "f505ad4e3c164a7b", "scanner": "scanner-primary", "fingerprint": "5d606ade58bc4b0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e07f5e21dd01902", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${id} (src/views/components/organisms/admin/CampaignsPageContent.tsx:145)"}, "properties": {"repobilityId": "2818ffb899e69099", "scanner": "scanner-primary", "fingerprint": "9e07f5e21dd01902", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a98c2fde39da40a6", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${id} (src/views/components/organisms/admin/UserManageMergeSection.tsx:39)"}, "properties": {"repobilityId": "e8c83d63051c2d2d", "scanner": "scanner-primary", "fingerprint": "a98c2fde39da40a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e14fbd3bd3376b4a", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/users/merge (src/views/components/organisms/admin/UserManageMergeSection.tsx:65)"}, "properties": {"repobilityId": "af84d35bb81f05d5", "scanner": "scanner-primary", "fingerprint": "e14fbd3bd3376b4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b70123e340878434", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/foundry/status (src/views/components/organisms/admin/FoundryPlatformManager.tsx:69)"}, "properties": {"repobilityId": "79cd1c82c4c9d350", "scanner": "scanner-primary", "fingerprint": "b70123e340878434", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec4d3137cac57a6f", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/foundry/initialize (src/views/components/organisms/admin/FoundryPlatformManager.tsx:110)"}, "properties": {"repobilityId": "0aafa6f2d3cfcbd0", "scanner": "scanner-primary", "fingerprint": "ec4d3137cac57a6f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-772e86bef693a188", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/foundry/cancel (src/views/components/organisms/admin/FoundryPlatformManager.tsx:301)"}, "properties": {"repobilityId": "8b51ea5a642f39f9", "scanner": "scanner-primary", "fingerprint": "772e86bef693a188", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-784a841ef1a2bb56", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/foundry/instances (src/views/components/organisms/admin/FoundryPlatformInstances.tsx:17)"}, "properties": {"repobilityId": "3494ed8127de55df", "scanner": "scanner-primary", "fingerprint": "784a841ef1a2bb56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6acb97a06bb11c5", "level": "error", "message": {"text": "Dangling fetch: GET /api/games/systems (src/views/components/organisms/admin/StoryTypeSelector.tsx:48)"}, "properties": {"repobilityId": "4ed6535fbcdfbcfe", "scanner": "scanner-primary", "fingerprint": "f6acb97a06bb11c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-335f5e2ff855e80a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/game-systems/${encodeURIComponent(slug)}/license (src/views/components/organisms/admin/GameSystemLicenseForm.tsx:69)"}, "properties": {"repobilityId": "b0ea3cda7d03dbf2", "scanner": "scanner-primary", "fingerprint": "335f5e2ff855e80a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95f14f3f44c8711b", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManageWalletSection.tsx:64)"}, "properties": {"repobilityId": "9ab431907e145456", "scanner": "scanner-primary", "fingerprint": "95f14f3f44c8711b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ad5650df2cef51d", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManageWalletSection.tsx:76)"}, "properties": {"repobilityId": "8781dc4b03a83d32", "scanner": "scanner-primary", "fingerprint": "7ad5650df2cef51d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88160fe830e09d26", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/economy-transactions?${qs} (src/views/components/organisms/admin/TransactionsAuditPageContent.tsx:110)"}, "properties": {"repobilityId": "f0e5074a6878271a", "scanner": "scanner-primary", "fingerprint": "88160fe830e09d26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa8ac5c1891d40dd", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/economy-transactions?${qs} (src/views/components/organisms/admin/TransactionsAuditPageContent.tsx:131)"}, "properties": {"repobilityId": "2a5eff3f39e4baec", "scanner": "scanner-primary", "fingerprint": "fa8ac5c1891d40dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aab3341b5b7dbdfe", "level": "error", "message": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${id} (src/views/components/organisms/admin/SystemsPageContent.tsx:54)"}, "properties": {"repobilityId": "91d89d3a12845d9c", "scanner": "scanner-primary", "fingerprint": "aab3341b5b7dbdfe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26a82f1d692e7c4f", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/systems/${id}/sync (src/views/components/organisms/admin/SystemsPageContent.tsx:82)"}, "properties": {"repobilityId": "438f59401eb30fc8", "scanner": "scanner-primary", "fingerprint": "26a82f1d692e7c4f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-503ddcc39ad80673", "level": "error", "message": {"text": "Dangling fetch: DELETE /apps/admin-dashboard/api/systems/${id} (src/views/components/organisms/admin/SystemsPageContent.tsx:94)"}, "properties": {"repobilityId": "0c07e69fab70c625", "scanner": "scanner-primary", "fingerprint": "503ddcc39ad80673", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-30adf9992eb735da", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users?${params} (src/views/components/organisms/admin/UsersManagementPageContent.tsx:81)"}, "properties": {"repobilityId": "50a88a620a104562", "scanner": "scanner-primary", "fingerprint": "30adf9992eb735da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d49c918ade814ba0", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users?${params} (src/views/components/organisms/admin/CoinsPageContent.tsx:82)"}, "properties": {"repobilityId": "1d8f13626ca070bf", "scanner": "scanner-primary", "fingerprint": "d49c918ade814ba0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-703b834745ed8508", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${user.id}/coins (src/views/components/organisms/admin/CoinsPageContent.tsx:104)"}, "properties": {"repobilityId": "02069ae5bbad5ba1", "scanner": "scanner-primary", "fingerprint": "703b834745ed8508", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbcf186fdd4ed1bc", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/users/${selectedUser.id}/coins (src/views/components/organisms/admin/CoinsPageContent.tsx:129)"}, "properties": {"repobilityId": "e1c365cb74b509d5", "scanner": "scanner-primary", "fingerprint": "cbcf186fdd4ed1bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f57237f8d5c8e83", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${selectedUser.id}/coins (src/views/components/organisms/admin/CoinsPageContent.tsx:152)"}, "properties": {"repobilityId": "262065e381fff330", "scanner": "scanner-primary", "fingerprint": "6f57237f8d5c8e83", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b9f129743be61b3", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/audit-log?${params} (src/views/components/organisms/admin/CoinsPageContent.tsx:170)"}, "properties": {"repobilityId": "a14df6bbe137eb67", "scanner": "scanner-primary", "fingerprint": "4b9f129743be61b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a885daff7728366f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/admin/recording-servers (src/views/components/organisms/admin/RecordingServersPageContent.tsx:47)"}, "properties": {"repobilityId": "28a5514e1aa870b5", "scanner": "scanner-primary", "fingerprint": "a885daff7728366f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a48c9ecd3a2873f", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/admin/recording-servers/${encodeURIComponent(installationId)}/stop (src/views/components/organisms/admin/RecordingServersPageContent.tsx:70)"}, "properties": {"repobilityId": "3b7c587bfb86b327", "scanner": "scanner-primary", "fingerprint": "5a48c9ecd3a2873f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a87c3c500d4fb9a", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId} (src/views/components/organisms/admin/UserManagePanel.tsx:91)"}, "properties": {"repobilityId": "c3040ff1aece5b54", "scanner": "scanner-primary", "fingerprint": "1a87c3c500d4fb9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bc42665c5145470", "level": "error", "message": {"text": "Dangling fetch: GET /apps/admin-dashboard/api/users/${userId}/coins (src/views/components/organisms/admin/UserManagePanel.tsx:92)"}, "properties": {"repobilityId": "9d95cba2fe4e77a5", "scanner": "scanner-primary", "fingerprint": "5bc42665c5145470", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c7edd5b081f24a2", "level": "error", "message": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/users/${userId}/role (src/views/components/organisms/admin/UserManagePanel.tsx:134)"}, "properties": {"repobilityId": "777a1b3b0fb99cc2", "scanner": "scanner-primary", "fingerprint": "7c7edd5b081f24a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7430f1b7e89a1562", "level": "error", "message": {"text": "Dangling fetch: DELETE /apps/admin-dashboard/api/users/${userId}/accounts/${provider} (src/views/components/organisms/admin/UserManagePanel.tsx:164)"}, "properties": {"repobilityId": "2aa1f6bad6d54812", "scanner": "scanner-primary", "fingerprint": "7430f1b7e89a1562", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76729b714a70c8a9", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/users/${userId}/moderation (src/views/components/organisms/admin/UserManagePanel.tsx:180)"}, "properties": {"repobilityId": "03994e330a1c74be", "scanner": "scanner-primary", "fingerprint": "76729b714a70c8a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6864eb6929d6996e", "level": "error", "message": {"text": "Dangling fetch: POST /apps/admin-dashboard/api/systems/ingest (src/views/components/organisms/admin/systems/IngestSystemModal.tsx:78)"}, "properties": {"repobilityId": "990fb5fca11993d4", "scanner": "scanner-primary", "fingerprint": "6864eb6929d6996e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b461d8177643628d", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/foundry/status (src/views/components/organisms/admin/systems/IngestSystemModal.tsx:104)"}, "properties": {"repobilityId": "a51758f46439cc49", "scanner": "scanner-primary", "fingerprint": "b461d8177643628d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e33188a38f658c82", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/foundry/systems/install (src/views/components/organisms/admin/systems/IngestSystemModal.tsx:117)"}, "properties": {"repobilityId": "2d41a4514eafc121", "scanner": "scanner-primary", "fingerprint": "e33188a38f658c82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44170b128a92247b", "level": "error", "message": {"text": "Dangling fetch: PATCH /apps/admin-dashboard/api/systems/${system.id} (src/views/components/organisms/admin/systems/CacheFoundryFilesModal.tsx:118)"}, "properties": {"repobilityId": "f798e7356ec2f98c", "scanner": "scanner-primary", "fingerprint": "44170b128a92247b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b47f5f4d403135d1", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:144)"}, "properties": {"repobilityId": "e6771f1b3bb3f81d", "scanner": "scanner-primary", "fingerprint": "b47f5f4d403135d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20ae3051a4e8ecb4", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:224)"}, "properties": {"repobilityId": "581b9d1be3d6bf8e", "scanner": "scanner-primary", "fingerprint": "20ae3051a4e8ecb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd33fc1a6837703c", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:293)"}, "properties": {"repobilityId": "3b262a76c65f3646", "scanner": "scanner-primary", "fingerprint": "bd33fc1a6837703c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a9e59b703ececda", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/assets (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:376)"}, "properties": {"repobilityId": "a41d79c2dc8fe985", "scanner": "scanner-primary", "fingerprint": "8a9e59b703ececda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e4f55486ac1055a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/assets/${asset.id} (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:394)"}, "properties": {"repobilityId": "c8f03f7533588d52", "scanner": "scanner-primary", "fingerprint": "6e4f55486ac1055a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b44958e0002e852", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:404)"}, "properties": {"repobilityId": "8587d7d8b4faf68c", "scanner": "scanner-primary", "fingerprint": "8b44958e0002e852", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79fbbd983bfbc92b", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/characters/NewCharacterDetailSteps.tsx:504)"}, "properties": {"repobilityId": "c88b0ff7334a33c8", "scanner": "scanner-primary", "fingerprint": "79fbbd983bfbc92b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6725c39d9d2205a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/foundry/status?installationId=${installId} (src/views/components/organisms/vtt/AppVttContext.tsx:144)"}, "properties": {"repobilityId": "703778d618d11348", "scanner": "scanner-primary", "fingerprint": "6725c39d9d2205a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65b009a0a075791b", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/vtt/AppVttContext.tsx:174)"}, "properties": {"repobilityId": "f04bcc077ed06a03", "scanner": "scanner-primary", "fingerprint": "65b009a0a075791b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-894703b67861f9e0", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/vtt/AppVttContext.tsx:192)"}, "properties": {"repobilityId": "93fc47c2234fb5bb", "scanner": "scanner-primary", "fingerprint": "894703b67861f9e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60969ebc92328f2e", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/foundry/launch (src/views/components/organisms/vtt/AppVttContext.tsx:260)"}, "properties": {"repobilityId": "465a675a5d7b1836", "scanner": "scanner-primary", "fingerprint": "60969ebc92328f2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aec1088c77565ddb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/launch?installationId=${installId} (src/views/components/organisms/vtt/AppVttContext.tsx:287)"}, "properties": {"repobilityId": "20f8e31558aab759", "scanner": "scanner-primary", "fingerprint": "aec1088c77565ddb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0aaee97f2b73eb7", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:160)"}, "properties": {"repobilityId": "c2246d4bc48449a6", "scanner": "scanner-primary", "fingerprint": "f0aaee97f2b73eb7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c013076ffaae3972", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/storyteller/game-systems (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:161)"}, "properties": {"repobilityId": "67e4e9ca53ccafc0", "scanner": "scanner-primary", "fingerprint": "c013076ffaae3972", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb701f8e3b724a62", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:187)"}, "properties": {"repobilityId": "65fc0527d1742bc4", "scanner": "scanner-primary", "fingerprint": "eb701f8e3b724a62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df5ea7a472065b9e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:310)"}, "properties": {"repobilityId": "23a287db346b813c", "scanner": "scanner-primary", "fingerprint": "df5ea7a472065b9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27a43c60e7871c22", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/storyteller/compendium-sources/${source.slug} (src/views/components/organisms/compendium-sources/CompendiumSourceEditPage.tsx:428)"}, "properties": {"repobilityId": "305adaac85f3c1ef", "scanner": "scanner-primary", "fingerprint": "27a43c60e7871c22", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3980313fa72552e0", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/channels/${textChannelId}/threads (src/views/components/organisms/chat/ChatSettingsPanel.tsx:114)"}, "properties": {"repobilityId": "93691e3317873989", "scanner": "scanner-primary", "fingerprint": "3980313fa72552e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3d4b7c56e997de4", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/chat/ChatSettingsPanel.tsx:128)"}, "properties": {"repobilityId": "132b2d558f13c406", "scanner": "scanner-primary", "fingerprint": "b3d4b7c56e997de4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a739836499ca4e8c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/text-channels (src/views/components/organisms/chat/ChatSettingsPanel.tsx:152)"}, "properties": {"repobilityId": "032270b766850190", "scanner": "scanner-primary", "fingerprint": "a739836499ca4e8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9827d72f56319371", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/channels (src/views/components/organisms/chat/ChatSettingsPanel.tsx:153)"}, "properties": {"repobilityId": "18fca62c89e80c85", "scanner": "scanner-primary", "fingerprint": "9827d72f56319371", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32ac0942174162f8", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds/${guildId}/roles (src/views/components/organisms/chat/ChatSettingsPanel.tsx:154)"}, "properties": {"repobilityId": "aca792c085d355ee", "scanner": "scanner-primary", "fingerprint": "32ac0942174162f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eeef7bc5d10b2ee5", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/text-channels (src/views/components/organisms/chat/ChatSettingsPanel.tsx:174)"}, "properties": {"repobilityId": "3ca89d2352bc0a8d", "scanner": "scanner-primary", "fingerprint": "eeef7bc5d10b2ee5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ae3308df2d16283", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/channels (src/views/components/organisms/chat/ChatSettingsPanel.tsx:201)"}, "properties": {"repobilityId": "58321bd70c97a168", "scanner": "scanner-primary", "fingerprint": "8ae3308df2d16283", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0b57ab1c8a087e2", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/discord/guilds/${guildId}/channels/${textChannelId}/threads (src/views/components/organisms/chat/ChatSettingsPanel.tsx:227)"}, "properties": {"repobilityId": "d9cfeb1a75fc22ce", "scanner": "scanner-primary", "fingerprint": "b0b57ab1c8a087e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1d5c06b21d7b34d", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/foundry/useFoundryInstallations.ts:29)"}, "properties": {"repobilityId": "ad168688c589f086", "scanner": "scanner-primary", "fingerprint": "d1d5c06b21d7b34d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ffd150b0eef43ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:227)"}, "properties": {"repobilityId": "92a289dd4a09f958", "scanner": "scanner-primary", "fingerprint": "6ffd150b0eef43ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-edccd3ffb15ac0f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:248)"}, "properties": {"repobilityId": "7a52091633fad327", "scanner": "scanner-primary", "fingerprint": "edccd3ffb15ac0f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-99dd5e4f7d389a0d", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations/${encodeURIComponent(installationId)}/worlds (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:267)"}, "properties": {"repobilityId": "36e34595b9f70380", "scanner": "scanner-primary", "fingerprint": "99dd5e4f7d389a0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38b87da88d0430fa", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/foundry/launch (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:295)"}, "properties": {"repobilityId": "71e7ffeb142f6df1", "scanner": "scanner-primary", "fingerprint": "38b87da88d0430fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f77f85b30cbf8cf8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/launch?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/FoundryServerLauncher.tsx:423)"}, "properties": {"repobilityId": "a2f4458306fa4ad8", "scanner": "scanner-primary", "fingerprint": "f77f85b30cbf8cf8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf85fae5e2f3a84b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/_settings/FoundryServerGeneralSettings.tsx:70)"}, "properties": {"repobilityId": "3b1413add9aff08e", "scanner": "scanner-primary", "fingerprint": "cf85fae5e2f3a84b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dccf03f5788fafa0", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/foundry/modules?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:47)"}, "properties": {"repobilityId": "c8c10d686186f7c3", "scanner": "scanner-primary", "fingerprint": "dccf03f5788fafa0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9733a1e41d2bc4f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/installations/${encodeURIComponent(installationId)}/modules/${encodeURIComponent(mod.id)} (src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:74)"}, "properties": {"repobilityId": "cdf4fdddf56cd2f1", "scanner": "scanner-primary", "fingerprint": "c9733a1e41d2bc4f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4191f5e30fec9622", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/installations/${encodeURIComponent(installationId)}/repair-plugin (src/views/components/organisms/foundry/_settings/FoundryServerModulesPanel.tsx:96)"}, "properties": {"repobilityId": "1bfdaca8d12ada3b", "scanner": "scanner-primary", "fingerprint": "4191f5e30fec9622", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7894b02e0543e0a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/installations/${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/_settings/FoundryServerDangerZone.tsx:84)"}, "properties": {"repobilityId": "9f0f18f951dafe9f", "scanner": "scanner-primary", "fingerprint": "e7894b02e0543e0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1cea661e43706f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/foundry/systems?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/foundry/_settings/FoundryServerSystemsPanel.tsx:43)"}, "properties": {"repobilityId": "813ae8caf038f40e", "scanner": "scanner-primary", "fingerprint": "f1cea661e43706f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8eed1ce4eec926d3", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/account/foundry/installations/${encodeURIComponent(installationId)}/systems/${encodeURIComponent(system.id)} (src/views/components/organisms/foundry/_settings/FoundryServerSystemsPanel.tsx:70)"}, "properties": {"repobilityId": "3aed42def4fd63e7", "scanner": "scanner-primary", "fingerprint": "8eed1ce4eec926d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca76de88f1d3305e", "level": "error", "message": {"text": "Dangling fetch: GET /api/config (src/views/components/organisms/wallet/BalancesDropdown.tsx:157)"}, "properties": {"repobilityId": "5f99d5767489bd3c", "scanner": "scanner-primary", "fingerprint": "ca76de88f1d3305e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5faaddd7a326d3d1", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet?period=${period}&limit=50 (src/views/components/organisms/wallet/TransactionsPanel.tsx:75)"}, "properties": {"repobilityId": "41ffc87a6a7f538e", "scanner": "scanner-primary", "fingerprint": "5faaddd7a326d3d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a59833190e70f66", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/wallet/PlanTiersPanel.tsx:31)"}, "properties": {"repobilityId": "5c0dfb251d24cedb", "scanner": "scanner-primary", "fingerprint": "3a59833190e70f66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c9dbd6c0c2e95b9", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/subscription (src/views/components/organisms/wallet/PlanTiersPanel.tsx:32)"}, "properties": {"repobilityId": "a1bfe87a523de8e2", "scanner": "scanner-primary", "fingerprint": "1c9dbd6c0c2e95b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3e29083f2916a43", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/payments/connect/status (src/views/components/organisms/wallet/PlanTiersPanel.tsx:33)"}, "properties": {"repobilityId": "fc15039a711c777e", "scanner": "scanner-primary", "fingerprint": "c3e29083f2916a43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d392855cdae9081f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/tip-jar/TipJarPanel.tsx:64)"}, "properties": {"repobilityId": "4b309a3b3cd264f0", "scanner": "scanner-primary", "fingerprint": "d392855cdae9081f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2db7fa8100035b98", "level": "error", "message": {"text": "Dangling fetch: GET /api/config (src/views/components/organisms/tip-jar/TipJarPanel.tsx:75)"}, "properties": {"repobilityId": "ab4835b57453b123", "scanner": "scanner-primary", "fingerprint": "2db7fa8100035b98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ebbd72e753ac4a8", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/tip-jar/TipJarPanel.tsx:109)"}, "properties": {"repobilityId": "3cde34fa992004ab", "scanner": "scanner-primary", "fingerprint": "3ebbd72e753ac4a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ed4d40362f95c50", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/tip-jar/TipJarPanel.tsx:128)"}, "properties": {"repobilityId": "f23d518a6f597ca3", "scanner": "scanner-primary", "fingerprint": "2ed4d40362f95c50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c011defe6c67331", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/rates (src/views/components/organisms/apps/AppCatalogTile.tsx:167)"}, "properties": {"repobilityId": "b71cdab7678355fb", "scanner": "scanner-primary", "fingerprint": "7c011defe6c67331", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6254f4943e46c4c7", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/shell/SystemTray.tsx:59)"}, "properties": {"repobilityId": "35a23cab867fafa5", "scanner": "scanner-primary", "fingerprint": "6254f4943e46c4c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-460b3ebc40ecdedf", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/subscription (src/views/components/organisms/persona/WalletPill.tsx:245)"}, "properties": {"repobilityId": "afcf8ff49442b423", "scanner": "scanner-primary", "fingerprint": "460b3ebc40ecdedf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-987870598d52a63a", "level": "error", "message": {"text": "Dangling fetch: GET /api/config (src/views/components/organisms/persona/WalletPill.tsx:408)"}, "properties": {"repobilityId": "d072fc8be371c4cc", "scanner": "scanner-primary", "fingerprint": "987870598d52a63a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eec9cea66775cbe6", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/coins (src/views/components/organisms/persona/WalletPill.tsx:494)"}, "properties": {"repobilityId": "ec4d7cab8d8f045b", "scanner": "scanner-primary", "fingerprint": "eec9cea66775cbe6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09a1feced88b918d", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/files?${params.toString()} (src/views/components/organisms/file-explorer/UploadsTab.tsx:73)"}, "properties": {"repobilityId": "6d814d1eb38741c1", "scanner": "scanner-primary", "fingerprint": "09a1feced88b918d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e5c584b5531ff7d0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/files/${encodeURIComponent(row.id)} (src/views/components/organisms/file-explorer/UploadsTab.tsx:110)"}, "properties": {"repobilityId": "2e0781c16d132313", "scanner": "scanner-primary", "fingerprint": "e5c584b5531ff7d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0141d0612f9aa0e6", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/installations (src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:60)"}, "properties": {"repobilityId": "234a732881fc63d2", "scanner": "scanner-primary", "fingerprint": "0141d0612f9aa0e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27a10b1f8f14daae", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/foundry/worlds?installationId=${encodeURIComponent(inst.id)} (src/views/components/organisms/file-explorer/FoundryWorldsTab.tsx:69)"}, "properties": {"repobilityId": "e1d14bb420e26d46", "scanner": "scanner-primary", "fingerprint": "27a10b1f8f14daae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1246ea0d3031e95d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/storyteller/asset-packs/${slug} (src/views/components/organisms/asset-packs/AssetPackUpload.tsx:126)"}, "properties": {"repobilityId": "7645997d3b1876f8", "scanner": "scanner-primary", "fingerprint": "1246ea0d3031e95d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab1e5518c43a948f", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters (src/views/components/organisms/campaigns/CharactersPage.tsx:238)"}, "properties": {"repobilityId": "c884afe78e58b610", "scanner": "scanner-primary", "fingerprint": "ab1e5518c43a948f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8030e55b173b9ab", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/characters/${characterId} (src/views/components/organisms/campaigns/CharactersPage.tsx:334)"}, "properties": {"repobilityId": "f40fa770f3c7eaf0", "scanner": "scanner-primary", "fingerprint": "d8030e55b173b9ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c0728310715d04ea", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/talespire (src/views/components/organisms/campaigns/CampaignVttConnections.tsx:29)"}, "properties": {"repobilityId": "eb62a63e1b99cf8a", "scanner": "scanner-primary", "fingerprint": "c0728310715d04ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57e92befaed359ad", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignVttConnections.tsx:264)"}, "properties": {"repobilityId": "414a68bb4bb3f010", "scanner": "scanner-primary", "fingerprint": "57e92befaed359ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f36528f51745f497", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignHome.tsx:93)"}, "properties": {"repobilityId": "b265d4121e3aadcd", "scanner": "scanner-primary", "fingerprint": "f36528f51745f497", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bdc21205f07e38f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/heroforge/meta?id=${miniId} (src/views/components/organisms/campaigns/CharacterSheetClient.tsx:148)"}, "properties": {"repobilityId": "58978e78977f5443", "scanner": "scanner-primary", "fingerprint": "9bdc21205f07e38f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af7b4018931063ef", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${characterId} (src/views/components/organisms/campaigns/ExternalSheetView.tsx:245)"}, "properties": {"repobilityId": "5c4c374c9d0c8197", "scanner": "scanner-primary", "fingerprint": "af7b4018931063ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9983440812bee3b1", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-upload (src/views/components/organisms/campaigns/ExternalSheetView.tsx:269)"}, "properties": {"repobilityId": "7bd794b2c1ec05de", "scanner": "scanner-primary", "fingerprint": "9983440812bee3b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4853cfd7b875edac", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-upload (src/views/components/organisms/campaigns/ExternalSheetView.tsx:292)"}, "properties": {"repobilityId": "5e42c750dac4b0b4", "scanner": "scanner-primary", "fingerprint": "4853cfd7b875edac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5160e81545a81f17", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/characters/${characterId}/sheet-import-foundry (src/views/components/organisms/campaigns/ExternalSheetView.tsx:321)"}, "properties": {"repobilityId": "f2c27172065ad67c", "scanner": "scanner-primary", "fingerprint": "5160e81545a81f17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a9f174cc82e10b9", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignSidebar.tsx:125)"}, "properties": {"repobilityId": "36135fa26a3df9a6", "scanner": "scanner-primary", "fingerprint": "6a9f174cc82e10b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20a4c14381c70453", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/all-channels?guildId=${discordInfo.guildId} (src/views/components/organisms/campaigns/CampaignSidebar.tsx:126)"}, "properties": {"repobilityId": "81eda156ab71b562", "scanner": "scanner-primary", "fingerprint": "20a4c14381c70453", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ca67e76f0b2fa4e", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${parentId}/threads (src/views/components/organisms/campaigns/CampaignSidebar.tsx:164)"}, "properties": {"repobilityId": "055f18d06ec03cb5", "scanner": "scanner-primary", "fingerprint": "9ca67e76f0b2fa4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0cde017321a3322a", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${chId}/recent (src/views/components/organisms/campaigns/CampaignSidebar.tsx:213)"}, "properties": {"repobilityId": "bf35c7703c0b6a31", "scanner": "scanner-primary", "fingerprint": "0cde017321a3322a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b6c979ab38adcad", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${discordInfo.voiceChannelId}/recent (src/views/components/organisms/campaigns/CampaignSidebar.tsx:227)"}, "properties": {"repobilityId": "ea98b1800cc1b34c", "scanner": "scanner-primary", "fingerprint": "7b6c979ab38adcad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aec1765eea07ab8f", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${discordInfo.textChannelId}/recent (src/views/components/organisms/campaigns/CampaignSidebar.tsx:240)"}, "properties": {"repobilityId": "481fc9a615544fec", "scanner": "scanner-primary", "fingerprint": "aec1765eea07ab8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-292ff6efa0501b93", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/forum/recent (src/views/components/organisms/campaigns/CampaignSidebar.tsx:253)"}, "properties": {"repobilityId": "431ddd6d62268edd", "scanner": "scanner-primary", "fingerprint": "292ff6efa0501b93", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f216f7f2ec84a965", "level": "error", "message": {"text": "Dangling fetch: POST /api/foundry/auth/validate (src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:57)"}, "properties": {"repobilityId": "a8eaa4877e629a78", "scanner": "scanner-primary", "fingerprint": "f216f7f2ec84a965", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d815586d15c11fec", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/foundry/status?installationId=${encodeURIComponent(installationId)} (src/views/components/organisms/campaigns/CampaignFoundryOverlay.tsx:178)"}, "properties": {"repobilityId": "dbd096324b579d9a", "scanner": "scanner-primary", "fingerprint": "d815586d15c11fec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e75b096c8860427", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/TipGmCard.tsx:44)"}, "properties": {"repobilityId": "fecb388b5c9e38c3", "scanner": "scanner-primary", "fingerprint": "7e75b096c8860427", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9dc7cff23ee8a731", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/TipGmCard.tsx:61)"}, "properties": {"repobilityId": "29544f6e2613333b", "scanner": "scanner-primary", "fingerprint": "9dc7cff23ee8a731", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2072db93b2f72bf", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/PlayerManagement.tsx:70)"}, "properties": {"repobilityId": "32348ce087f5bf77", "scanner": "scanner-primary", "fingerprint": "b2072db93b2f72bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ceacf2f6717c5ddc", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/PlayerManagement.tsx:96)"}, "properties": {"repobilityId": "bfbc0d1a5adb8154", "scanner": "scanner-primary", "fingerprint": "ceacf2f6717c5ddc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecfd86bd1702e143", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/players/${playerId} (src/views/components/organisms/campaigns/PlayerManagement.tsx:135)"}, "properties": {"repobilityId": "628cd185e80468eb", "scanner": "scanner-primary", "fingerprint": "ecfd86bd1702e143", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67f8f599bf09e1ee", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/players/${playerId} (src/views/components/organisms/campaigns/PlayerManagement.tsx:156)"}, "properties": {"repobilityId": "1c14c91236428006", "scanner": "scanner-primary", "fingerprint": "67f8f599bf09e1ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab4e61b364d4710a", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/PlayerManagement.tsx:166)"}, "properties": {"repobilityId": "b400ba89fac1c48d", "scanner": "scanner-primary", "fingerprint": "ab4e61b364d4710a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba6f30e20316b1a7", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/game-systems?type=ttrpg (src/views/components/organisms/campaigns/CampaignGeneralSettings.tsx:45)"}, "properties": {"repobilityId": "8464ef8b8a79c41a", "scanner": "scanner-primary", "fingerprint": "ba6f30e20316b1a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-376c1dce66cabd87", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignGeneralSettings.tsx:66)"}, "properties": {"repobilityId": "d8108c5a14fe6333", "scanner": "scanner-primary", "fingerprint": "376c1dce66cabd87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-732358de2ec0475d", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/channels/${textChannelId}/threads (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:205)"}, "properties": {"repobilityId": "7856b1bf64356841", "scanner": "scanner-primary", "fingerprint": "732358de2ec0475d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c78a4434d0006272", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/forum-tags?forumChannelId=${forumChannelId} (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:218)"}, "properties": {"repobilityId": "d0fccaa4d41ce414", "scanner": "scanner-primary", "fingerprint": "c78a4434d0006272", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01ef15d9eff7e891", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/voice-channels (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:230)"}, "properties": {"repobilityId": "08494a3b6607d6e7", "scanner": "scanner-primary", "fingerprint": "01ef15d9eff7e891", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7dd9c4a41b6eab5", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/channels/${textChannelId}/threads (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:261)"}, "properties": {"repobilityId": "37aa6fe3a631299b", "scanner": "scanner-primary", "fingerprint": "b7dd9c4a41b6eab5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecab2379070e2fd4", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/text-channels (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:298)"}, "properties": {"repobilityId": "37d86bae4c62af5c", "scanner": "scanner-primary", "fingerprint": "ecab2379070e2fd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79445a914cff2fdd", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/forum-channels (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:356)"}, "properties": {"repobilityId": "5686e6a6194615eb", "scanner": "scanner-primary", "fingerprint": "79445a914cff2fdd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbd69c2c7937783e", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/forum-tags (src/views/components/organisms/campaigns/CampaignChannelConfig.tsx:399)"}, "properties": {"repobilityId": "64490e8c606eeb58", "scanner": "scanner-primary", "fingerprint": "cbd69c2c7937783e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c920b16f66ed33bf", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/campaigns/PartyChatSettings.tsx:133)"}, "properties": {"repobilityId": "e9509ee66c570e68", "scanner": "scanner-primary", "fingerprint": "c920b16f66ed33bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2ed08934600d1a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaign.id}/view (src/views/components/organisms/campaigns/PartyChatSettings.tsx:185)"}, "properties": {"repobilityId": "8296950943caf376", "scanner": "scanner-primary", "fingerprint": "d2ed08934600d1a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a2e88e934b43156", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaign.id}/parties/${party.id} (src/views/components/organisms/campaigns/PartyChatSettings.tsx:213)"}, "properties": {"repobilityId": "cdbc0a014f08698b", "scanner": "scanner-primary", "fingerprint": "3a2e88e934b43156", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc854e719576c8a9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaign.id} (src/views/components/organisms/campaigns/PartyChatSettings.tsx:237)"}, "properties": {"repobilityId": "d2ba556c896cd331", "scanner": "scanner-primary", "fingerprint": "fc854e719576c8a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-464221e04db53a39", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:122)"}, "properties": {"repobilityId": "3ea6270e87a17553", "scanner": "scanner-primary", "fingerprint": "464221e04db53a39", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2537b0de3c046b08", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:135)"}, "properties": {"repobilityId": "12e3805144acae72", "scanner": "scanner-primary", "fingerprint": "2537b0de3c046b08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a745645564ac96ae", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/parties/${party.id}/members (src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:146)"}, "properties": {"repobilityId": "795e736eca85b6fc", "scanner": "scanner-primary", "fingerprint": "a745645564ac96ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fda81b701b56ca13", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/invites (src/views/components/organisms/campaigns/PartyPlayersPanel.tsx:273)"}, "properties": {"repobilityId": "0ed63e6be3618b05", "scanner": "scanner-primary", "fingerprint": "fda81b701b56ca13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1fabbe2b1147a27", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/SessionPlayView.tsx:397)"}, "properties": {"repobilityId": "ccb8fc19c65db201", "scanner": "scanner-primary", "fingerprint": "f1fabbe2b1147a27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d812ec8cc8185d9", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/wallet (src/views/components/organisms/campaigns/SessionPlayView.tsx:455)"}, "properties": {"repobilityId": "3d87e5121ced1f03", "scanner": "scanner-primary", "fingerprint": "1d812ec8cc8185d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a216bf60fca95eb8", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/account/payments/tip (src/views/components/organisms/campaigns/SessionPlayView.tsx:466)"}, "properties": {"repobilityId": "00a15709ecf5bf5d", "scanner": "scanner-primary", "fingerprint": "a216bf60fca95eb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-adf54673dbad2e7d", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:56)"}, "properties": {"repobilityId": "a089935d87f68280", "scanner": "scanner-primary", "fingerprint": "adf54673dbad2e7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e3ea45d3f498d55", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties/${id}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:68)"}, "properties": {"repobilityId": "064ef8c54d2e5697", "scanner": "scanner-primary", "fingerprint": "3e3ea45d3f498d55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96263821b230e015", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/key-terms/preview (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:87)"}, "properties": {"repobilityId": "5d14447ed1b1f593", "scanner": "scanner-primary", "fingerprint": "96263821b230e015", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9af54a84f3c5171f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:111)"}, "properties": {"repobilityId": "2927158396e69d1c", "scanner": "scanner-primary", "fingerprint": "9af54a84f3c5171f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-222998fb87f51272", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:124)"}, "properties": {"repobilityId": "166bca7421b847dc", "scanner": "scanner-primary", "fingerprint": "222998fb87f51272", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e0529cd63a0fcdf", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/key-terms/preview (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:253)"}, "properties": {"repobilityId": "4a6503c60fb88a0a", "scanner": "scanner-primary", "fingerprint": "3e0529cd63a0fcdf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83502554f53ae3b6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:267)"}, "properties": {"repobilityId": "88e44402aab6a886", "scanner": "scanner-primary", "fingerprint": "83502554f53ae3b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8ba98e176467869", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:331)"}, "properties": {"repobilityId": "3ed43cb10ec958a3", "scanner": "scanner-primary", "fingerprint": "d8ba98e176467869", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a9a355c54ce769b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId}/key-terms (src/views/components/organisms/campaigns/CampaignKeyTermsTab.tsx:345)"}, "properties": {"repobilityId": "246f482b0ac420ca", "scanner": "scanner-primary", "fingerprint": "3a9a355c54ce769b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a2b05702752d5cc", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/SheetProvidersSection.tsx:128)"}, "properties": {"repobilityId": "4ec9a2af6aa56b41", "scanner": "scanner-primary", "fingerprint": "3a2b05702752d5cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c133f0c1f2ed55d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:98)"}, "properties": {"repobilityId": "511e3cc2adc80493", "scanner": "scanner-primary", "fingerprint": "c133f0c1f2ed55d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c82e021dffb74f05", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignManagerWindowChrome.tsx:121)"}, "properties": {"repobilityId": "5433765499c23903", "scanner": "scanner-primary", "fingerprint": "c82e021dffb74f05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b103a04f1c4d0947", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/account/heroforge/meta?id=${currentId} (src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:81)"}, "properties": {"repobilityId": "ead260b048f3c8a2", "scanner": "scanner-primary", "fingerprint": "b103a04f1c4d0947", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14c7770d97a0e6b8", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:92)"}, "properties": {"repobilityId": "ed835617d6a5b495", "scanner": "scanner-primary", "fingerprint": "14c7770d97a0e6b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b3642a262798ec6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/campaigns/CharacterSheetAvatar.tsx:118)"}, "properties": {"repobilityId": "60d85f8d907e5349", "scanner": "scanner-primary", "fingerprint": "6b3642a262798ec6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad834e567b29dc3d", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignSlug}/journal/${entry.id}/tip (src/views/components/organisms/campaigns/JournalList.tsx:76)"}, "properties": {"repobilityId": "e076a69adb1c0ac6", "scanner": "scanner-primary", "fingerprint": "ad834e567b29dc3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6a33c643e30a4eb", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/PartiesPage.tsx:264)"}, "properties": {"repobilityId": "897ade8716514594", "scanner": "scanner-primary", "fingerprint": "e6a33c643e30a4eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cae89f52f175a41", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaigns/PartiesPage.tsx:310)"}, "properties": {"repobilityId": "113036c9b9b4ccee", "scanner": "scanner-primary", "fingerprint": "1cae89f52f175a41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e3eb67a70aa2441", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/discord/guilds (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:170)"}, "properties": {"repobilityId": "335c9c2979b7c070", "scanner": "scanner-primary", "fingerprint": "5e3eb67a70aa2441", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f1ae8c5c0666cea", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/parties (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:186)"}, "properties": {"repobilityId": "882345d386df47ff", "scanner": "scanner-primary", "fingerprint": "4f1ae8c5c0666cea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69afefa526a5925d", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/all-channels?guildId=${guildId} (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:206)"}, "properties": {"repobilityId": "7d971a396ee16bdb", "scanner": "scanner-primary", "fingerprint": "69afefa526a5925d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-da7f88a0f85eb318", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/discord/roles?guildId=${guildId} (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:209)"}, "properties": {"repobilityId": "e291c3b909e75728", "scanner": "scanner-primary", "fingerprint": "da7f88a0f85eb318", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0f87208bc358a96", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignChatSettings.tsx:261)"}, "properties": {"repobilityId": "5c32700548b33afe", "scanner": "scanner-primary", "fingerprint": "a0f87208bc358a96", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b5118a8e2b1bb18", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/PartySheetsPanel.tsx:63)"}, "properties": {"repobilityId": "fd67d5638a6e5797", "scanner": "scanner-primary", "fingerprint": "9b5118a8e2b1bb18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0e3241ae84a5e12", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/PartySheetsPanel.tsx:200)"}, "properties": {"repobilityId": "5146e5225337821e", "scanner": "scanner-primary", "fingerprint": "f0e3241ae84a5e12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b5f5c4713e7847e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/PartySheetsPanel.tsx:220)"}, "properties": {"repobilityId": "69dded1c164de840", "scanner": "scanner-primary", "fingerprint": "7b5f5c4713e7847e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd1972ce462d79d9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/player/campaigns/${campaignId}/invites/${id} (src/views/components/organisms/campaigns/PartyPlayersTabClient.tsx:30)"}, "properties": {"repobilityId": "f5de91c5be1268b2", "scanner": "scanner-primary", "fingerprint": "cd1972ce462d79d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be82ac67559c7761", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/PartyToolsPanel.tsx:36)"}, "properties": {"repobilityId": "5e977f38de4a046d", "scanner": "scanner-primary", "fingerprint": "be82ac67559c7761", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78d172477dd205a4", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/PartyVttPanel.tsx:50)"}, "properties": {"repobilityId": "a775ef48b103e697", "scanner": "scanner-primary", "fingerprint": "78d172477dd205a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7600c2c388ebaaf", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${encodeURIComponent(campaignId)}/parties/${encodeURIComponent(partyId)}/tip (src/views/components/organisms/campaigns/TipPartyGmCard.tsx:28)"}, "properties": {"repobilityId": "21e7e7fbfd905b83", "scanner": "scanner-primary", "fingerprint": "e7600c2c388ebaaf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-269c4bd1a41362ec", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignSlug}/parties/${partySlug}/entities (src/views/components/organisms/campaigns/PartyEntityCreateForm.tsx:120)"}, "properties": {"repobilityId": "5a515696c485e313", "scanner": "scanner-primary", "fingerprint": "269c4bd1a41362ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6acbf0ad9fee24e9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/campaigns/CharacterSheetProvider.tsx:105)"}, "properties": {"repobilityId": "dea4749150d14273", "scanner": "scanner-primary", "fingerprint": "6acbf0ad9fee24e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a1f6423a09644d6b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${character.id} (src/views/components/organisms/campaigns/CharacterSheetInfoTab.tsx:43)"}, "properties": {"repobilityId": "d315e49959d67fff", "scanner": "scanner-primary", "fingerprint": "a1f6423a09644d6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba11214ccb0e23d3", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/sessions/active/rolls (src/views/components/organisms/campaigns/RollLogPanel.tsx:106)"}, "properties": {"repobilityId": "56efd789bca607a5", "scanner": "scanner-primary", "fingerprint": "ba11214ccb0e23d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1766108c3857747c", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/journal/${entry.id}/tip (src/views/components/organisms/campaigns/JournalEntryView.tsx:37)"}, "properties": {"repobilityId": "5c6931121c055918", "scanner": "scanner-primary", "fingerprint": "1766108c3857747c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a74f52d16100dd6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${party.id} (src/views/components/organisms/campaigns/PartyGeneralSettings.tsx:60)"}, "properties": {"repobilityId": "ff2befe40c2e45ea", "scanner": "scanner-primary", "fingerprint": "9a74f52d16100dd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-647f6b6326ce2cfc", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/roles (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:168)"}, "properties": {"repobilityId": "8af8149be41f0701", "scanner": "scanner-primary", "fingerprint": "647f6b6326ce2cfc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5e1546d1a78b044", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:183)"}, "properties": {"repobilityId": "2f842a1faad55de6", "scanner": "scanner-primary", "fingerprint": "d5e1546d1a78b044", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-842994ee68be5c3a", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/discord/voice-channels (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:206)"}, "properties": {"repobilityId": "0015dc383a818c5a", "scanner": "scanner-primary", "fingerprint": "842994ee68be5c3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ff5eac8275e48503", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${campaignId}/parties/${partyId}/sync-discord-role (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:237)"}, "properties": {"repobilityId": "7e09885a8918d984", "scanner": "scanner-primary", "fingerprint": "ff5eac8275e48503", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0251c8e8beb8939", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/parties/${partyId} (src/views/components/organisms/campaigns/PartyDiscordSection.tsx:258)"}, "properties": {"repobilityId": "764dd1833e54788f", "scanner": "scanner-primary", "fingerprint": "b0251c8e8beb8939", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71d4751c77e8cf65", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:260)"}, "properties": {"repobilityId": "6788e8d38c7a4bba", "scanner": "scanner-primary", "fingerprint": "71d4751c77e8cf65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca1f840f2180e0ea", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns/${campaignId}/vtt/page-data (src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:405)"}, "properties": {"repobilityId": "4c996ba2a60ba144", "scanner": "scanner-primary", "fingerprint": "ca1f840f2180e0ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-570be1ce10e267d0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:436)"}, "properties": {"repobilityId": "8e9eea336572c0a8", "scanner": "scanner-primary", "fingerprint": "570be1ce10e267d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0019152080aeaf8", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId} (src/views/components/organisms/campaigns/CampaignSettingsPage.tsx:458)"}, "properties": {"repobilityId": "268cab31358ded2e", "scanner": "scanner-primary", "fingerprint": "a0019152080aeaf8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f5b62218562a586", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${encodeURIComponent(campaignId)}/tip (src/views/components/organisms/campaigns/TipStorytellerCard.tsx:46)"}, "properties": {"repobilityId": "ee40b27f36917ee0", "scanner": "scanner-primary", "fingerprint": "7f5b62218562a586", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b05730f2599543d2", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns/${props.campaignId}/characters/${props.character.id}/sheet-import-foundry (src/views/components/organisms/campaigns/sheets/CoreSheetRenderer.tsx:33)"}, "properties": {"repobilityId": "c5d676596da98b77", "scanner": "scanner-primary", "fingerprint": "b05730f2599543d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-64a499fedd71b9eb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/player/campaigns/${campaignId}/characters/${characterId}/hp (src/views/components/organisms/campaigns/sheets/useEditableHp.ts:111)"}, "properties": {"repobilityId": "813aed4091800e9a", "scanner": "scanner-primary", "fingerprint": "64a499fedd71b9eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:fetcher"]}}, {"ruleId": "scanner-47a696ebe1a3babc", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/account/compute/auto-reload (src/views/components/atoms/AutoReloadToggle.tsx:12)"}, "properties": {"repobilityId": "485a4da8257aaa62", "scanner": "scanner-primary", "fingerprint": "47a696ebe1a3babc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c6c2a444a497f9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/public/pair (src/views/talespire/TalespireSignInView.tsx:41)"}, "properties": {"repobilityId": "f821e996d4cd634a", "scanner": "scanner-primary", "fingerprint": "5c6c2a444a497f9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-312e1208f8e41aef", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/public/pair/${pairId} (src/views/talespire/TalespireSignInView.tsx:72)"}, "properties": {"repobilityId": "c1544834873122ea", "scanner": "scanner-primary", "fingerprint": "312e1208f8e41aef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dbbd62fe060dd5f4", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/player/campaigns (src/views/talespire/TalespireCampaignPicker.tsx:80)"}, "properties": {"repobilityId": "0c556015bfd7ac8a", "scanner": "scanner-primary", "fingerprint": "dbbd62fe060dd5f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d5bab10b4b976ad", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/player/campaigns (src/views/talespire/TalespireCampaignPicker.tsx:118)"}, "properties": {"repobilityId": "6a03af7364ed6081", "scanner": "scanner-primary", "fingerprint": "1d5bab10b4b976ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9cad95be24ad6aa6", "level": "note", "message": {"text": "Unused endpoint: GET /creatures"}, "properties": {"repobilityId": "8bf29d8d8b1fb5c4", "scanner": "scanner-primary", "fingerprint": "9cad95be24ad6aa6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d41bbe6a83623f62", "level": "note", "message": {"text": "Unused endpoint: GET /initiative"}, "properties": {"repobilityId": "11c4e85d5c14af0e", "scanner": "scanner-primary", "fingerprint": "d41bbe6a83623f62", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cff8da5fbc19c76d", "level": "note", "message": {"text": "Unused endpoint: POST /chat"}, "properties": {"repobilityId": "9e98c436faf01c33", "scanner": "scanner-primary", "fingerprint": "cff8da5fbc19c76d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-684f0e83ba7e1558", "level": "note", "message": {"text": "Unused endpoint: GET "}, "properties": {"repobilityId": "a036bcb6b280928a", "scanner": "scanner-primary", "fingerprint": "684f0e83ba7e1558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}