{"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-1ea93b52e78b2d3e", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/scripts/generateSampleDebate.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/scripts/generateSampleDebate.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-018e94f99766c9e4", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/App.tsx:5287", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/App.tsx:5287"}, "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-cc193bf316120f7d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/CommandPalette.tsx:136", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/CommandPalette.tsx:136"}, "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-ae96c6d4ec4f44ba", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/TmuxSwarmBoard.tsx:423", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/TmuxSwarmBoard.tsx:423"}, "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-5dfeb6ff92fee538", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/TimelineScrubber.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/TimelineScrubber.tsx:168"}, "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-bffefa3b02dcfe87", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ControlQueueDrawer.tsx:521", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ControlQueueDrawer.tsx:521"}, "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-c585e7539490e880", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/EvolveMementoPanel.tsx:288", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/EvolveMementoPanel.tsx:288"}, "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-1a0fb0498a27020d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/CheatSheetOverlay.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/CheatSheetOverlay.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-c09718970c04868a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/AgentsSidebar.tsx:360", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/AgentsSidebar.tsx:360"}, "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-d1e679e299d9fce0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/SummonTheater.tsx:365", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/SummonTheater.tsx:365"}, "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-edbc7c4a521d6866", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ApprovalToastBar.tsx:39", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ApprovalToastBar.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-446de2ca277f21bd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/PublicWorkTracePanel.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/PublicWorkTracePanel.tsx:61"}, "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-b94b8660d72ae677", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/ProviderReadiness", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/ProviderReadinessPreflight.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-df1c8e6b896eaca3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/MakimaDelegationC", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/MakimaDelegationConsole.tsx:87"}, "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-a6950ddf2d30ed1c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentHermesContro", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentHermesControlCard.tsx:73"}, "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-56bbd36abf0b1c4a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentMemoryContin", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentMemoryContinuityPanel.tsx:124"}, "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-9c0299792ccfc579", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentConversation", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentConversationFlowPanel.tsx:62"}, "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-33ba043fcd57f95c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentLiveWorkStat", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentLiveWorkStatus.tsx:24"}, "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-048f1581abeaf741", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentQuickSwitchP", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentQuickSwitchPanel.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-28539c3a388ddea2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentRosterSkillP", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentRosterSkillPicker.tsx:76"}, "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-3ec51a8cf440b7af", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/index.tsx:476", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/index.tsx:476"}, "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-2423bef1c7b6c7a5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/Composer.tsx:162", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/Composer.tsx:162"}, "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-b325adf0eacfd79a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/MessageThread.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/MessageThread.tsx:721"}, "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-0c7ff5e7ca03fbb7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/WorkspaceChangesP", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/WorkspaceChangesPanel.tsx:69"}, "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-7b5f9703fc500e56", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/WorkTheater.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/WorkTheater.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-51e65f9aa5cb6e8e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/ConversationAgent", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/ConversationAgentRail.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-0922479bc7db9c51", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/appbuild/CodingRunnerCard.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/appbuild/CodingRunnerCard.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-0eb3934daba04d59", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/OperatorCockpit.tsx:25", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/OperatorCockpit.tsx:257"}, "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-1cf724226d823601", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/DispatchHistoryCard.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/DispatchHistoryCard.tsx:31"}, "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-32dd419e729595d6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/CockpitHealthHero.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/CockpitHealthHero.tsx:61"}, "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-2fd1c6081ffde863", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/WorkerFleetCard.tsx:15", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/WorkerFleetCard.tsx:156"}, "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-f2ed614a948356ff", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/WorkReceiptLedgerCard.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/WorkReceiptLedgerCard.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-cb5134c42bd36bef", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/MaturityReadinessCard.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/MaturityReadinessCard.tsx:133"}, "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-7896f5a8d6782b57", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/HandoffCard.tsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/HandoffCard.tsx:34"}, "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-ef227d2d53a0d510", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/debate-chamber/DebateAnnexPage.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/debate-chamber/DebateAnnexPage.tsx:150"}, "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-4c98fd98e1c348b1", "name": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/lib/codingTurnRunner.test.ts:194", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/lib/codingTurnRunner.test.ts:194"}, "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-8b4d5c14ee45c809", "name": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/lib/missionPublishPrefill.test.ts:173", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/lib/missionPublishPrefill.test.ts:173"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a12cd33e6fea8424", "name": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:5345", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:5345"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1042094a7bb500fb", "name": "Stray `console.log` in TS/JS \u2014 apps/server/src/integrations/githubFileChangeWriteGuards.test.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/integrations/githubFileChangeWriteGuards.test.ts:91"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65981c39ad419114", "name": "Stray `console.log` in TS/JS \u2014 apps/server/src/integrations/githubReadonlyClient.test.ts:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/integrations/githubReadonlyClient.test.ts:151"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15dde6e02a92c5e2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/v0/v0-output/components/ui/chart.tsx:83", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/v0/v0-output/components/ui/chart.tsx:83"}, "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-9b3371774c50e132", "name": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/conversation/conversation-header.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/conversation/conversation-header.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-8c5b7ed088a49868", "name": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/sidebar/memento-panel.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/sidebar/memento-panel.tsx:153"}, "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-404ccfdb374f4642", "name": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/sidebar/agent-card.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/sidebar/agent-card.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-ecfdcf85a08c8946", "name": "TODO/FIXME marker in shipping code \u2014 packages/protocol/src/scaffold.ts:159", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/protocol/src/scaffold.ts:159"}, "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-805690e6a3ecdea8", "name": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/components/MissionBoardPanel.publish.test.tsx:262", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/components/MissionBoardPanel.publish.test.tsx:262"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-8d76ec49555bfdae", "name": "Insecure pattern 'exec_used' in apps/desktop/src/lib/sandboxRunner.ts:24", "shortDescription": {"text": "Insecure pattern 'exec_used' in apps/desktop/src/lib/sandboxRunner.ts:24"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97b5055b64ebdc53", "name": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/lib/missionPublishPrefill.test.ts:105", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/lib/missionPublishPrefill.test.ts:105"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-2079f7fc873046ad", "name": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/runtime/stage2Runtime.test.ts:47", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/runtime/stage2Runtime.test.ts:47"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-ac949c8829159a3e", "name": "Insecure pattern 'node_child_process' in apps/server/src/index.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/index.ts:9"}, "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-b267f0016d033135", "name": "Insecure pattern 'private_key_in_repo' in apps/server/src/integrations/githubFileChangeWriteGuards.test.ts:129", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in apps/server/src/integrations/githubFileChangeWriteGuards.test.ts:129"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-118354aa812317e0", "name": "Insecure pattern 'private_key_in_repo' in apps/server/src/integrations/githubPullRequestWriteGuards.test.ts:113", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in apps/server/src/integrations/githubPullRequestWriteGuards.test.ts:113"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-541666ed52a25ad1", "name": "Insecure pattern 'node_child_process' in apps/server/src/routes/autorunSafety.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/routes/autorunSafety.ts:1"}, "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-6a6e9d82eda89c66", "name": "Insecure pattern 'dangerous_innerhtml' in docs/v0/v0-output/components/ui/chart.tsx:83", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/v0/v0-output/components/ui/chart.tsx:83"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c40dc88d8712daf", "name": "Insecure pattern 'node_child_process' in scripts/orchestration-mvp-audit.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/orchestration-mvp-audit.mjs:2"}, "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-c06a621a23566676", "name": "Insecure pattern 'node_child_process' in scripts/check-personal-ai-sessions.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-personal-ai-sessions.mjs:2"}, "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-28d481e495987a02", "name": "Possible secret in scripts/smoke-personal-ai-sessions.mjs", "shortDescription": {"text": "Possible secret in scripts/smoke-personal-ai-sessions.mjs"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-423aa41c529dc204", "name": "Insecure pattern 'node_child_process' in scripts/smoke-personal-ai-sessions.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/smoke-personal-ai-sessions.mjs:2"}, "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-bb412b1fae7f87f8", "name": "Insecure pattern 'node_child_process' in scripts/create-antigravity-pro2-task.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/create-antigravity-pro2-task.mjs:2"}, "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-728769ee6a84ac79", "name": "Insecure pattern 'node_child_process' in scripts/smoke-antigravity-worker.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/smoke-antigravity-worker.mjs:2"}, "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-3ef913ce5f73e36c", "name": "Possible secret in scripts/smoke-provider-ai-manifest.mjs", "shortDescription": {"text": "Possible secret in scripts/smoke-provider-ai-manifest.mjs"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-81ed4cc1c7b12043", "name": "Insecure pattern 'node_child_process' in scripts/create-antigravity-pro1-task.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/create-antigravity-pro1-task.mjs:2"}, "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-2ed905a7aa8a9448", "name": "Insecure pattern 'node_child_process' in scripts/smoke-orchestration-os.mjs:21", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/smoke-orchestration-os.mjs:21"}, "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-d02da48d4d6dadf9", "name": "Insecure pattern 'node_child_process' in scripts/smoke-server-boot.mjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/smoke-server-boot.mjs:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35ac302cfefe0269", "name": "Insecure pattern 'node_child_process' in scripts/create-antigravity-ultra-task.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/create-antigravity-ultra-task.mjs:2"}, "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-26d92f8801506df4", "name": "Insecure pattern 'node_child_process' in scripts/provider-ai-smoke.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/provider-ai-smoke.mjs:2"}, "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-54aff3b403206211", "name": "Insecure pattern 'node_child_process' in scripts/repo-map.mjs:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/repo-map.mjs:16"}, "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-b453b88982f0fa75", "name": "Insecure pattern 'node_child_process' in scripts/deploy-dgx02.mjs:36", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/deploy-dgx02.mjs:36"}, "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-64d133d55959c579", "name": "Insecure pattern 'node_child_process' in packages/providers/src/node/grokCliOAuthAdapter.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/providers/src/node/grokCliOAuthAdapter.ts:1"}, "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-26cb052752f99403", "name": "Insecure pattern 'node_child_process' in packages/providers/src/node/claudeCliAdapter.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/providers/src/node/claudeCliAdapter.ts:1"}, "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-ab72deb2057cb677", "name": "Insecure pattern 'node_child_process' in packages/providers/src/node/codexCliOAuthAdapter.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/providers/src/node/codexCliOAuthAdapter.ts:1"}, "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-761bca9e8d8dfd08", "name": "Insecure pattern 'node_child_process' in packages/providers/src/node/geminiCliAdapter.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/providers/src/node/geminiCliAdapter.ts:1"}, "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-27924aa79fa4a517", "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-4650c0de78e8a7ca", "name": "Very large file: apps/desktop/src/App.tsx (5763 lines)", "shortDescription": {"text": "Very large file: apps/desktop/src/App.tsx (5763 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b0eebfaac207716", "name": "Very large file: apps/desktop/src/components/MissionBoardPanel.tsx (1186 lines)", "shortDescription": {"text": "Very large file: apps/desktop/src/components/MissionBoardPanel.tsx (1186 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5387f8d05fbbe63b", "name": "Very large file: apps/desktop/src/components/coding/CodingWorkbench.tsx (1153 lines)", "shortDescription": {"text": "Very large file: apps/desktop/src/components/coding/CodingWorkbench.tsx (1153 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9525b7a75264ff8f", "name": "Very large file: apps/server/src/index.test.ts (4727 lines)", "shortDescription": {"text": "Very large file: apps/server/src/index.test.ts (4727 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9fb823e5ec768d29", "name": "Very large file: apps/server/src/index.ts (7379 lines)", "shortDescription": {"text": "Very large file: apps/server/src/index.ts (7379 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3c131cab3890c24", "name": "Very large file: apps/server/src/routes/github.ts (2292 lines)", "shortDescription": {"text": "Very large file: apps/server/src/routes/github.ts (2292 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-189a0dd8210ee86c", "name": "Very large file: packages/protocol/src/index.ts (2393 lines)", "shortDescription": {"text": "Very large file: packages/protocol/src/index.ts (2393 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d57b3f82d2270c5b", "name": "Node manifest has dependencies but no lockfile: apps/desktop/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0c2205560692580", "name": "Node manifest has dependencies but no lockfile: apps/mobile/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/mobile/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f12bbcc60e1f76c", "name": "Node manifest has dependencies but no lockfile: apps/server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/server/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44699306c3b7034e", "name": "Node manifest has dependencies but no lockfile: packages/providers/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/providers/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dcc93e7cda95e983", "name": "Node manifest has dependencies but no lockfile: packages/simplememo/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/simplememo/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3c6f2be45e72de9d", "name": "Node manifest has dependencies but no lockfile: packages/agents/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/agents/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b3d0fa3fe79a342", "name": "Node manifest has dependencies but no lockfile: packages/protocol/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/protocol/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 118 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 200 placeholder/mock markers across 77 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34c9d0df24b795db", "name": "Commented-code block (7 lines) in apps/desktop/src/main.tsx:29", "shortDescription": {"text": "Commented-code block (7 lines) in apps/desktop/src/main.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-b1e8f65a4e260349", "name": "Commented-code block (6 lines) in apps/desktop/src/App.tsx:5287", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/App.tsx:5287"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb25683e18a10cd8", "name": "Legacy-named symbol `config_memory_project_only_v1` in apps/desktop/src/seeds/configFiles.test.ts:18", "shortDescription": {"text": "Legacy-named symbol `config_memory_project_only_v1` in apps/desktop/src/seeds/configFiles.test.ts:18"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e278a8d1e539ce84", "name": "Legacy-named symbol `config_soul_orchestrator_direct_v1` in apps/desktop/src/seeds/configFiles.ts:9", "shortDescription": {"text": "Legacy-named symbol `config_soul_orchestrator_direct_v1` in apps/desktop/src/seeds/configFiles.ts:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d2f56c43e17cd97", "name": "Commented-code block (5 lines) in apps/desktop/src/components/MissionBoardPanel.tsx:563", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/components/MissionBoardPanel.tsx:563"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76dcf031203030e8", "name": "Legacy-named symbol `external_legacy` in apps/desktop/src/components/ChannelRailPanel.tsx:20", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/components/ChannelRailPanel.tsx:20"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df44c46a6ccb5328", "name": "Legacy-named symbol `plan_v1` in apps/desktop/src/components/MissionBoardContainer.scaffoldRefresh.test.tsx:116", "shortDescription": {"text": "Legacy-named symbol `plan_v1` in apps/desktop/src/components/MissionBoardContainer.scaffoldRefresh.test.tsx:116"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e84ffc2f538ce4b4", "name": "Legacy-named symbol `config_skill_evolvememento_continuity_v1` in apps/desktop/src/components/ConversationWorkbench/Agen", "shortDescription": {"text": "Legacy-named symbol `config_skill_evolvememento_continuity_v1` in apps/desktop/src/components/ConversationWorkbench/AgentSkillProfilePanel.test.tsx:22"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b62f7451efa37cb4", "name": "Commented-code block (6 lines) in apps/desktop/src/lib/appFixDraft.ts:212", "shortDescription": {"text": "Commented-code block (6 lines) in apps/desktop/src/lib/appFixDraft.ts:212"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1aae1da246890a6", "name": "Legacy-named symbol `msg_assistant_visible_copy` in apps/desktop/src/lib/publicWorkTrace.test.ts:496", "shortDescription": {"text": "Legacy-named symbol `msg_assistant_visible_copy` in apps/desktop/src/lib/publicWorkTrace.test.ts:496"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18ee45c2b1d67a48", "name": "Commented-code block (7 lines) in apps/desktop/src/lib/codingChat.ts:337", "shortDescription": {"text": "Commented-code block (7 lines) in apps/desktop/src/lib/codingChat.ts: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-bdb69ca7bd4e33c4", "name": "Commented-code block (5 lines) in apps/desktop/src/lib/helpers.ts:481", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/lib/helpers.ts:481"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c8f87b71cac9497", "name": "Legacy-named symbol `memory_old` in apps/desktop/src/lib/memoryCuratorRuntime.test.ts:156", "shortDescription": {"text": "Legacy-named symbol `memory_old` in apps/desktop/src/lib/memoryCuratorRuntime.test.ts:156"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4af98b524ebaf10d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/lib/ttsSynthesizer.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/lib/ttsSynthesizer.ts:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a6089af414fb5178", "name": "Legacy-named symbol `external_legacy` in apps/desktop/src/lib/railStatusLabels.ts:86", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/lib/railStatusLabels.ts:86"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b944198e5c59535", "name": "Legacy-named symbol `provider_backup` in apps/desktop/src/lib/providerFallbackPlan.test.ts:29", "shortDescription": {"text": "Legacy-named symbol `provider_backup` in apps/desktop/src/lib/providerFallbackPlan.test.ts:29"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57467738623e203b", "name": "Legacy-named symbol `config_skill_role_tool_profiles_v1` in apps/desktop/src/lib/agentRuntimeConfig.test.ts:20", "shortDescription": {"text": "Legacy-named symbol `config_skill_role_tool_profiles_v1` in apps/desktop/src/lib/agentRuntimeConfig.test.ts:20"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-961b8b6af1bd4b70", "name": "Commented-code block (5 lines) in apps/desktop/src/lib/missionPublishPrefill.ts:191", "shortDescription": {"text": "Commented-code block (5 lines) in apps/desktop/src/lib/missionPublishPrefill.ts:191"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6159e8232b82b2ab", "name": "Legacy-named symbol `sora_legacy` in apps/desktop/src/lib/hermesSlotPool.test.ts:49", "shortDescription": {"text": "Legacy-named symbol `sora_legacy` in apps/desktop/src/lib/hermesSlotPool.test.ts:49"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47a78314320196b1", "name": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage8Ingress.test.ts:34", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage8Ingress.test.ts:34"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6314e8472835e73", "name": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage9Permission.ts:192", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage9Permission.ts:192"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5aedaf388f4c764", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/runtime/stage12DgxProvider.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/runtime/stage12DgxProvider.ts: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-e15218cdc5f11601", "name": "Legacy-named symbol `event_packet_old` in apps/desktop/src/runtime/stage19CodingPacketReplay.test.ts:35", "shortDescription": {"text": "Legacy-named symbol `event_packet_old` in apps/desktop/src/runtime/stage19CodingPacketReplay.test.ts:35"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33aa53aa5f96f242", "name": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage8Ingress.ts:43", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage8Ingress.ts:43"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5c041efee917c145", "name": "Legacy-named symbol `config_skill_role_tool_profiles_v1` in apps/desktop/src/runtime/conversationPipeline.test.ts:80", "shortDescription": {"text": "Legacy-named symbol `config_skill_role_tool_profiles_v1` in apps/desktop/src/runtime/conversationPipeline.test.ts:80"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa31803ca62a7a7e", "name": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage6Memory.ts:181", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage6Memory.ts:181"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be7fde5d9747384b", "name": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage27MemoryApi.test.ts:60", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage27MemoryApi.test.ts:60"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad621f23878182bd", "name": "Legacy-named symbol `external_legacy` in apps/server/src/index.test.ts:572", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/server/src/index.test.ts:572"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4527bc8e953d98ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/index.test.ts:1741", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/index.test.ts:1741"}, "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-c5c089932ba6ce2e", "name": "Legacy-named symbol `external_legacy` in apps/server/src/index.ts:3060", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in apps/server/src/index.ts:3060"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-959cf0486607260d", "name": "Commented-code block (6 lines) in apps/server/src/index.ts:6905", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/index.ts:6905"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c72be786643e97c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/integrations/githubOctokitClient.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/integrations/githubOctokitClient.ts: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-04654619aedd6a86", "name": "Commented-code block (9 lines) in apps/server/src/routes/missions.fromBlueprintScaffoldSeed.test.ts:175", "shortDescription": {"text": "Commented-code block (9 lines) in apps/server/src/routes/missions.fromBlueprintScaffoldSeed.test.ts:175"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31890b8bae0a94eb", "name": "Commented-code block (10 lines) in apps/server/src/routes/github.ts:410", "shortDescription": {"text": "Commented-code block (10 lines) in apps/server/src/routes/github.ts:410"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d44dfbe80cd0418a", "name": "Legacy-named symbol `plan_v1` in apps/server/src/routes/missions.scaffoldlatest.test.ts:101", "shortDescription": {"text": "Legacy-named symbol `plan_v1` in apps/server/src/routes/missions.scaffoldlatest.test.ts:101"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d849c0600a77527", "name": "Commented-code block (8 lines) in apps/server/src/routes/missions.ts:869", "shortDescription": {"text": "Commented-code block (8 lines) in apps/server/src/routes/missions.ts:869"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5c8f8434188c774", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/notion-read.mjs:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/notion-read.mjs:37"}, "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-c02b251e26d1eb77", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-dgx-server.mjs:136", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-dgx-server.mjs:136"}, "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-a5d6c917abf41933", "name": "Commented-code block (6 lines) in scripts/smoke-tmux-dry-run.mjs:108", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/smoke-tmux-dry-run.mjs:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-116ecb5ecd08080a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-tmux-dry-run.mjs:233", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-tmux-dry-run.mjs:233"}, "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-9ee0e89c056c9d9e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/notion-write.mjs:264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/notion-write.mjs:264"}, "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-df9aa13f62c971ad", "name": "Commented-code block (5 lines) in packages/mcp/src/swarmTools.ts:144", "shortDescription": {"text": "Commented-code block (5 lines) in packages/mcp/src/swarmTools.ts:144"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c48864f45feac56", "name": "Legacy-named symbol `chara_card_v2` in packages/agents/src/characterCard.ts:32", "shortDescription": {"text": "Legacy-named symbol `chara_card_v2` in packages/agents/src/characterCard.ts:32"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9aaf684925314b7", "name": "Commented-code block (5 lines) in packages/agents/src/index.test.ts:287", "shortDescription": {"text": "Commented-code block (5 lines) in packages/agents/src/index.test.ts:287"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa9298bfae374865", "name": "Commented-code block (5 lines) in packages/agents/src/personaLoader.ts:157", "shortDescription": {"text": "Commented-code block (5 lines) in packages/agents/src/personaLoader.ts:157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a768b88992e1d9ff", "name": "Commented-code block (5 lines) in packages/agents/src/index.ts:483", "shortDescription": {"text": "Commented-code block (5 lines) in packages/agents/src/index.ts:483"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bb451e91d76b979", "name": "Legacy-named symbol `chara_card_v2` in packages/agents/src/characterCard.test.ts:13", "shortDescription": {"text": "Legacy-named symbol `chara_card_v2` in packages/agents/src/characterCard.test.ts:13"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bdd84855e98f550", "name": "Legacy-named symbol `external_legacy` in packages/protocol/src/index.test.ts:226", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in packages/protocol/src/index.test.ts:226"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e3ce70111a63aba", "name": "Legacy-named symbol `external_legacy` in packages/protocol/src/index.ts:338", "shortDescription": {"text": "Legacy-named symbol `external_legacy` in packages/protocol/src/index.ts:338"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9bea78f8668e602", "name": "Commented-code block (10 lines) in packages/protocol/src/index.ts:251", "shortDescription": {"text": "Commented-code block (10 lines) in packages/protocol/src/index.ts:251"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bea78a720072324", "name": "Commented-code block (11 lines) in packages/protocol/src/githubConnector.ts:143", "shortDescription": {"text": "Commented-code block (11 lines) in packages/protocol/src/githubConnector.ts:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ccdc7de87ae9a8ec", "name": "Commented-code block (10 lines) in packages/protocol/src/scaffold.ts:259", "shortDescription": {"text": "Commented-code block (10 lines) in packages/protocol/src/scaffold.ts:259"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-afebdb5a563aa21d", "name": "121 env vars used in code but missing from .env.example", "shortDescription": {"text": "121 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANTHROPIC_API_KEY`, `ANTHROPIC_API_KEY_ALT`, `ANTIGRAVITY_ROUTE_TYPE`, `APIFUN_API_KEY`, `APIFUN_API_KEY_FILE`, `APIFUN_BASE_URL`, `APIKEYFUN_ANTHROPIC_BASE_URL`, `APIKEYFUN_OPENAI_BASE_URL` + 113 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-48ccd87b71237304", "name": "Dangling fetch: GET https://api.notion.com/v1/pages/${resolvedPageId} (scripts/notion-read.mjs:206)", "shortDescription": {"text": "Dangling fetch: GET https://api.notion.com/v1/pages/${resolvedPageId} (scripts/notion-read.mjs:206)"}, "fullDescription": {"text": "`scripts/notion-read.mjs:206` calls `GET https://api.notion.com/v1/pages/${resolvedPageId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.notion.com/v1/pages/<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-6a44c4d5ab7f2a82", "name": "Dangling fetch: POST https://api.notion.com/v1/databases/${resolvedDbId}/query (scripts/notion-read.mjs:249)", "shortDescription": {"text": "Dangling fetch: POST https://api.notion.com/v1/databases/${resolvedDbId}/query (scripts/notion-read.mjs:249)"}, "fullDescription": {"text": "`scripts/notion-read.mjs:249` calls `POST https://api.notion.com/v1/databases/${resolvedDbId}/query` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.notion.com/v1/databases/<p>/query`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0dfd114718fde40f", "name": "Dangling fetch: GET http://127.0.0.1:${PORT}/health (scripts/smoke-server-boot.mjs:46)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${PORT}/health (scripts/smoke-server-boot.mjs:46)"}, "fullDescription": {"text": "`scripts/smoke-server-boot.mjs:46` calls `GET http://127.0.0.1:${PORT}/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33f6e088e5634c11", "name": "Dangling fetch: PATCH https://api.notion.com/v1/blocks/${pageId}/children (scripts/notion-write.mjs:264)", "shortDescription": {"text": "Dangling fetch: PATCH https://api.notion.com/v1/blocks/${pageId}/children (scripts/notion-write.mjs:264)"}, "fullDescription": {"text": "`scripts/notion-write.mjs:264` calls `PATCH https://api.notion.com/v1/blocks/${pageId}/children` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.notion.com/v1/blocks/<p>/children`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d885f51df9b7515", "name": "Dangling fetch: OPTIONS http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:1741)", "shortDescription": {"text": "Dangling fetch: OPTIONS http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:1741)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:1741` calls `OPTIONS http://127.0.0.1:${address.port}/provider-completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/provider-completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b26887ff06eff6cf", "name": "Dangling fetch: POST http://127.0.0.1:${address.port}/memory/sync (apps/server/src/index.test.ts:1920)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${address.port}/memory/sync (apps/server/src/index.test.ts:1920)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:1920` calls `POST http://127.0.0.1:${address.port}/memory/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/memory/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-9c44ec1e49d6e5af", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2415)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2415)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:2415` calls `GET http://127.0.0.1:${address.port}/agent-delegations/execute` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/agent-delegations/execute`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4cc8ce30d45d6ba6", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2499)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2499)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:2499` calls `GET http://127.0.0.1:${address.port}/agent-delegations/execute` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/agent-delegations/execute`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a00127e93193aa77", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_http (apps/server/src/index.test.ts:2549)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_http (apps/server/src/index.test.ts:2549)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:2549` calls `GET http://127.0.0.1:${address.port}/events?sessionId=session_http` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f8cf96f4b691456", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2608)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2608)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:2608` calls `GET http://127.0.0.1:${address.port}/agent-delegations/execute` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/agent-delegations/execute`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43b55fb9aad34480", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2685)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2685)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:2685` calls `GET http://127.0.0.1:${address.port}/agent-delegations/execute` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/agent-delegations/execute`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8229bdd4eb81b47", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:2736)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:2736)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:2736` calls `GET http://127.0.0.1:${address.port}/approvals/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e82302b2ee5eef8b", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:2981)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:2981)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:2981` calls `GET http://127.0.0.1:${address.port}/provider-completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/provider-completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf6b2df5a6f5003f", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3013)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3013)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3013` calls `GET http://127.0.0.1:${address.port}/approvals/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fdc93d4c21a1ff68", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3031)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3031)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3031` calls `GET http://127.0.0.1:${address.port}/approvals/grant` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/grant`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0936181d96756ae1", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/ingress/events (apps/server/src/index.test.ts:3093)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/ingress/events (apps/server/src/index.test.ts:3093)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3093` calls `GET http://127.0.0.1:${address.port}/ingress/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/ingress/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee913f8830153237", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3129)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3129)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3129` calls `GET http://127.0.0.1:${address.port}/approvals/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc415b22c8756720", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/events/sync (apps/server/src/index.test.ts:3189)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events/sync (apps/server/src/index.test.ts:3189)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3189` calls `GET http://127.0.0.1:${address.port}/events/sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/events/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-7bd1e7d177a0f265", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3266)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3266)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3266` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4b96e4615d64441", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3308)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3308)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3308` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ed7477f345757f4", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3331)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3331)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3331` calls `GET http://127.0.0.1:${address.port}/approvals/grant` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/grant`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-007c7f540c4914dd", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3341)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3341)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3341` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68ee4d0fda32ec37", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3373)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3373)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3373` calls `GET http://127.0.0.1:${address.port}/approvals/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e910d1a10d04027", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3449)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3449)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3449` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-543322381fe68a43", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3472)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3472)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3472` calls `GET http://127.0.0.1:${address.port}/approvals/grant` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/grant`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c8054aedfc7cbe0", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3482)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3482)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3482` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-398a27c16a054cb8", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_http (apps/server/src/index.test.ts:3", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_http (apps/server/src/index.test.ts:3518)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3518` calls `GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_http` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ae02f882598bbe80", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3584)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3584)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3584` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bdf8c492c46ed5a3", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3660)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3660)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3660` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bddab04c6e116175", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3683)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3683)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3683` calls `GET http://127.0.0.1:${address.port}/approvals/grant` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/grant`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44af453b673f70e6", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3693)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3693)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3693` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ef1d2fab680c5e4", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3720)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3720)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3720` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-673bfd84e42227eb", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3808)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3808)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3808` calls `GET http://127.0.0.1:${address.port}/tmux/dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/dispatch`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d22d3c878cbbd0b", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3842)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3842)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3842` calls `GET http://127.0.0.1:${address.port}/approvals/grant` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/grant`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf13cdcd406b5e07", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/replay (apps/server/src/index.test.ts:3852)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/replay (apps/server/src/index.test.ts:3852)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3852` calls `GET http://127.0.0.1:${address.port}/approvals/replay` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/approvals/replay`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1eed48b54c916971", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_replay (apps/server/src/index.test.ts", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_replay (apps/server/src/index.test.ts:3885)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:3885` calls `GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_replay` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27b26aad8fd12015", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/preflight (apps/server/src/index.test.ts:4013)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/preflight (apps/server/src/index.test.ts:4013)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4013` calls `GET http://127.0.0.1:${address.port}/tmux/preflight` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/preflight`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9f205dcd68933f53", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_preflight_http (apps/server/src/index", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_preflight_http (apps/server/src/index.test.ts:4043)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4043` calls `GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_preflight_http` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-085b0ecbb1bd419b", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/preflight (apps/server/src/index.test.ts:4098)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/preflight (apps/server/src/index.test.ts:4098)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4098` calls `GET http://127.0.0.1:${address.port}/tmux/preflight` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/preflight`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d10e105933ae286", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/capture (apps/server/src/index.test.ts:4169)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/capture (apps/server/src/index.test.ts:4169)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4169` calls `GET http://127.0.0.1:${address.port}/tmux/capture` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/tmux/capture`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1050fd4dffb76f69", "name": "Dangling fetch: GET http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:4242)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:4242)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4242` calls `GET http://127.0.0.1:${address.port}/provider-completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/provider-completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cbb4a462967064b", "name": "Dangling fetch: POST http://127.0.0.1:${address.port}/verify-packet (apps/server/src/index.test.ts:4382)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${address.port}/verify-packet (apps/server/src/index.test.ts:4382)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4382` calls `POST http://127.0.0.1:${address.port}/verify-packet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/verify-packet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-61cd28c6b6cd0724", "name": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4636)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4636)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4636` calls `GET http://127.0.0.1:${port}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-49580d4d1c59843b", "name": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4652)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4652)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4652` calls `GET http://127.0.0.1:${port}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-d3c10c17ba77fedd", "name": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4666)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4666)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4666` calls `GET http://127.0.0.1:${port}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-149f3cb1c54c761f", "name": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4681)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4681)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4681` calls `GET http://127.0.0.1:${port}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-29ce9b15a56f5f74", "name": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4693)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4693)"}, "fullDescription": {"text": "`apps/server/src/index.test.ts:4693` calls `GET http://127.0.0.1:${port}${path}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<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-67d28fa8cd6bb12f", "name": "Unused endpoint: PUT /", "shortDescription": {"text": "Unused endpoint: PUT /"}, "fullDescription": {"text": "`apps/desktop/public/sw.js` declares `PUT /` 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/18315"}, "properties": {"repository": "robin-main-hub/ai-orchestrator-lab", "repoUrl": "https://github.com/robin-main-hub/ai-orchestrator-lab", "branch": "main"}, "results": [{"ruleId": "scanner-1ea93b52e78b2d3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/scripts/generateSampleDebate.ts:39"}, "properties": {"repobilityId": "39767db515981e02", "scanner": "scanner-primary", "fingerprint": "1ea93b52e78b2d3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-018e94f99766c9e4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/App.tsx:5287"}, "properties": {"repobilityId": "d40a58391fab1a74", "scanner": "scanner-primary", "fingerprint": "018e94f99766c9e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-cc193bf316120f7d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/CommandPalette.tsx:136"}, "properties": {"repobilityId": "70a3264ce5a913e5", "scanner": "scanner-primary", "fingerprint": "cc193bf316120f7d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ae96c6d4ec4f44ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/TmuxSwarmBoard.tsx:423"}, "properties": {"repobilityId": "27d7b5cf4e08b496", "scanner": "scanner-primary", "fingerprint": "ae96c6d4ec4f44ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5dfeb6ff92fee538", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/TimelineScrubber.tsx:168"}, "properties": {"repobilityId": "a1a1c1c0730d51e5", "scanner": "scanner-primary", "fingerprint": "5dfeb6ff92fee538", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bffefa3b02dcfe87", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ControlQueueDrawer.tsx:521"}, "properties": {"repobilityId": "9fdd48e4e0e81dcf", "scanner": "scanner-primary", "fingerprint": "bffefa3b02dcfe87", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c585e7539490e880", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/EvolveMementoPanel.tsx:288"}, "properties": {"repobilityId": "14f62903efab8753", "scanner": "scanner-primary", "fingerprint": "c585e7539490e880", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a0fb0498a27020d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/CheatSheetOverlay.tsx:59"}, "properties": {"repobilityId": "1ed43084b6b6dc58", "scanner": "scanner-primary", "fingerprint": "1a0fb0498a27020d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c09718970c04868a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/AgentsSidebar.tsx:360"}, "properties": {"repobilityId": "c92307702ad8a0a5", "scanner": "scanner-primary", "fingerprint": "c09718970c04868a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1e679e299d9fce0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/SummonTheater.tsx:365"}, "properties": {"repobilityId": "c6ca9a07c051802b", "scanner": "scanner-primary", "fingerprint": "d1e679e299d9fce0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-edbc7c4a521d6866", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ApprovalToastBar.tsx:39"}, "properties": {"repobilityId": "91eed7cd8b8e97e7", "scanner": "scanner-primary", "fingerprint": "edbc7c4a521d6866", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-446de2ca277f21bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/PublicWorkTracePanel.tsx:61"}, "properties": {"repobilityId": "5c7cb151e7490b92", "scanner": "scanner-primary", "fingerprint": "446de2ca277f21bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b94b8660d72ae677", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/ProviderReadinessPreflight.tsx:44"}, "properties": {"repobilityId": "a4b6f68ae5cf42be", "scanner": "scanner-primary", "fingerprint": "b94b8660d72ae677", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df1c8e6b896eaca3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/MakimaDelegationConsole.tsx:87"}, "properties": {"repobilityId": "865adf522ab52c56", "scanner": "scanner-primary", "fingerprint": "df1c8e6b896eaca3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a6950ddf2d30ed1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentHermesControlCard.tsx:73"}, "properties": {"repobilityId": "ed32c29833e94164", "scanner": "scanner-primary", "fingerprint": "a6950ddf2d30ed1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56bbd36abf0b1c4a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentMemoryContinuityPanel.tsx:124"}, "properties": {"repobilityId": "d10b47ddc624b1b8", "scanner": "scanner-primary", "fingerprint": "56bbd36abf0b1c4a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c0299792ccfc579", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentConversationFlowPanel.tsx:62"}, "properties": {"repobilityId": "11aeb5e5c18fa2a7", "scanner": "scanner-primary", "fingerprint": "9c0299792ccfc579", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33ba043fcd57f95c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentLiveWorkStatus.tsx:24"}, "properties": {"repobilityId": "b6f5022f667800d8", "scanner": "scanner-primary", "fingerprint": "33ba043fcd57f95c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-048f1581abeaf741", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentQuickSwitchPanel.tsx:210"}, "properties": {"repobilityId": "db7fa710efbf47d8", "scanner": "scanner-primary", "fingerprint": "048f1581abeaf741", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28539c3a388ddea2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/AgentRosterSkillPicker.tsx:76"}, "properties": {"repobilityId": "acb816f6dd4086f1", "scanner": "scanner-primary", "fingerprint": "28539c3a388ddea2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3ec51a8cf440b7af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/index.tsx:476"}, "properties": {"repobilityId": "c288100f90844ac2", "scanner": "scanner-primary", "fingerprint": "3ec51a8cf440b7af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2423bef1c7b6c7a5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/Composer.tsx:162"}, "properties": {"repobilityId": "9903f4c8a2b1bf4e", "scanner": "scanner-primary", "fingerprint": "2423bef1c7b6c7a5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b325adf0eacfd79a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/MessageThread.tsx:721"}, "properties": {"repobilityId": "d0191735586f0b4f", "scanner": "scanner-primary", "fingerprint": "b325adf0eacfd79a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c7ff5e7ca03fbb7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/WorkspaceChangesPanel.tsx:69"}, "properties": {"repobilityId": "de0483d82067effb", "scanner": "scanner-primary", "fingerprint": "0c7ff5e7ca03fbb7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7b5f9703fc500e56", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/WorkTheater.tsx:109"}, "properties": {"repobilityId": "e73b556114c3b374", "scanner": "scanner-primary", "fingerprint": "7b5f9703fc500e56", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51e65f9aa5cb6e8e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/ConversationWorkbench/ConversationAgentRail.tsx:125"}, "properties": {"repobilityId": "e8c5b61e7455e9f2", "scanner": "scanner-primary", "fingerprint": "51e65f9aa5cb6e8e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0922479bc7db9c51", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/appbuild/CodingRunnerCard.tsx:113"}, "properties": {"repobilityId": "f65a36b106a92fa6", "scanner": "scanner-primary", "fingerprint": "0922479bc7db9c51", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0eb3934daba04d59", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/OperatorCockpit.tsx:257"}, "properties": {"repobilityId": "96222eba06ddf702", "scanner": "scanner-primary", "fingerprint": "0eb3934daba04d59", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1cf724226d823601", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/DispatchHistoryCard.tsx:31"}, "properties": {"repobilityId": "0a61151a74575c54", "scanner": "scanner-primary", "fingerprint": "1cf724226d823601", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32dd419e729595d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/CockpitHealthHero.tsx:61"}, "properties": {"repobilityId": "e359675f8bd7e400", "scanner": "scanner-primary", "fingerprint": "32dd419e729595d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2fd1c6081ffde863", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/WorkerFleetCard.tsx:156"}, "properties": {"repobilityId": "024a1408f82979d8", "scanner": "scanner-primary", "fingerprint": "2fd1c6081ffde863", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2ed614a948356ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/WorkReceiptLedgerCard.tsx:129"}, "properties": {"repobilityId": "8b4e3762640a67c8", "scanner": "scanner-primary", "fingerprint": "f2ed614a948356ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb5134c42bd36bef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/MaturityReadinessCard.tsx:133"}, "properties": {"repobilityId": "a793df6fd5c0dd68", "scanner": "scanner-primary", "fingerprint": "cb5134c42bd36bef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7896f5a8d6782b57", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/operator-cockpit/HandoffCard.tsx:34"}, "properties": {"repobilityId": "d83fd61784423976", "scanner": "scanner-primary", "fingerprint": "7896f5a8d6782b57", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef227d2d53a0d510", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/desktop/src/components/debate-chamber/DebateAnnexPage.tsx:150"}, "properties": {"repobilityId": "b40d0a5862a1e078", "scanner": "scanner-primary", "fingerprint": "ef227d2d53a0d510", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c98fd98e1c348b1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/desktop/src/lib/codingTurnRunner.test.ts:194"}, "properties": {"repobilityId": "adf113b1643dda63", "scanner": "scanner-primary", "fingerprint": "4c98fd98e1c348b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8b4d5c14ee45c809", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/desktop/src/lib/missionPublishPrefill.test.ts:173"}, "properties": {"repobilityId": "66264eb559140110", "scanner": "scanner-primary", "fingerprint": "8b4d5c14ee45c809", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a12cd33e6fea8424", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:5345"}, "properties": {"repobilityId": "5c84e404c4eed546", "scanner": "scanner-primary", "fingerprint": "a12cd33e6fea8424", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1042094a7bb500fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/integrations/githubFileChangeWriteGuards.test.ts:91"}, "properties": {"repobilityId": "2a60faab29ca5970", "scanner": "scanner-primary", "fingerprint": "1042094a7bb500fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65981c39ad419114", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/integrations/githubReadonlyClient.test.ts:151"}, "properties": {"repobilityId": "b2857f2abf71e73a", "scanner": "scanner-primary", "fingerprint": "65981c39ad419114", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15dde6e02a92c5e2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 docs/v0/v0-output/components/ui/chart.tsx:83"}, "properties": {"repobilityId": "c430990bdfda9ba4", "scanner": "scanner-primary", "fingerprint": "15dde6e02a92c5e2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9b3371774c50e132", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/conversation/conversation-header.tsx:186"}, "properties": {"repobilityId": "5ce327e25ff697fd", "scanner": "scanner-primary", "fingerprint": "9b3371774c50e132", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8c5b7ed088a49868", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/sidebar/memento-panel.tsx:153"}, "properties": {"repobilityId": "cdad42e71cdc6a02", "scanner": "scanner-primary", "fingerprint": "8c5b7ed088a49868", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-404ccfdb374f4642", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 docs/v0/v0-output/components/sidebar/agent-card.tsx:59"}, "properties": {"repobilityId": "aa6c713e4393ac81", "scanner": "scanner-primary", "fingerprint": "404ccfdb374f4642", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ecfdcf85a08c8946", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/protocol/src/scaffold.ts:159"}, "properties": {"repobilityId": "045c2bc757e4331c", "scanner": "scanner-primary", "fingerprint": "ecfdcf85a08c8946", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-805690e6a3ecdea8", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/components/MissionBoardPanel.publish.test.tsx:262"}, "properties": {"repobilityId": "9f240127f1c8bb54", "scanner": "scanner-primary", "fingerprint": "805690e6a3ecdea8", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/components/MissionBoardPanel.publish.test.tsx"}, "region": {"startLine": 262}}}]}, {"ruleId": "scanner-8d76ec49555bfdae", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in apps/desktop/src/lib/sandboxRunner.ts:24"}, "properties": {"repobilityId": "77025a3a043c858b", "scanner": "scanner-primary", "fingerprint": "8d76ec49555bfdae", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/lib/sandboxRunner.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-97b5055b64ebdc53", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/lib/missionPublishPrefill.test.ts:105"}, "properties": {"repobilityId": "6bd9db2bfdf38a57", "scanner": "scanner-primary", "fingerprint": "97b5055b64ebdc53", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/lib/missionPublishPrefill.test.ts"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-2079f7fc873046ad", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in apps/desktop/src/runtime/stage2Runtime.test.ts:47"}, "properties": {"repobilityId": "7cd56e9b61f5d975", "scanner": "scanner-primary", "fingerprint": "2079f7fc873046ad", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/runtime/stage2Runtime.test.ts"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-ac949c8829159a3e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/index.ts:9"}, "properties": {"repobilityId": "f0870ceee882f9f0", "scanner": "scanner-primary", "fingerprint": "ac949c8829159a3e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/index.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-b267f0016d033135", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in apps/server/src/integrations/githubFileChangeWriteGuards.test.ts:129"}, "properties": {"repobilityId": "319cb6463ce4dcb3", "scanner": "scanner-primary", "fingerprint": "b267f0016d033135", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/integrations/githubFileChangeWriteGuards.test.ts"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-118354aa812317e0", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in apps/server/src/integrations/githubPullRequestWriteGuards.test.ts:113"}, "properties": {"repobilityId": "7510adbd4cf5dd64", "scanner": "scanner-primary", "fingerprint": "118354aa812317e0", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/integrations/githubPullRequestWriteGuards.test.ts"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-541666ed52a25ad1", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/routes/autorunSafety.ts:1"}, "properties": {"repobilityId": "6926684ef7e30d0b", "scanner": "scanner-primary", "fingerprint": "541666ed52a25ad1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/routes/autorunSafety.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6a6e9d82eda89c66", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in docs/v0/v0-output/components/ui/chart.tsx:83"}, "properties": {"repobilityId": "3430337e9270a41b", "scanner": "scanner-primary", "fingerprint": "6a6e9d82eda89c66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/v0/v0-output/components/ui/chart.tsx"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-7c40dc88d8712daf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/orchestration-mvp-audit.mjs:2"}, "properties": {"repobilityId": "25ec987e1ba59ff1", "scanner": "scanner-primary", "fingerprint": "7c40dc88d8712daf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/orchestration-mvp-audit.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-c06a621a23566676", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-personal-ai-sessions.mjs:2"}, "properties": {"repobilityId": "9efce880845b3e9a", "scanner": "scanner-primary", "fingerprint": "c06a621a23566676", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-personal-ai-sessions.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-28d481e495987a02", "level": "error", "message": {"text": "Possible secret in scripts/smoke-personal-ai-sessions.mjs"}, "properties": {"repobilityId": "4e8e3af65af61164", "scanner": "scanner-primary", "fingerprint": "28d481e495987a02", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke-personal-ai-sessions.mjs"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-423aa41c529dc204", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/smoke-personal-ai-sessions.mjs:2"}, "properties": {"repobilityId": "4324ae6b9fece98a", "scanner": "scanner-primary", "fingerprint": "423aa41c529dc204", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke-personal-ai-sessions.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-bb412b1fae7f87f8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/create-antigravity-pro2-task.mjs:2"}, "properties": {"repobilityId": "cee915b2310f0dab", "scanner": "scanner-primary", "fingerprint": "bb412b1fae7f87f8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/create-antigravity-pro2-task.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-728769ee6a84ac79", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/smoke-antigravity-worker.mjs:2"}, "properties": {"repobilityId": "ca16c1c3adc95cbb", "scanner": "scanner-primary", "fingerprint": "728769ee6a84ac79", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke-antigravity-worker.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-3ef913ce5f73e36c", "level": "error", "message": {"text": "Possible secret in scripts/smoke-provider-ai-manifest.mjs"}, "properties": {"repobilityId": "6eafa5e2c48596ea", "scanner": "scanner-primary", "fingerprint": "3ef913ce5f73e36c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke-provider-ai-manifest.mjs"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-81ed4cc1c7b12043", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/create-antigravity-pro1-task.mjs:2"}, "properties": {"repobilityId": "ec1d5db7d27a46cc", "scanner": "scanner-primary", "fingerprint": "81ed4cc1c7b12043", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/create-antigravity-pro1-task.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-2ed905a7aa8a9448", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/smoke-orchestration-os.mjs:21"}, "properties": {"repobilityId": "fe0003ffa07a4569", "scanner": "scanner-primary", "fingerprint": "2ed905a7aa8a9448", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke-orchestration-os.mjs"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-d02da48d4d6dadf9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/smoke-server-boot.mjs:13"}, "properties": {"repobilityId": "5d849e4448152639", "scanner": "scanner-primary", "fingerprint": "d02da48d4d6dadf9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/smoke-server-boot.mjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-35ac302cfefe0269", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/create-antigravity-ultra-task.mjs:2"}, "properties": {"repobilityId": "30169d2f7869a378", "scanner": "scanner-primary", "fingerprint": "35ac302cfefe0269", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/create-antigravity-ultra-task.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-26d92f8801506df4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/provider-ai-smoke.mjs:2"}, "properties": {"repobilityId": "261dc879840adf52", "scanner": "scanner-primary", "fingerprint": "26d92f8801506df4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/provider-ai-smoke.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-54aff3b403206211", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/repo-map.mjs:16"}, "properties": {"repobilityId": "8822d43b22ab4e6c", "scanner": "scanner-primary", "fingerprint": "54aff3b403206211", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/repo-map.mjs"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-b453b88982f0fa75", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/deploy-dgx02.mjs:36"}, "properties": {"repobilityId": "f72709d8473ab070", "scanner": "scanner-primary", "fingerprint": "b453b88982f0fa75", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/deploy-dgx02.mjs"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-64d133d55959c579", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/providers/src/node/grokCliOAuthAdapter.ts:1"}, "properties": {"repobilityId": "db6e6828397e6aad", "scanner": "scanner-primary", "fingerprint": "64d133d55959c579", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/providers/src/node/grokCliOAuthAdapter.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-26cb052752f99403", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/providers/src/node/claudeCliAdapter.ts:1"}, "properties": {"repobilityId": "b623dc790fff420e", "scanner": "scanner-primary", "fingerprint": "26cb052752f99403", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/providers/src/node/claudeCliAdapter.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ab72deb2057cb677", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/providers/src/node/codexCliOAuthAdapter.ts:1"}, "properties": {"repobilityId": "a3d6e544a72410f2", "scanner": "scanner-primary", "fingerprint": "ab72deb2057cb677", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/providers/src/node/codexCliOAuthAdapter.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-761bca9e8d8dfd08", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/providers/src/node/geminiCliAdapter.ts:1"}, "properties": {"repobilityId": "9da34712e527c327", "scanner": "scanner-primary", "fingerprint": "761bca9e8d8dfd08", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/providers/src/node/geminiCliAdapter.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d8772e445ad1bf7d", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-4650c0de78e8a7ca", "level": "note", "message": {"text": "Very large file: apps/desktop/src/App.tsx (5763 lines)"}, "properties": {"repobilityId": "acf28adb83dda516", "scanner": "scanner-primary", "fingerprint": "4650c0de78e8a7ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b0eebfaac207716", "level": "note", "message": {"text": "Very large file: apps/desktop/src/components/MissionBoardPanel.tsx (1186 lines)"}, "properties": {"repobilityId": "9397bb12093a8d31", "scanner": "scanner-primary", "fingerprint": "3b0eebfaac207716", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5387f8d05fbbe63b", "level": "note", "message": {"text": "Very large file: apps/desktop/src/components/coding/CodingWorkbench.tsx (1153 lines)"}, "properties": {"repobilityId": "144b0eb976b06d7e", "scanner": "scanner-primary", "fingerprint": "5387f8d05fbbe63b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9525b7a75264ff8f", "level": "note", "message": {"text": "Very large file: apps/server/src/index.test.ts (4727 lines)"}, "properties": {"repobilityId": "d81c38fa1f06c56c", "scanner": "scanner-primary", "fingerprint": "9525b7a75264ff8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9fb823e5ec768d29", "level": "note", "message": {"text": "Very large file: apps/server/src/index.ts (7379 lines)"}, "properties": {"repobilityId": "1e6087a1648d7e84", "scanner": "scanner-primary", "fingerprint": "9fb823e5ec768d29", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c3c131cab3890c24", "level": "note", "message": {"text": "Very large file: apps/server/src/routes/github.ts (2292 lines)"}, "properties": {"repobilityId": "6f75104929cd57a7", "scanner": "scanner-primary", "fingerprint": "c3c131cab3890c24", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-189a0dd8210ee86c", "level": "note", "message": {"text": "Very large file: packages/protocol/src/index.ts (2393 lines)"}, "properties": {"repobilityId": "d2459c6ba6e0fbf6", "scanner": "scanner-primary", "fingerprint": "189a0dd8210ee86c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d57b3f82d2270c5b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/package.json"}, "properties": {"repobilityId": "a5d1a254ecc349f8", "scanner": "scanner-primary", "fingerprint": "d57b3f82d2270c5b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d0c2205560692580", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/mobile/package.json"}, "properties": {"repobilityId": "b3dfed7bb3d70ed3", "scanner": "scanner-primary", "fingerprint": "d0c2205560692580", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/mobile/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5f12bbcc60e1f76c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/server/package.json"}, "properties": {"repobilityId": "16bf11fe30b0b8cc", "scanner": "scanner-primary", "fingerprint": "5f12bbcc60e1f76c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-44699306c3b7034e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/providers/package.json"}, "properties": {"repobilityId": "604055d80dac277e", "scanner": "scanner-primary", "fingerprint": "44699306c3b7034e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/providers/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dcc93e7cda95e983", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/simplememo/package.json"}, "properties": {"repobilityId": "2a988c19a42a0d8b", "scanner": "scanner-primary", "fingerprint": "dcc93e7cda95e983", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/simplememo/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3c6f2be45e72de9d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/agents/package.json"}, "properties": {"repobilityId": "22446edcd3e37b9e", "scanner": "scanner-primary", "fingerprint": "3c6f2be45e72de9d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/agents/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b3d0fa3fe79a342", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/protocol/package.json"}, "properties": {"repobilityId": "0939d10aef433444", "scanner": "scanner-primary", "fingerprint": "1b3d0fa3fe79a342", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/protocol/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "39c22917b41ed57c", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "982e2a1aa5ad87c1", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "ac857df3d44c773e", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "2caa76a95f48f5de", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "af8d18c7e17f0747", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "96a67c2cd9d933e1", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-34c9d0df24b795db", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/desktop/src/main.tsx:29"}, "properties": {"repobilityId": "02f1f4d5b484817c", "scanner": "scanner-primary", "fingerprint": "34c9d0df24b795db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1e8f65a4e260349", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/App.tsx:5287"}, "properties": {"repobilityId": "79c9564248072b01", "scanner": "scanner-primary", "fingerprint": "b1e8f65a4e260349", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb25683e18a10cd8", "level": "note", "message": {"text": "Legacy-named symbol `config_memory_project_only_v1` in apps/desktop/src/seeds/configFiles.test.ts:18"}, "properties": {"repobilityId": "ace5e364ad993f1b", "scanner": "scanner-primary", "fingerprint": "eb25683e18a10cd8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e278a8d1e539ce84", "level": "note", "message": {"text": "Legacy-named symbol `config_soul_orchestrator_direct_v1` in apps/desktop/src/seeds/configFiles.ts:9"}, "properties": {"repobilityId": "810b6aa2ec937e36", "scanner": "scanner-primary", "fingerprint": "e278a8d1e539ce84", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6d2f56c43e17cd97", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/components/MissionBoardPanel.tsx:563"}, "properties": {"repobilityId": "812c609085943540", "scanner": "scanner-primary", "fingerprint": "6d2f56c43e17cd97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76dcf031203030e8", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/components/ChannelRailPanel.tsx:20"}, "properties": {"repobilityId": "88f3ac9a419fedfd", "scanner": "scanner-primary", "fingerprint": "76dcf031203030e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-df44c46a6ccb5328", "level": "note", "message": {"text": "Legacy-named symbol `plan_v1` in apps/desktop/src/components/MissionBoardContainer.scaffoldRefresh.test.tsx:116"}, "properties": {"repobilityId": "561b272b2d20ccdd", "scanner": "scanner-primary", "fingerprint": "df44c46a6ccb5328", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e84ffc2f538ce4b4", "level": "note", "message": {"text": "Legacy-named symbol `config_skill_evolvememento_continuity_v1` in apps/desktop/src/components/ConversationWorkbench/AgentSkillProfilePanel.test.tsx:22"}, "properties": {"repobilityId": "23ae0c61fb748b3f", "scanner": "scanner-primary", "fingerprint": "e84ffc2f538ce4b4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b62f7451efa37cb4", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/desktop/src/lib/appFixDraft.ts:212"}, "properties": {"repobilityId": "1f5b105451aadcc3", "scanner": "scanner-primary", "fingerprint": "b62f7451efa37cb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1aae1da246890a6", "level": "note", "message": {"text": "Legacy-named symbol `msg_assistant_visible_copy` in apps/desktop/src/lib/publicWorkTrace.test.ts:496"}, "properties": {"repobilityId": "49449e94476b3f4b", "scanner": "scanner-primary", "fingerprint": "d1aae1da246890a6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-18ee45c2b1d67a48", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/desktop/src/lib/codingChat.ts:337"}, "properties": {"repobilityId": "d787354836aafaf4", "scanner": "scanner-primary", "fingerprint": "18ee45c2b1d67a48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdb69ca7bd4e33c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/lib/helpers.ts:481"}, "properties": {"repobilityId": "630d2ffdefe0b380", "scanner": "scanner-primary", "fingerprint": "bdb69ca7bd4e33c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c8f87b71cac9497", "level": "note", "message": {"text": "Legacy-named symbol `memory_old` in apps/desktop/src/lib/memoryCuratorRuntime.test.ts:156"}, "properties": {"repobilityId": "c4faf9ba1354c191", "scanner": "scanner-primary", "fingerprint": "2c8f87b71cac9497", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4af98b524ebaf10d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/lib/ttsSynthesizer.ts:67"}, "properties": {"repobilityId": "8e95b8e793cef659", "scanner": "scanner-primary", "fingerprint": "4af98b524ebaf10d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a6089af414fb5178", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/lib/railStatusLabels.ts:86"}, "properties": {"repobilityId": "f1a705b31492cbcb", "scanner": "scanner-primary", "fingerprint": "a6089af414fb5178", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9b944198e5c59535", "level": "note", "message": {"text": "Legacy-named symbol `provider_backup` in apps/desktop/src/lib/providerFallbackPlan.test.ts:29"}, "properties": {"repobilityId": "1081e2ebeb61fb20", "scanner": "scanner-primary", "fingerprint": "9b944198e5c59535", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-57467738623e203b", "level": "note", "message": {"text": "Legacy-named symbol `config_skill_role_tool_profiles_v1` in apps/desktop/src/lib/agentRuntimeConfig.test.ts:20"}, "properties": {"repobilityId": "9d20313c876647fb", "scanner": "scanner-primary", "fingerprint": "57467738623e203b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-961b8b6af1bd4b70", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/desktop/src/lib/missionPublishPrefill.ts:191"}, "properties": {"repobilityId": "b346d61d0440ec07", "scanner": "scanner-primary", "fingerprint": "961b8b6af1bd4b70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6159e8232b82b2ab", "level": "note", "message": {"text": "Legacy-named symbol `sora_legacy` in apps/desktop/src/lib/hermesSlotPool.test.ts:49"}, "properties": {"repobilityId": "136588d205365400", "scanner": "scanner-primary", "fingerprint": "6159e8232b82b2ab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-47a78314320196b1", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage8Ingress.test.ts:34"}, "properties": {"repobilityId": "50e9366afb52ed40", "scanner": "scanner-primary", "fingerprint": "47a78314320196b1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c6314e8472835e73", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage9Permission.ts:192"}, "properties": {"repobilityId": "f5ca8459e17ae922", "scanner": "scanner-primary", "fingerprint": "c6314e8472835e73", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b5aedaf388f4c764", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/desktop/src/runtime/stage12DgxProvider.ts:54"}, "properties": {"repobilityId": "3b1a46ab5be12af9", "scanner": "scanner-primary", "fingerprint": "b5aedaf388f4c764", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e15218cdc5f11601", "level": "note", "message": {"text": "Legacy-named symbol `event_packet_old` in apps/desktop/src/runtime/stage19CodingPacketReplay.test.ts:35"}, "properties": {"repobilityId": "24c00f409d4f0cf3", "scanner": "scanner-primary", "fingerprint": "e15218cdc5f11601", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-33aa53aa5f96f242", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage8Ingress.ts:43"}, "properties": {"repobilityId": "143c52c862127d8a", "scanner": "scanner-primary", "fingerprint": "33aa53aa5f96f242", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5c041efee917c145", "level": "note", "message": {"text": "Legacy-named symbol `config_skill_role_tool_profiles_v1` in apps/desktop/src/runtime/conversationPipeline.test.ts:80"}, "properties": {"repobilityId": "a5831d62ae34bc78", "scanner": "scanner-primary", "fingerprint": "5c041efee917c145", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aa31803ca62a7a7e", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage6Memory.ts:181"}, "properties": {"repobilityId": "b5737a0c9f0ac994", "scanner": "scanner-primary", "fingerprint": "aa31803ca62a7a7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-be7fde5d9747384b", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/desktop/src/runtime/stage27MemoryApi.test.ts:60"}, "properties": {"repobilityId": "e0a154002efdd959", "scanner": "scanner-primary", "fingerprint": "be7fde5d9747384b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ad621f23878182bd", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/server/src/index.test.ts:572"}, "properties": {"repobilityId": "91819f5510c5fe25", "scanner": "scanner-primary", "fingerprint": "ad621f23878182bd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4527bc8e953d98ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/index.test.ts:1741"}, "properties": {"repobilityId": "b81a422360dd0798", "scanner": "scanner-primary", "fingerprint": "4527bc8e953d98ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5c089932ba6ce2e", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in apps/server/src/index.ts:3060"}, "properties": {"repobilityId": "be559423de4a2a48", "scanner": "scanner-primary", "fingerprint": "c5c089932ba6ce2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-959cf0486607260d", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/index.ts:6905"}, "properties": {"repobilityId": "d2c37a2f3113d13a", "scanner": "scanner-primary", "fingerprint": "959cf0486607260d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c72be786643e97c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/integrations/githubOctokitClient.ts:53"}, "properties": {"repobilityId": "580e826cd2bf0a42", "scanner": "scanner-primary", "fingerprint": "0c72be786643e97c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-04654619aedd6a86", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/server/src/routes/missions.fromBlueprintScaffoldSeed.test.ts:175"}, "properties": {"repobilityId": "9a66ac82ceacb1b2", "scanner": "scanner-primary", "fingerprint": "04654619aedd6a86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31890b8bae0a94eb", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/server/src/routes/github.ts:410"}, "properties": {"repobilityId": "0b0bbafcabc22e6c", "scanner": "scanner-primary", "fingerprint": "31890b8bae0a94eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d44dfbe80cd0418a", "level": "note", "message": {"text": "Legacy-named symbol `plan_v1` in apps/server/src/routes/missions.scaffoldlatest.test.ts:101"}, "properties": {"repobilityId": "66a0b5e9953f44de", "scanner": "scanner-primary", "fingerprint": "d44dfbe80cd0418a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8d849c0600a77527", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/server/src/routes/missions.ts:869"}, "properties": {"repobilityId": "53777ca5cf6378c1", "scanner": "scanner-primary", "fingerprint": "8d849c0600a77527", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5c8f8434188c774", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/notion-read.mjs:37"}, "properties": {"repobilityId": "4b3fba5c3b52c31d", "scanner": "scanner-primary", "fingerprint": "f5c8f8434188c774", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c02b251e26d1eb77", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-dgx-server.mjs:136"}, "properties": {"repobilityId": "7cfb6380c33c4467", "scanner": "scanner-primary", "fingerprint": "c02b251e26d1eb77", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a5d6c917abf41933", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/smoke-tmux-dry-run.mjs:108"}, "properties": {"repobilityId": "4fcfabc0395240e2", "scanner": "scanner-primary", "fingerprint": "a5d6c917abf41933", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-116ecb5ecd08080a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/smoke-tmux-dry-run.mjs:233"}, "properties": {"repobilityId": "9e00256e43feb5a9", "scanner": "scanner-primary", "fingerprint": "116ecb5ecd08080a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9ee0e89c056c9d9e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/notion-write.mjs:264"}, "properties": {"repobilityId": "98a7cfe4f0b245a9", "scanner": "scanner-primary", "fingerprint": "9ee0e89c056c9d9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-df9aa13f62c971ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/mcp/src/swarmTools.ts:144"}, "properties": {"repobilityId": "1d6b8a0e3b861943", "scanner": "scanner-primary", "fingerprint": "df9aa13f62c971ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c48864f45feac56", "level": "note", "message": {"text": "Legacy-named symbol `chara_card_v2` in packages/agents/src/characterCard.ts:32"}, "properties": {"repobilityId": "119c3428ec38ab87", "scanner": "scanner-primary", "fingerprint": "1c48864f45feac56", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b9aaf684925314b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/agents/src/index.test.ts:287"}, "properties": {"repobilityId": "4c04856243e8e733", "scanner": "scanner-primary", "fingerprint": "b9aaf684925314b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa9298bfae374865", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/agents/src/personaLoader.ts:157"}, "properties": {"repobilityId": "d746c65913ae4c2f", "scanner": "scanner-primary", "fingerprint": "aa9298bfae374865", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a768b88992e1d9ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/agents/src/index.ts:483"}, "properties": {"repobilityId": "8bff5e2fe05fcd50", "scanner": "scanner-primary", "fingerprint": "a768b88992e1d9ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bb451e91d76b979", "level": "note", "message": {"text": "Legacy-named symbol `chara_card_v2` in packages/agents/src/characterCard.test.ts:13"}, "properties": {"repobilityId": "dc6b6f700e25212c", "scanner": "scanner-primary", "fingerprint": "2bb451e91d76b979", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3bdd84855e98f550", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in packages/protocol/src/index.test.ts:226"}, "properties": {"repobilityId": "728e8d7edbef1a75", "scanner": "scanner-primary", "fingerprint": "3bdd84855e98f550", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0e3ce70111a63aba", "level": "note", "message": {"text": "Legacy-named symbol `external_legacy` in packages/protocol/src/index.ts:338"}, "properties": {"repobilityId": "fb5ce4828f25275c", "scanner": "scanner-primary", "fingerprint": "0e3ce70111a63aba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b9bea78f8668e602", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/protocol/src/index.ts:251"}, "properties": {"repobilityId": "9c1fd630cbdaf52e", "scanner": "scanner-primary", "fingerprint": "b9bea78f8668e602", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bea78a720072324", "level": "none", "message": {"text": "Commented-code block (11 lines) in packages/protocol/src/githubConnector.ts:143"}, "properties": {"repobilityId": "55eb285164643a1a", "scanner": "scanner-primary", "fingerprint": "3bea78a720072324", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccdc7de87ae9a8ec", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/protocol/src/scaffold.ts:259"}, "properties": {"repobilityId": "b7e4be481352cff1", "scanner": "scanner-primary", "fingerprint": "ccdc7de87ae9a8ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afebdb5a563aa21d", "level": "note", "message": {"text": "121 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "ac042559807ae47d", "scanner": "scanner-primary", "fingerprint": "afebdb5a563aa21d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-48ccd87b71237304", "level": "error", "message": {"text": "Dangling fetch: GET https://api.notion.com/v1/pages/${resolvedPageId} (scripts/notion-read.mjs:206)"}, "properties": {"repobilityId": "55125e0816fd899c", "scanner": "scanner-primary", "fingerprint": "48ccd87b71237304", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a44c4d5ab7f2a82", "level": "error", "message": {"text": "Dangling fetch: POST https://api.notion.com/v1/databases/${resolvedDbId}/query (scripts/notion-read.mjs:249)"}, "properties": {"repobilityId": "3309b76009814499", "scanner": "scanner-primary", "fingerprint": "6a44c4d5ab7f2a82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0dfd114718fde40f", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${PORT}/health (scripts/smoke-server-boot.mjs:46)"}, "properties": {"repobilityId": "9193c59f4efa238e", "scanner": "scanner-primary", "fingerprint": "0dfd114718fde40f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33f6e088e5634c11", "level": "error", "message": {"text": "Dangling fetch: PATCH https://api.notion.com/v1/blocks/${pageId}/children (scripts/notion-write.mjs:264)"}, "properties": {"repobilityId": "a1ea225c02367129", "scanner": "scanner-primary", "fingerprint": "33f6e088e5634c11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d885f51df9b7515", "level": "error", "message": {"text": "Dangling fetch: OPTIONS http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:1741)"}, "properties": {"repobilityId": "72b423c70d4538d6", "scanner": "scanner-primary", "fingerprint": "6d885f51df9b7515", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b26887ff06eff6cf", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${address.port}/memory/sync (apps/server/src/index.test.ts:1920)"}, "properties": {"repobilityId": "fe3e23b893b6c284", "scanner": "scanner-primary", "fingerprint": "b26887ff06eff6cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c44ec1e49d6e5af", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2415)"}, "properties": {"repobilityId": "6d2a0d10abe9af12", "scanner": "scanner-primary", "fingerprint": "9c44ec1e49d6e5af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4cc8ce30d45d6ba6", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2499)"}, "properties": {"repobilityId": "338e92b60e3259c3", "scanner": "scanner-primary", "fingerprint": "4cc8ce30d45d6ba6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a00127e93193aa77", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_http (apps/server/src/index.test.ts:2549)"}, "properties": {"repobilityId": "2cae2f0c0371642f", "scanner": "scanner-primary", "fingerprint": "a00127e93193aa77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f8cf96f4b691456", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2608)"}, "properties": {"repobilityId": "7eebcea00f0708ca", "scanner": "scanner-primary", "fingerprint": "2f8cf96f4b691456", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43b55fb9aad34480", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/agent-delegations/execute (apps/server/src/index.test.ts:2685)"}, "properties": {"repobilityId": "5f8b2a4d350a656f", "scanner": "scanner-primary", "fingerprint": "43b55fb9aad34480", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a8229bdd4eb81b47", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:2736)"}, "properties": {"repobilityId": "940ab93662f4c4d9", "scanner": "scanner-primary", "fingerprint": "a8229bdd4eb81b47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e82302b2ee5eef8b", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:2981)"}, "properties": {"repobilityId": "7936b4e1e91b97cd", "scanner": "scanner-primary", "fingerprint": "e82302b2ee5eef8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf6b2df5a6f5003f", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3013)"}, "properties": {"repobilityId": "41b18e53e67343e4", "scanner": "scanner-primary", "fingerprint": "cf6b2df5a6f5003f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fdc93d4c21a1ff68", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3031)"}, "properties": {"repobilityId": "916547af77723c51", "scanner": "scanner-primary", "fingerprint": "fdc93d4c21a1ff68", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0936181d96756ae1", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/ingress/events (apps/server/src/index.test.ts:3093)"}, "properties": {"repobilityId": "0255506b69db47a7", "scanner": "scanner-primary", "fingerprint": "0936181d96756ae1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee913f8830153237", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3129)"}, "properties": {"repobilityId": "205616f67652e7f1", "scanner": "scanner-primary", "fingerprint": "ee913f8830153237", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc415b22c8756720", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events/sync (apps/server/src/index.test.ts:3189)"}, "properties": {"repobilityId": "ad4d9e7336b5b7cc", "scanner": "scanner-primary", "fingerprint": "cc415b22c8756720", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7bd1e7d177a0f265", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3266)"}, "properties": {"repobilityId": "24d8f5ecd1bb39cd", "scanner": "scanner-primary", "fingerprint": "7bd1e7d177a0f265", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4b96e4615d64441", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3308)"}, "properties": {"repobilityId": "96031ac85c228176", "scanner": "scanner-primary", "fingerprint": "c4b96e4615d64441", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ed7477f345757f4", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3331)"}, "properties": {"repobilityId": "e03d56e7f9f9172c", "scanner": "scanner-primary", "fingerprint": "2ed7477f345757f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-007c7f540c4914dd", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3341)"}, "properties": {"repobilityId": "3dc21687cb584ff1", "scanner": "scanner-primary", "fingerprint": "007c7f540c4914dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68ee4d0fda32ec37", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/list (apps/server/src/index.test.ts:3373)"}, "properties": {"repobilityId": "ec09cc8dbe4780b6", "scanner": "scanner-primary", "fingerprint": "68ee4d0fda32ec37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e910d1a10d04027", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3449)"}, "properties": {"repobilityId": "6e1f62c450c6ebf9", "scanner": "scanner-primary", "fingerprint": "4e910d1a10d04027", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-543322381fe68a43", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3472)"}, "properties": {"repobilityId": "fe1b3d4497fb0820", "scanner": "scanner-primary", "fingerprint": "543322381fe68a43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c8054aedfc7cbe0", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3482)"}, "properties": {"repobilityId": "65491249d10d2067", "scanner": "scanner-primary", "fingerprint": "7c8054aedfc7cbe0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-398a27c16a054cb8", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_http (apps/server/src/index.test.ts:3518)"}, "properties": {"repobilityId": "470ca2d78505b7a1", "scanner": "scanner-primary", "fingerprint": "398a27c16a054cb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae02f882598bbe80", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3584)"}, "properties": {"repobilityId": "09fefc2ec43903e9", "scanner": "scanner-primary", "fingerprint": "ae02f882598bbe80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bdf8c492c46ed5a3", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3660)"}, "properties": {"repobilityId": "24386bfc8ed99617", "scanner": "scanner-primary", "fingerprint": "bdf8c492c46ed5a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bddab04c6e116175", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3683)"}, "properties": {"repobilityId": "b602f45314652815", "scanner": "scanner-primary", "fingerprint": "bddab04c6e116175", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44af453b673f70e6", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3693)"}, "properties": {"repobilityId": "ae45b68fb63a1a15", "scanner": "scanner-primary", "fingerprint": "44af453b673f70e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ef1d2fab680c5e4", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3720)"}, "properties": {"repobilityId": "77c3a4470ff59006", "scanner": "scanner-primary", "fingerprint": "5ef1d2fab680c5e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-673bfd84e42227eb", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/dispatch (apps/server/src/index.test.ts:3808)"}, "properties": {"repobilityId": "42150185991f5498", "scanner": "scanner-primary", "fingerprint": "673bfd84e42227eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d22d3c878cbbd0b", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/grant (apps/server/src/index.test.ts:3842)"}, "properties": {"repobilityId": "487f2fce654930ac", "scanner": "scanner-primary", "fingerprint": "7d22d3c878cbbd0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf13cdcd406b5e07", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/approvals/replay (apps/server/src/index.test.ts:3852)"}, "properties": {"repobilityId": "0e326e6bc9db261a", "scanner": "scanner-primary", "fingerprint": "cf13cdcd406b5e07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1eed48b54c916971", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_replay (apps/server/src/index.test.ts:3885)"}, "properties": {"repobilityId": "ba18a076f92a365e", "scanner": "scanner-primary", "fingerprint": "1eed48b54c916971", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27b26aad8fd12015", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/preflight (apps/server/src/index.test.ts:4013)"}, "properties": {"repobilityId": "a6ef0bebdcbebbd5", "scanner": "scanner-primary", "fingerprint": "27b26aad8fd12015", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f205dcd68933f53", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/events?sessionId=session_tmux_preflight_http (apps/server/src/index.test.ts:4043)"}, "properties": {"repobilityId": "a007b158805ef9e3", "scanner": "scanner-primary", "fingerprint": "9f205dcd68933f53", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-085b0ecbb1bd419b", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/preflight (apps/server/src/index.test.ts:4098)"}, "properties": {"repobilityId": "55a5c8c5e41f9353", "scanner": "scanner-primary", "fingerprint": "085b0ecbb1bd419b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d10e105933ae286", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/tmux/capture (apps/server/src/index.test.ts:4169)"}, "properties": {"repobilityId": "834cb1ea36597aae", "scanner": "scanner-primary", "fingerprint": "2d10e105933ae286", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1050fd4dffb76f69", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${address.port}/provider-completions (apps/server/src/index.test.ts:4242)"}, "properties": {"repobilityId": "75c2f0e5f83f6565", "scanner": "scanner-primary", "fingerprint": "1050fd4dffb76f69", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cbb4a462967064b", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${address.port}/verify-packet (apps/server/src/index.test.ts:4382)"}, "properties": {"repobilityId": "0156357644e45ab0", "scanner": "scanner-primary", "fingerprint": "7cbb4a462967064b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61cd28c6b6cd0724", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4636)"}, "properties": {"repobilityId": "6147f654152db442", "scanner": "scanner-primary", "fingerprint": "61cd28c6b6cd0724", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49580d4d1c59843b", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4652)"}, "properties": {"repobilityId": "eea8f485f3358940", "scanner": "scanner-primary", "fingerprint": "49580d4d1c59843b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3c10c17ba77fedd", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4666)"}, "properties": {"repobilityId": "4f52b00484a49514", "scanner": "scanner-primary", "fingerprint": "d3c10c17ba77fedd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-149f3cb1c54c761f", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4681)"}, "properties": {"repobilityId": "521cf9e7f5073c5b", "scanner": "scanner-primary", "fingerprint": "149f3cb1c54c761f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29ce9b15a56f5f74", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${port}${path} (apps/server/src/index.test.ts:4693)"}, "properties": {"repobilityId": "8cfdda93842eb921", "scanner": "scanner-primary", "fingerprint": "29ce9b15a56f5f74", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67d28fa8cd6bb12f", "level": "note", "message": {"text": "Unused endpoint: PUT /"}, "properties": {"repobilityId": "9a03876ebffa2599", "scanner": "scanner-primary", "fingerprint": "67d28fa8cd6bb12f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}