{"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-ab51d5a20310fd66", "name": "Possibly dead Python function: liquid_amount_from_value", "shortDescription": {"text": "Possibly dead Python function: liquid_amount_from_value"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-654b1fc592508c55", "name": "Possibly dead Python function: draw", "shortDescription": {"text": "Possibly dead Python function: draw"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-257cde38a2f09e97", "name": "Possibly dead Python function: print_table", "shortDescription": {"text": "Possibly dead Python function: print_table"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71e4e31cd30849f6", "name": "Possibly dead Python function: build_generic_policy", "shortDescription": {"text": "Possibly dead Python function: build_generic_policy"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d13a3f3346b483e9", "name": "Possibly dead Python function: build_austrian_policy", "shortDescription": {"text": "Possibly dead Python function: build_austrian_policy"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5624626f5a4c2842", "name": "Possibly dead Python function: coverage_for_known_codes", "shortDescription": {"text": "Possibly dead Python function: coverage_for_known_codes"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d0686affe048caa2", "name": "Possibly dead Python function: supported_reveal_modes", "shortDescription": {"text": "Possibly dead Python function: supported_reveal_modes"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41f47e7280763a6f", "name": "Possibly dead Python function: output_addresses", "shortDescription": {"text": "Possibly dead Python function: output_addresses"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69f0642003d53999", "name": "Possibly dead Python function: target_used_single", "shortDescription": {"text": "Possibly dead Python function: target_used_single"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a0cd22652e5e9d40", "name": "Possibly dead Python function: fetch_target_utxos", "shortDescription": {"text": "Possibly dead Python function: fetch_target_utxos"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-611827a24ff22563", "name": "Possibly dead Python function: utxo_fetch_progress", "shortDescription": {"text": "Possibly dead Python function: utxo_fetch_progress"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-96b3713be1f178a8", "name": "Possibly dead Python function: fetch_liquid_decode", "shortDescription": {"text": "Possibly dead Python function: fetch_liquid_decode"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76bca7f97a20f3fe", "name": "Possibly dead Python function: fetch_stats", "shortDescription": {"text": "Possibly dead Python function: fetch_stats"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f50d0687c0aa7cb", "name": "Possibly dead Python function: stats_fetch_progress", "shortDescription": {"text": "Possibly dead Python function: stats_fetch_progress"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b804dd883c37db3a", "name": "Possibly dead Python function: fetch_target_transactions", "shortDescription": {"text": "Possibly dead Python function: fetch_target_transactions"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa0b86b95da9b25c", "name": "Possibly dead Python function: history_fetch_progress", "shortDescription": {"text": "Possibly dead Python function: history_fetch_progress"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b08579ec4737c6fc", "name": "Possibly dead Python function: liquid_tx_lookup", "shortDescription": {"text": "Possibly dead Python function: liquid_tx_lookup"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3afc37673e3a4e9a", "name": "Possibly dead Python function: fetch_liquid_main_tx", "shortDescription": {"text": "Possibly dead Python function: fetch_liquid_main_tx"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-553d4cb100549e26", "name": "Possibly dead Python function: recent_key", "shortDescription": {"text": "Possibly dead Python function: recent_key"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-113282b240bad5dc", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailHeader.tsx:12", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailHeader.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64fb295b91b3bc32", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/NewTransactionDialog.tsx:656", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/NewTransactionDialog.tsx:656"}, "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-7596d4ab41e718a9", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionEditHistoryPanel.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionEditHistoryPanel.tsx:70"}, "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-d8d8bfa17e444046", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/ExplorerOpenDialog.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/ExplorerOpenDialog.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb60212f6721943b", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailAttachmentsPa", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailAttachmentsPanel.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-e7dec4075e74113d", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailSheetParts.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailSheetParts.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e15da3838c51d5b8", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/dashboard/TransactionsTable.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/dashboard/TransactionsTable.tsx:1202"}, "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-8e0c687caeb3bbbd", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/dashboard/TransactionWorkbench", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/dashboard/TransactionWorkbench.tsx:552"}, "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-2b9c936574c8a365", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/tool.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/tool.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb736bf25a69b5e0", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/reasoning.tsx:48", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/reasoning.tsx:48"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e02727c1143725b", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/chain-of-thought.tsx:46", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/chain-of-thought.tsx:46"}, "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-8f619dd13b0e2712", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/OverviewSidePanel.tsx:11", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/OverviewSidePanel.tsx:110"}, "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-915379969647d27f", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/ChartControlsSheet.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/ChartControlsSheet.tsx:128"}, "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-e2102a6023b50b48", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/WelcomeSection.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/WelcomeSection.tsx:57"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87b7a58d3685b477", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/RecentTransactionsTable.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/RecentTransactionsTable.tsx:275"}, "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-4c5259fd5dfaba6f", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/ChartStat.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/ChartStat.tsx:37"}, "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-56557ac16daa8135", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/BooksHealthPanel.tsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/BooksHealthPanel.tsx:107"}, "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-d7522d040371cba7", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/shadcnblocks/settings-integrations8.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/shadcnblocks/settings-integrations8.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-c4b6ee8b0b6db20b", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/shadcnblocks/settings-integrations4.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/shadcnblocks/settings-integrations4.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f663e2cac98330f4", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai/ChatHistoryPanel.tsx:101", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai/ChatHistoryPanel.tsx:101"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f788ebcfdcaebfb3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 ui-tauri/src/components/ui/chart.tsx:93", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 ui-tauri/src/components/ui/chart.tsx:93"}, "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-f83bbc396d091936", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/LogsTableControls.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/LogsTableControls.tsx:236"}, "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-d61d198bf0f06711", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/ReviewDataTable.tsx:568", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/ReviewDataTable.tsx:568"}, "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-ab2dda37fc780f1a", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppHeader.tsx:68", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppHeader.tsx:68"}, "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-50d470224e0ae4fc", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/ScreenAssistantMockup.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/ScreenAssistantMockup.tsx:171"}, "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-77c07c5fddbc3ae9", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppShell.tsx:1323", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppShell.tsx:1323"}, "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-f971752f9be2b837", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AddConnectionDialog.tsx:1345", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AddConnectionDialog.tsx:1345"}, "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-b561e982f599cbad", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppFooter.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppFooter.tsx:72"}, "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-b87cb557d8224354", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/BookSwitcherPopover.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/BookSwitcherPopover.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-0ed567e045fe947a", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/NetworkStatusIndicator.tsx:486", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/NetworkStatusIndicator.tsx:486"}, "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-bf1c3d6748a7779c", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/wallets/UtxosInventoryPanel.tsx:387", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/wallets/UtxosInventoryPanel.tsx:387"}, "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-49b476b47b35c8a3", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/wallets/WalletsTable.tsx:163", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/wallets/WalletsTable.tsx:163"}, "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-6692633147536968", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SettingsNavigation.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SettingsNavigation.tsx:189"}, "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-329aa1484fa17835", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/NetworkLayerSettingsPanel.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/NetworkLayerSettingsPanel.tsx:157"}, "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-6748b363156098a4", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/PrivacySettingsPanel.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/PrivacySettingsPanel.tsx:183"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-662fea048291ca9b", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/MarketDataSettingsPanel.tsx:420", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/MarketDataSettingsPanel.tsx:420"}, "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-9b9ecc6484bd9276", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx:10", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx:1004"}, "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-1731f175af2bef3c", "name": "\"active\" state uses light bg in a dark theme \u2014 ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx:161", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx:161"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bf57db116458284c", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SettingsControls.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SettingsControls.tsx:96"}, "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-160ef34ea14d2289", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/AiProvidersSettingsPanel.tsx:18", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/AiProvidersSettingsPanel.tsx:184"}, "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-4131a9ec31d6d317", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/Onboarding/ImportProjectPanel.tsx:311", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/Onboarding/ImportProjectPanel.tsx:311"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3656334671ed94db", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/SourceFunds.tsx:673", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/SourceFunds.tsx:673"}, "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-90adcd1a411762df", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Books.tsx:652", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Books.tsx:652"}, "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-39e92fe5122c7369", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/BirdsEye.tsx:561", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/BirdsEye.tsx:561"}, "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-23f8b55d6965abb8", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/NodeConnectionDetail.tsx:285", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/NodeConnectionDetail.tsx:285"}, "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-44bd40f274029bd3", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Journals.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Journals.tsx:241"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-118e352b58641fda", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/ConnectionDetail.tsx:963", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/ConnectionDetail.tsx:963"}, "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-405dd739514c28ca", "name": "TODO/FIXME marker in shipping code \u2014 ui-tauri/src/routes/ConnectionDetail.tsx:374", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 ui-tauri/src/routes/ConnectionDetail.tsx:374"}, "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-df402ffb2571eded", "name": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Reports.tsx:817", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Reports.tsx:817"}, "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-fb816fb8985ba396", "name": "Possible secret in tests/test_ai_core.py", "shortDescription": {"text": "Possible secret in tests/test_ai_core.py"}, "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-648a0247f4328db3", "name": "Insecure pattern 'node_child_process' in ui-tauri/vite.config.ts:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in ui-tauri/vite.config.ts:6"}, "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-145a319cd524423d", "name": "Insecure pattern 'dangerous_innerhtml' in ui-tauri/src/components/ui/chart.tsx:93", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in ui-tauri/src/components/ui/chart.tsx:93"}, "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-0ee0d5a9f5ac818c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 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-587ed9f0884b5757", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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/setup-python@v5 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-0cb96fef3cf0bfc0", "name": "Very large file: tests/test_review_regressions.py (10482 lines)", "shortDescription": {"text": "Very large file: tests/test_review_regressions.py (10482 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-660153a8a9c4c084", "name": "Very large file: tests/test_ai_core.py (1310 lines)", "shortDescription": {"text": "Very large file: tests/test_ai_core.py (1310 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-adc846282f1f41f7", "name": "Very large file: tests/test_sync_backends.py (1458 lines)", "shortDescription": {"text": "Very large file: tests/test_sync_backends.py (1458 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-c04c3a1db5e8218d", "name": "Very large file: tests/test_cli_smoke.py (3359 lines)", "shortDescription": {"text": "Very large file: tests/test_cli_smoke.py (3359 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-6cf3e2e8f57f80ee", "name": "Very large file: tests/test_rates_kraken_csv.py (1821 lines)", "shortDescription": {"text": "Very large file: tests/test_rates_kraken_csv.py (1821 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-8aac3c768578af6a", "name": "Very large file: tests/test_daemon_smoke.py (7944 lines)", "shortDescription": {"text": "Very large file: tests/test_daemon_smoke.py (7944 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-510595a1146d33b2", "name": "Very large file: tests/test_source_funds_cli.py (3044 lines)", "shortDescription": {"text": "Very large file: tests/test_source_funds_cli.py (3044 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-02d02f2db6371270", "name": "Very large file: ui-tauri/src/daemon/mock.ts (3682 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/daemon/mock.ts (3682 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-b7670bd8df87dfcb", "name": "Very large file: ui-tauri/src/components/transactions/dashboard/TransactionsTable.tsx (1761 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/components/transactions/dashboard/TransactionsTable.tsx (1761 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-b149d8bfdc8f87d9", "name": "Very large file: ui-tauri/src/components/overview-dashboard/model.ts (2421 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/components/overview-dashboard/model.ts (2421 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-63cf43295c639a6c", "name": "Very large file: ui-tauri/src/components/kb/AppShell.tsx (2635 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/components/kb/AppShell.tsx (2635 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-982d2a04daf82113", "name": "Very large file: ui-tauri/src/components/kb/AddConnectionDialog.tsx (2875 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/components/kb/AddConnectionDialog.tsx (2875 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-c139d5e08a881735", "name": "Very large file: ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx (1577 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx (1577 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-a945c6ff39644978", "name": "Very large file: ui-tauri/src/routes/SourceFunds.tsx (3085 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/routes/SourceFunds.tsx (3085 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-b3915841f30eabdf", "name": "Very large file: ui-tauri/src/routes/SwapMatching.tsx (2357 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/routes/SwapMatching.tsx (2357 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-a43e3fc3ed354a0b", "name": "Very large file: ui-tauri/src/routes/ConnectionDetail.tsx (1784 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/routes/ConnectionDetail.tsx (1784 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-273206488b819f73", "name": "Very large file: ui-tauri/src/routes/Reports.tsx (2358 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src/routes/Reports.tsx (2358 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-84f788c7978fc5a0", "name": "Very large file: ui-tauri/src-tauri/src/supervisor.rs (2074 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src-tauri/src/supervisor.rs (2074 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-4d58e5f713c20cf7", "name": "Very large file: ui-tauri/src-tauri/src/lib.rs (3164 lines)", "shortDescription": {"text": "Very large file: ui-tauri/src-tauri/src/lib.rs (3164 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-d79137773dd168f9", "name": "Very large file: kassiber/daemon_freshness.py (1622 lines)", "shortDescription": {"text": "Very large file: kassiber/daemon_freshness.py (1622 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-44750d19291a33c7", "name": "Very large file: kassiber/importers.py (2034 lines)", "shortDescription": {"text": "Very large file: kassiber/importers.py (2034 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-d47a191f7d42bf37", "name": "Very large file: kassiber/daemon.py (9327 lines)", "shortDescription": {"text": "Very large file: kassiber/daemon.py (9327 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-959ba876c9509cee", "name": "Very large file: kassiber/db.py (2322 lines)", "shortDescription": {"text": "Very large file: kassiber/db.py (2322 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-42bd3325cb3b168a", "name": "Very large file: kassiber/core/reports.py (4768 lines)", "shortDescription": {"text": "Very large file: kassiber/core/reports.py (4768 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-fffbe8d3bf3e36c4", "name": "Very large file: kassiber/core/source_funds.py (2942 lines)", "shortDescription": {"text": "Very large file: kassiber/core/source_funds.py (2942 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-4d46b34e6498bdc8", "name": "Very large file: kassiber/core/imports.py (1902 lines)", "shortDescription": {"text": "Very large file: kassiber/core/imports.py (1902 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-6c50ea0d09fe0ab7", "name": "Very large file: kassiber/core/commercial.py (1524 lines)", "shortDescription": {"text": "Very large file: kassiber/core/commercial.py (1524 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5021aecb9b770fe7", "name": "Very large file: kassiber/core/sync_backends.py (2581 lines)", "shortDescription": {"text": "Very large file: kassiber/core/sync_backends.py (2581 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-bf949cbdb1cd449f", "name": "Very large file: kassiber/core/ui_snapshot.py (4735 lines)", "shortDescription": {"text": "Very large file: kassiber/core/ui_snapshot.py (4735 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-77787b02bdeef182", "name": "Very large file: kassiber/core/rates.py (2138 lines)", "shortDescription": {"text": "Very large file: kassiber/core/rates.py (2138 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-357a488dbf8e8eeb", "name": "Very large file: kassiber/core/lightning/cln.py (1454 lines)", "shortDescription": {"text": "Very large file: kassiber/core/lightning/cln.py (1454 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-bbdb2c80ae271a3a", "name": "Very large file: kassiber/core/engines/rp2.py (1581 lines)", "shortDescription": {"text": "Very large file: kassiber/core/engines/rp2.py (1581 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-b2f9a113ed11ac34", "name": "Very large file: kassiber/cli/handlers.py (4009 lines)", "shortDescription": {"text": "Very large file: kassiber/cli/handlers.py (4009 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-8ecbe000d3d45c40", "name": "Very large file: kassiber/cli/main.py (3792 lines)", "shortDescription": {"text": "Very large file: kassiber/cli/main.py (3792 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-a0c58049a4fd3592", "name": "Very large file: kassiber/ai/tools.py (1415 lines)", "shortDescription": {"text": "Very large file: kassiber/ai/tools.py (1415 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 7 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 265 placeholder/mock markers across 49 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-2679282aa1c484b5", "name": "Agent authority lacks a verifier contract: AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54295831bdc82e5b", "name": "Agent authority lacks a verifier contract: .codex/AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .codex/AGENTS.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9cdb77736040f22e", "name": "Agent authority lacks a verifier contract: .claude/commands/gate.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/gate.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9946ba1b5d44143", "name": "Legacy-named symbol `_downgrade_transaction_pairs_to_legacy` in tests/test_schema_swap_matching.py:247", "shortDescription": {"text": "Legacy-named symbol `_downgrade_transaction_pairs_to_legacy` in tests/test_schema_swap_matching.py:247"}, "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-def7c257b5ab8bc5", "name": "Legacy-named symbol `stored_copy` in tests/test_audit_package.py:370", "shortDescription": {"text": "Legacy-named symbol `stored_copy` in tests/test_audit_package.py:370"}, "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-d925bf89d79b8211", "name": "Commented-code block (5 lines) in tests/test_cli_smoke.py:127", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_cli_smoke.py:127"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b43223d3126c57de", "name": "Commented-code block (5 lines) in tests/test_swap_matching_cli.py:350", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_swap_matching_cli.py:350"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6da05d7a2221b76", "name": "Commented-code block (5 lines) in tests/test_transfer_matching.py:393", "shortDescription": {"text": "Commented-code block (5 lines) in tests/test_transfer_matching.py:393"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1c626443f5b5fdf", "name": "Legacy-named symbol `export_backup` in tests/test_secrets_smoke.py:42", "shortDescription": {"text": "Legacy-named symbol `export_backup` in tests/test_secrets_smoke.py:42"}, "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-f195c6d802d673cf", "name": "Commented-code block (7 lines) in tests/test_lightning_scaffold.py:415", "shortDescription": {"text": "Commented-code block (7 lines) in tests/test_lightning_scaffold.py:415"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f190e5bef5acb3b3", "name": "Commented-code block (5 lines) in ui-tauri/vite.config.ts:446", "shortDescription": {"text": "Commented-code block (5 lines) in ui-tauri/vite.config.ts:446"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c28e26317b040d05", "name": "Commented-code block (5 lines) in ui-tauri/src/daemon/stream.ts:229", "shortDescription": {"text": "Commented-code block (5 lines) in ui-tauri/src/daemon/stream.ts:229"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85888b2aac103f28", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ui-tauri/src/daemon/transport.ts:569", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui-tauri/src/daemon/transport.ts:569"}, "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-74dd591b31677770", "name": "Commented-code block (5 lines) in ui-tauri/src/components/transactions/model.ts:676", "shortDescription": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/transactions/model.ts:676"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6dcf1eef135ec2c", "name": "Commented-code block (5 lines) in ui-tauri/src/components/ai/ProviderModelPicker.tsx:108", "shortDescription": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/ai/ProviderModelPicker.tsx: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-68d8df424fddc758", "name": "Commented-code block (5 lines) in ui-tauri/src/components/kb/settingsSections.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/kb/settingsSections.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69aeadde1d33fe0e", "name": "Commented-code block (5 lines) in ui-tauri/src/components/kb/AppShell.tsx:856", "shortDescription": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/kb/AppShell.tsx:856"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0386c73992915c41", "name": "Commented-code block (6 lines) in ui-tauri/src/components/kb/menuIntent.ts:109", "shortDescription": {"text": "Commented-code block (6 lines) in ui-tauri/src/components/kb/menuIntent.ts:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d3b60f395ba6b82", "name": "Commented-code block (5 lines) in ui-tauri/src/components/kb/menuIntent.test.ts:241", "shortDescription": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/kb/menuIntent.test.ts:241"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93152f96b66f3657", "name": "Commented-code block (6 lines) in ui-tauri/src/lib/backendTrust.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in ui-tauri/src/lib/backendTrust.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19aa80b31349b95c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 ui-tauri/src/lib/filePicker.ts:43", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui-tauri/src/lib/filePicker.ts:43"}, "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-2583592407f7cb1d", "name": "Commented-code block (5 lines) in ui-tauri/src/routes/ConnectionDetail.tsx:104", "shortDescription": {"text": "Commented-code block (5 lines) in ui-tauri/src/routes/ConnectionDetail.tsx:104"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53dcc670bf632de7", "name": "Stub function `write` (body is just `pass`/`return`) \u2014 kassiber/daemon_freshness.py:35", "shortDescription": {"text": "Stub function `write` (body is just `pass`/`return`) \u2014 kassiber/daemon_freshness.py:35"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1bddd647aaabcd1", "name": "Commented-code block (5 lines) in kassiber/daemon.py:401", "shortDescription": {"text": "Commented-code block (5 lines) in kassiber/daemon.py:401"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34e78598b95b1107", "name": "Legacy-named symbol `transaction_pairs_legacy` in kassiber/db.py:2001", "shortDescription": {"text": "Legacy-named symbol `transaction_pairs_legacy` in kassiber/db.py:2001"}, "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-afea736ee4521fb6", "name": "Commented-code block (5 lines) in kassiber/secrets/__init__.py:41", "shortDescription": {"text": "Commented-code block (5 lines) in kassiber/secrets/__init__.py:41"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83894b148a5a573e", "name": "Commented-code block (6 lines) in kassiber/secrets/migration.py:39", "shortDescription": {"text": "Commented-code block (6 lines) in kassiber/secrets/migration.py:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ed9b6fd1d454835", "name": "Legacy-named symbol `export_backup` in kassiber/backup/cli.py:15", "shortDescription": {"text": "Legacy-named symbol `export_backup` in kassiber/backup/cli.py:15"}, "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-76d6e2bd14fa7ac1", "name": "Legacy-named symbol `export_backup` in kassiber/backup/__init__.py:27", "shortDescription": {"text": "Legacy-named symbol `export_backup` in kassiber/backup/__init__.py:27"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-705fde4ccfd3e3ab", "name": "Legacy-named symbol `pre_restore_backup` in kassiber/backup/pack.py:85", "shortDescription": {"text": "Legacy-named symbol `pre_restore_backup` in kassiber/backup/pack.py:85"}, "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-70882979b84257aa", "name": "Commented-code block (8 lines) in kassiber/backup/pack.py:486", "shortDescription": {"text": "Commented-code block (8 lines) in kassiber/backup/pack.py:486"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71c3cd825caf9a13", "name": "Network/subprocess call without timeout or try/except \u2014 kassiber/backup/age_cli.py:86", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 kassiber/backup/age_cli.py:86"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7db5858bbc20cd0a", "name": "Commented-code block (5 lines) in kassiber/core/tax_events.py:13", "shortDescription": {"text": "Commented-code block (5 lines) in kassiber/core/tax_events.py:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd09fac83cab9c0d", "name": "Commented-code block (5 lines) in kassiber/core/source_funds.py:90", "shortDescription": {"text": "Commented-code block (5 lines) in kassiber/core/source_funds.py:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c27b008f7aefc3f7", "name": "Legacy-named symbol `attachment_copy` in kassiber/core/attachments.py:402", "shortDescription": {"text": "Legacy-named symbol `attachment_copy` in kassiber/core/attachments.py:402"}, "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-c0bd69fe818d418c", "name": "Commented-code block (7 lines) in kassiber/core/source_funds_coverage.py:58", "shortDescription": {"text": "Commented-code block (7 lines) in kassiber/core/source_funds_coverage.py:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3f8bb483f658fc7", "name": "Legacy-named symbol `consecutive_unused` in kassiber/core/sync_backends.py:663", "shortDescription": {"text": "Legacy-named symbol `consecutive_unused` in kassiber/core/sync_backends.py:663"}, "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-e498ff5df0d08d56", "name": "Commented-code block (6 lines) in kassiber/core/sync_backends.py:536", "shortDescription": {"text": "Commented-code block (6 lines) in kassiber/core/sync_backends.py:536"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7256611c174240b0", "name": "Commented-code block (10 lines) in kassiber/core/lightning/types.py:83", "shortDescription": {"text": "Commented-code block (10 lines) in kassiber/core/lightning/types.py:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6878fe9e01c15e1e", "name": "Commented-code block (5 lines) in kassiber/core/lightning/cln.py:250", "shortDescription": {"text": "Commented-code block (5 lines) in kassiber/core/lightning/cln.py:250"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2f1897ff063019a", "name": "Commented-code block (5 lines) in kassiber/core/lightning/profitability.py:22", "shortDescription": {"text": "Commented-code block (5 lines) in kassiber/core/lightning/profitability.py:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e506fe99b3914f6", "name": "Commented-code block (8 lines) in kassiber/core/lightning/lnd.py:318", "shortDescription": {"text": "Commented-code block (8 lines) in kassiber/core/lightning/lnd.py:318"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54112c7010bbe6cc", "name": "Commented-code block (6 lines) in kassiber/core/engines/rp2.py:88", "shortDescription": {"text": "Commented-code block (6 lines) in kassiber/core/engines/rp2.py:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f1f94b51911c8f9", "name": "Legacy-named symbol `dispatch_backup` in kassiber/cli/main.py:117", "shortDescription": {"text": "Legacy-named symbol `dispatch_backup` in kassiber/cli/main.py:117"}, "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-8e047ab7af03962f", "name": "7 env vars used in code but missing from .env.example", "shortDescription": {"text": "7 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DEV`, `GITHUB_SHA`, `HOME`, `KASSIBER_BUILD_COMMIT`, `KASSIBER_BUILD_VERSION`, `SATBOOKS_DEFAULT_BACKEND`, `VITE_DAEMON`. 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-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nkassiber/daemon_freshness.py:onchain_wallet, kassiber/daemon_freshness.py:btcpay_wallet, kassiber/daemon_freshness.py:btcpay_provenance, kassiber/daemon_freshness.py:market_rates\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nkassiber/austrian_pdf_report.py:spacer, kassiber/source_funds_pdf_report.py:spacer\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nkassiber/core/metadata.py:clear_transaction_note, kassiber/core/metadata.py:update_transaction_metadata, kassiber/core/metadata.py:list_transaction_history, kassiber/core/metadata.py:revert_transaction_edit\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9dad557909b86499", "name": "Near-duplicate function bodies in 10 places", "shortDescription": {"text": "Near-duplicate function bodies in 10 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nkassiber/core/source_funds.py:create_source, kassiber/core/source_funds.py:attach_source_evidence, kassiber/core/source_funds.py:create_link, kassiber/core/source_funds.py:update_link_review\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nkassiber/core/imports.py:insert_wallet_records, kassiber/core/imports.py:import_bullbitcoin_records_full, kassiber/core/imports.py:import_records_into_wallet\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24606"}, "properties": {"repository": "bitcoinaustria/kassiber", "repoUrl": "https://github.com/bitcoinaustria/kassiber", "branch": "main"}, "results": [{"ruleId": "scanner-ab51d5a20310fd66", "level": "note", "message": {"text": "Possibly dead Python function: liquid_amount_from_value"}, "properties": {"repobilityId": "dc68095dd3684b0b", "scanner": "scanner-primary", "fingerprint": "ab51d5a20310fd66", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/wallet_descriptors.py:394"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-654b1fc592508c55", "level": "note", "message": {"text": "Possibly dead Python function: draw"}, "properties": {"repobilityId": "53ecb21dcbad2db9", "scanner": "scanner-primary", "fingerprint": "654b1fc592508c55", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/source_funds_pdf_report.py:199"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-257cde38a2f09e97", "level": "note", "message": {"text": "Possibly dead Python function: print_table"}, "properties": {"repobilityId": "4ce2019be257eb93", "scanner": "scanner-primary", "fingerprint": "257cde38a2f09e97", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/envelope.py:280"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-71e4e31cd30849f6", "level": "note", "message": {"text": "Possibly dead Python function: build_generic_policy"}, "properties": {"repobilityId": "68c9bb83a228e922", "scanner": "scanner-primary", "fingerprint": "71e4e31cd30849f6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/tax_policy.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d13a3f3346b483e9", "level": "note", "message": {"text": "Possibly dead Python function: build_austrian_policy"}, "properties": {"repobilityId": "6db87109493eb794", "scanner": "scanner-primary", "fingerprint": "d13a3f3346b483e9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/tax_policy.py:79"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5624626f5a4c2842", "level": "note", "message": {"text": "Possibly dead Python function: coverage_for_known_codes"}, "properties": {"repobilityId": "7419f9dc3049ac11", "scanner": "scanner-primary", "fingerprint": "5624626f5a4c2842", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/source_funds_hints.py:172"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d0686affe048caa2", "level": "note", "message": {"text": "Possibly dead Python function: supported_reveal_modes"}, "properties": {"repobilityId": "2ad7ca628fd508de", "scanner": "scanner-primary", "fingerprint": "d0686affe048caa2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/source_funds_recipients.py:341"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41f47e7280763a6f", "level": "note", "message": {"text": "Possibly dead Python function: output_addresses"}, "properties": {"repobilityId": "65e6efa8d2e5c65b", "scanner": "scanner-primary", "fingerprint": "41f47e7280763a6f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:363"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-69f0642003d53999", "level": "note", "message": {"text": "Possibly dead Python function: target_used_single"}, "properties": {"repobilityId": "f29b6bfc914992f8", "scanner": "scanner-primary", "fingerprint": "69f0642003d53999", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:769"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a0cd22652e5e9d40", "level": "note", "message": {"text": "Possibly dead Python function: fetch_target_utxos"}, "properties": {"repobilityId": "2f80dc70b36c739c", "scanner": "scanner-primary", "fingerprint": "a0cd22652e5e9d40", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1064"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-611827a24ff22563", "level": "note", "message": {"text": "Possibly dead Python function: utxo_fetch_progress"}, "properties": {"repobilityId": "50510cec366e0b0a", "scanner": "scanner-primary", "fingerprint": "611827a24ff22563", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1074"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-96b3713be1f178a8", "level": "note", "message": {"text": "Possibly dead Python function: fetch_liquid_decode"}, "properties": {"repobilityId": "78414956e471b962", "scanner": "scanner-primary", "fingerprint": "96b3713be1f178a8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1105"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76bca7f97a20f3fe", "level": "note", "message": {"text": "Possibly dead Python function: fetch_stats"}, "properties": {"repobilityId": "c776809858118d94", "scanner": "scanner-primary", "fingerprint": "76bca7f97a20f3fe", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1450"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8f50d0687c0aa7cb", "level": "note", "message": {"text": "Possibly dead Python function: stats_fetch_progress"}, "properties": {"repobilityId": "33bf95a75af83f91", "scanner": "scanner-primary", "fingerprint": "8f50d0687c0aa7cb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1455"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b804dd883c37db3a", "level": "note", "message": {"text": "Possibly dead Python function: fetch_target_transactions"}, "properties": {"repobilityId": "76b38b768a5c55bb", "scanner": "scanner-primary", "fingerprint": "b804dd883c37db3a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1509"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fa0b86b95da9b25c", "level": "note", "message": {"text": "Possibly dead Python function: history_fetch_progress"}, "properties": {"repobilityId": "60273a5925980437", "scanner": "scanner-primary", "fingerprint": "fa0b86b95da9b25c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1523"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b08579ec4737c6fc", "level": "note", "message": {"text": "Possibly dead Python function: liquid_tx_lookup"}, "properties": {"repobilityId": "26af85452234342d", "scanner": "scanner-primary", "fingerprint": "b08579ec4737c6fc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1553"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3afc37673e3a4e9a", "level": "note", "message": {"text": "Possibly dead Python function: fetch_liquid_main_tx"}, "properties": {"repobilityId": "7a0c43ffe5828a22", "scanner": "scanner-primary", "fingerprint": "3afc37673e3a4e9a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/sync_backends.py:1579"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-553d4cb100549e26", "level": "note", "message": {"text": "Possibly dead Python function: recent_key"}, "properties": {"repobilityId": "b6c507c4e74e1dfb", "scanner": "scanner-primary", "fingerprint": "553d4cb100549e26", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "kassiber/core/ui_snapshot.py:2048"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-113282b240bad5dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailHeader.tsx:127"}, "properties": {"repobilityId": "42035519ae2d92ea", "scanner": "scanner-primary", "fingerprint": "113282b240bad5dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-64fb295b91b3bc32", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/NewTransactionDialog.tsx:656"}, "properties": {"repobilityId": "715a223837db5026", "scanner": "scanner-primary", "fingerprint": "64fb295b91b3bc32", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7596d4ab41e718a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionEditHistoryPanel.tsx:70"}, "properties": {"repobilityId": "a1ce146530a4e44d", "scanner": "scanner-primary", "fingerprint": "7596d4ab41e718a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d8d8bfa17e444046", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/ExplorerOpenDialog.tsx:81"}, "properties": {"repobilityId": "0c8c43dfadb48c98", "scanner": "scanner-primary", "fingerprint": "d8d8bfa17e444046", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb60212f6721943b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailAttachmentsPanel.tsx:360"}, "properties": {"repobilityId": "9e4c3c9013226ca6", "scanner": "scanner-primary", "fingerprint": "cb60212f6721943b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e7dec4075e74113d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/TransactionDetailSheetParts.tsx:154"}, "properties": {"repobilityId": "f8834135b5121001", "scanner": "scanner-primary", "fingerprint": "e7dec4075e74113d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e15da3838c51d5b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/dashboard/TransactionsTable.tsx:1202"}, "properties": {"repobilityId": "73697aea0a028f76", "scanner": "scanner-primary", "fingerprint": "e15da3838c51d5b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e0c687caeb3bbbd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/transactions/dashboard/TransactionWorkbench.tsx:552"}, "properties": {"repobilityId": "81b44f2a98bbcf32", "scanner": "scanner-primary", "fingerprint": "8e0c687caeb3bbbd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2b9c936574c8a365", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/tool.tsx:77"}, "properties": {"repobilityId": "579bcaa3a0df7fd4", "scanner": "scanner-primary", "fingerprint": "2b9c936574c8a365", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb736bf25a69b5e0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/reasoning.tsx:48"}, "properties": {"repobilityId": "34ee2e8ca0536ef9", "scanner": "scanner-primary", "fingerprint": "bb736bf25a69b5e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6e02727c1143725b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai-elements/chain-of-thought.tsx:46"}, "properties": {"repobilityId": "a0e7e3065bf97cae", "scanner": "scanner-primary", "fingerprint": "6e02727c1143725b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8f619dd13b0e2712", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/OverviewSidePanel.tsx:110"}, "properties": {"repobilityId": "86bd7e5e6d0f7e78", "scanner": "scanner-primary", "fingerprint": "8f619dd13b0e2712", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-915379969647d27f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/ChartControlsSheet.tsx:128"}, "properties": {"repobilityId": "96237e3cb986dfff", "scanner": "scanner-primary", "fingerprint": "915379969647d27f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2102a6023b50b48", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/WelcomeSection.tsx:57"}, "properties": {"repobilityId": "affa59f7252a30f3", "scanner": "scanner-primary", "fingerprint": "e2102a6023b50b48", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-87b7a58d3685b477", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/RecentTransactionsTable.tsx:275"}, "properties": {"repobilityId": "648db83da9db8745", "scanner": "scanner-primary", "fingerprint": "87b7a58d3685b477", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c5259fd5dfaba6f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/ChartStat.tsx:37"}, "properties": {"repobilityId": "5feb665f2b5d8401", "scanner": "scanner-primary", "fingerprint": "4c5259fd5dfaba6f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56557ac16daa8135", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/overview-dashboard/BooksHealthPanel.tsx:107"}, "properties": {"repobilityId": "3c63fb9271ed2bfb", "scanner": "scanner-primary", "fingerprint": "56557ac16daa8135", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d7522d040371cba7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/shadcnblocks/settings-integrations8.tsx:113"}, "properties": {"repobilityId": "787d341594bb865c", "scanner": "scanner-primary", "fingerprint": "d7522d040371cba7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4b6ee8b0b6db20b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/shadcnblocks/settings-integrations4.tsx:89"}, "properties": {"repobilityId": "0d743c83bbb62b2f", "scanner": "scanner-primary", "fingerprint": "c4b6ee8b0b6db20b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f663e2cac98330f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/ai/ChatHistoryPanel.tsx:101"}, "properties": {"repobilityId": "34c9b432c41d566d", "scanner": "scanner-primary", "fingerprint": "f663e2cac98330f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f788ebcfdcaebfb3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 ui-tauri/src/components/ui/chart.tsx:93"}, "properties": {"repobilityId": "5481974f1fe2b49b", "scanner": "scanner-primary", "fingerprint": "f788ebcfdcaebfb3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f83bbc396d091936", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/LogsTableControls.tsx:236"}, "properties": {"repobilityId": "05ca1711248f68a6", "scanner": "scanner-primary", "fingerprint": "f83bbc396d091936", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d61d198bf0f06711", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/ReviewDataTable.tsx:568"}, "properties": {"repobilityId": "af8b574adcfa0403", "scanner": "scanner-primary", "fingerprint": "d61d198bf0f06711", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab2dda37fc780f1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppHeader.tsx:68"}, "properties": {"repobilityId": "00fb74632367b652", "scanner": "scanner-primary", "fingerprint": "ab2dda37fc780f1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-50d470224e0ae4fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/ScreenAssistantMockup.tsx:171"}, "properties": {"repobilityId": "714b9cdc8403f387", "scanner": "scanner-primary", "fingerprint": "50d470224e0ae4fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-77c07c5fddbc3ae9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppShell.tsx:1323"}, "properties": {"repobilityId": "115f13cec74d86ad", "scanner": "scanner-primary", "fingerprint": "77c07c5fddbc3ae9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f971752f9be2b837", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AddConnectionDialog.tsx:1345"}, "properties": {"repobilityId": "0f4f53d6e0cb18d7", "scanner": "scanner-primary", "fingerprint": "f971752f9be2b837", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b561e982f599cbad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/AppFooter.tsx:72"}, "properties": {"repobilityId": "d192d48adf90ee54", "scanner": "scanner-primary", "fingerprint": "b561e982f599cbad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b87cb557d8224354", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/BookSwitcherPopover.tsx:168"}, "properties": {"repobilityId": "aa94d4a4df8b6253", "scanner": "scanner-primary", "fingerprint": "b87cb557d8224354", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0ed567e045fe947a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/NetworkStatusIndicator.tsx:486"}, "properties": {"repobilityId": "69ef3a7cb678b8ff", "scanner": "scanner-primary", "fingerprint": "0ed567e045fe947a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf1c3d6748a7779c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/wallets/UtxosInventoryPanel.tsx:387"}, "properties": {"repobilityId": "6c0ee913ab4fb321", "scanner": "scanner-primary", "fingerprint": "bf1c3d6748a7779c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-49b476b47b35c8a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/wallets/WalletsTable.tsx:163"}, "properties": {"repobilityId": "e926a11b09fe3c0c", "scanner": "scanner-primary", "fingerprint": "49b476b47b35c8a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6692633147536968", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SettingsNavigation.tsx:189"}, "properties": {"repobilityId": "6a89cdba78daf7de", "scanner": "scanner-primary", "fingerprint": "6692633147536968", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-329aa1484fa17835", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/NetworkLayerSettingsPanel.tsx:157"}, "properties": {"repobilityId": "ad0b56a5760a0c0c", "scanner": "scanner-primary", "fingerprint": "329aa1484fa17835", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6748b363156098a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/PrivacySettingsPanel.tsx:183"}, "properties": {"repobilityId": "3c29c4836ae99435", "scanner": "scanner-primary", "fingerprint": "6748b363156098a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-662fea048291ca9b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/MarketDataSettingsPanel.tsx:420"}, "properties": {"repobilityId": "59557a8082879e0c", "scanner": "scanner-primary", "fingerprint": "662fea048291ca9b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b9ecc6484bd9276", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx:1004"}, "properties": {"repobilityId": "5fc33b5b99a06f29", "scanner": "scanner-primary", "fingerprint": "9b9ecc6484bd9276", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1731f175af2bef3c", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx:161"}, "properties": {"repobilityId": "549b2c624a41925c", "scanner": "scanner-primary", "fingerprint": "1731f175af2bef3c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-bf57db116458284c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/SettingsControls.tsx:96"}, "properties": {"repobilityId": "779ed66f5a87addf", "scanner": "scanner-primary", "fingerprint": "bf57db116458284c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-160ef34ea14d2289", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/settings/AiProvidersSettingsPanel.tsx:184"}, "properties": {"repobilityId": "eb60b082837640aa", "scanner": "scanner-primary", "fingerprint": "160ef34ea14d2289", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4131a9ec31d6d317", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/components/kb/Onboarding/ImportProjectPanel.tsx:311"}, "properties": {"repobilityId": "5f42fd392100f345", "scanner": "scanner-primary", "fingerprint": "4131a9ec31d6d317", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3656334671ed94db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/SourceFunds.tsx:673"}, "properties": {"repobilityId": "6ec07a938f74a8c3", "scanner": "scanner-primary", "fingerprint": "3656334671ed94db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-90adcd1a411762df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Books.tsx:652"}, "properties": {"repobilityId": "28f348d16805a89e", "scanner": "scanner-primary", "fingerprint": "90adcd1a411762df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39e92fe5122c7369", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/BirdsEye.tsx:561"}, "properties": {"repobilityId": "395db6e581fe5b3a", "scanner": "scanner-primary", "fingerprint": "39e92fe5122c7369", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23f8b55d6965abb8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/NodeConnectionDetail.tsx:285"}, "properties": {"repobilityId": "bedcf421f184c796", "scanner": "scanner-primary", "fingerprint": "23f8b55d6965abb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44bd40f274029bd3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Journals.tsx:241"}, "properties": {"repobilityId": "4d92f69f42588845", "scanner": "scanner-primary", "fingerprint": "44bd40f274029bd3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-118e352b58641fda", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/ConnectionDetail.tsx:963"}, "properties": {"repobilityId": "8a73c0a2bf938403", "scanner": "scanner-primary", "fingerprint": "118e352b58641fda", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-405dd739514c28ca", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 ui-tauri/src/routes/ConnectionDetail.tsx:374"}, "properties": {"repobilityId": "a786879b241ac2b6", "scanner": "scanner-primary", "fingerprint": "405dd739514c28ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-df402ffb2571eded", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 ui-tauri/src/routes/Reports.tsx:817"}, "properties": {"repobilityId": "a7b29fc0e669cacd", "scanner": "scanner-primary", "fingerprint": "df402ffb2571eded", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb816fb8985ba396", "level": "error", "message": {"text": "Possible secret in tests/test_ai_core.py"}, "properties": {"repobilityId": "f88bf6d789ca1265", "scanner": "scanner-primary", "fingerprint": "fb816fb8985ba396", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tests/test_ai_core.py"}, "region": {"startLine": 1043}}}]}, {"ruleId": "scanner-648a0247f4328db3", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in ui-tauri/vite.config.ts:6"}, "properties": {"repobilityId": "9599c729a3c5c1fc", "scanner": "scanner-primary", "fingerprint": "648a0247f4328db3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui-tauri/vite.config.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-145a319cd524423d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in ui-tauri/src/components/ui/chart.tsx:93"}, "properties": {"repobilityId": "ce5dcb7057629925", "scanner": "scanner-primary", "fingerprint": "145a319cd524423d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui-tauri/src/components/ui/chart.tsx"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bae119696f6b48d1", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "73ac4d10c81b1a2e", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "141121b33e7adead", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 211}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "43694b7a2233d622", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 256}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e05ba4c2aeb374e5", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 261}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04e00815ca45b05a", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 266}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a6e595a6a2c95852", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 295}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "141121b33e7adead", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 352}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bae119696f6b48d1", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 390}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "73ac4d10c81b1a2e", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 395}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "141121b33e7adead", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 488}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a6e595a6a2c95852", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 510}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a6e595a6a2c95852", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 517}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "37f6c0739a4c1358", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 555}}}]}, {"ruleId": "scanner-0ee0d5a9f5ac818c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c8c906b6af8bded3", "scanner": "scanner-primary", "fingerprint": "0ee0d5a9f5ac818c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 588}}}]}, {"ruleId": "scanner-587ed9f0884b5757", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "85e99d7164d6b8f6", "scanner": "scanner-primary", "fingerprint": "587ed9f0884b5757", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/prerelease-binaries.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "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": 16}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3beb6cb780c591da", "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": 21}}}]}, {"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": 27}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54597edb7f5bad38", "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": 32}}}]}, {"ruleId": "scanner-0cb96fef3cf0bfc0", "level": "note", "message": {"text": "Very large file: tests/test_review_regressions.py (10482 lines)"}, "properties": {"repobilityId": "d96dcf62b693b39d", "scanner": "scanner-primary", "fingerprint": "0cb96fef3cf0bfc0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-660153a8a9c4c084", "level": "note", "message": {"text": "Very large file: tests/test_ai_core.py (1310 lines)"}, "properties": {"repobilityId": "fa80609de9c44513", "scanner": "scanner-primary", "fingerprint": "660153a8a9c4c084", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-adc846282f1f41f7", "level": "note", "message": {"text": "Very large file: tests/test_sync_backends.py (1458 lines)"}, "properties": {"repobilityId": "9f747da9f03d29ba", "scanner": "scanner-primary", "fingerprint": "adc846282f1f41f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c04c3a1db5e8218d", "level": "note", "message": {"text": "Very large file: tests/test_cli_smoke.py (3359 lines)"}, "properties": {"repobilityId": "3189a23c0f10750e", "scanner": "scanner-primary", "fingerprint": "c04c3a1db5e8218d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6cf3e2e8f57f80ee", "level": "note", "message": {"text": "Very large file: tests/test_rates_kraken_csv.py (1821 lines)"}, "properties": {"repobilityId": "40a09b456165ad11", "scanner": "scanner-primary", "fingerprint": "6cf3e2e8f57f80ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8aac3c768578af6a", "level": "note", "message": {"text": "Very large file: tests/test_daemon_smoke.py (7944 lines)"}, "properties": {"repobilityId": "eea8e72078572d90", "scanner": "scanner-primary", "fingerprint": "8aac3c768578af6a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-510595a1146d33b2", "level": "note", "message": {"text": "Very large file: tests/test_source_funds_cli.py (3044 lines)"}, "properties": {"repobilityId": "d31f46cee0dc695c", "scanner": "scanner-primary", "fingerprint": "510595a1146d33b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-02d02f2db6371270", "level": "note", "message": {"text": "Very large file: ui-tauri/src/daemon/mock.ts (3682 lines)"}, "properties": {"repobilityId": "0ca73c6b7f575d7e", "scanner": "scanner-primary", "fingerprint": "02d02f2db6371270", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b7670bd8df87dfcb", "level": "note", "message": {"text": "Very large file: ui-tauri/src/components/transactions/dashboard/TransactionsTable.tsx (1761 lines)"}, "properties": {"repobilityId": "3752d29e35303498", "scanner": "scanner-primary", "fingerprint": "b7670bd8df87dfcb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b149d8bfdc8f87d9", "level": "note", "message": {"text": "Very large file: ui-tauri/src/components/overview-dashboard/model.ts (2421 lines)"}, "properties": {"repobilityId": "49484bc0c6776e85", "scanner": "scanner-primary", "fingerprint": "b149d8bfdc8f87d9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-63cf43295c639a6c", "level": "note", "message": {"text": "Very large file: ui-tauri/src/components/kb/AppShell.tsx (2635 lines)"}, "properties": {"repobilityId": "d5a9b5e676b5f22e", "scanner": "scanner-primary", "fingerprint": "63cf43295c639a6c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-982d2a04daf82113", "level": "note", "message": {"text": "Very large file: ui-tauri/src/components/kb/AddConnectionDialog.tsx (2875 lines)"}, "properties": {"repobilityId": "c4133bd0c58745c1", "scanner": "scanner-primary", "fingerprint": "982d2a04daf82113", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c139d5e08a881735", "level": "note", "message": {"text": "Very large file: ui-tauri/src/components/kb/settings/SyncBackendSettingsModal.tsx (1577 lines)"}, "properties": {"repobilityId": "9c2541469864e79e", "scanner": "scanner-primary", "fingerprint": "c139d5e08a881735", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a945c6ff39644978", "level": "note", "message": {"text": "Very large file: ui-tauri/src/routes/SourceFunds.tsx (3085 lines)"}, "properties": {"repobilityId": "ae327ea3501c9356", "scanner": "scanner-primary", "fingerprint": "a945c6ff39644978", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b3915841f30eabdf", "level": "note", "message": {"text": "Very large file: ui-tauri/src/routes/SwapMatching.tsx (2357 lines)"}, "properties": {"repobilityId": "11865e2acbd672be", "scanner": "scanner-primary", "fingerprint": "b3915841f30eabdf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a43e3fc3ed354a0b", "level": "note", "message": {"text": "Very large file: ui-tauri/src/routes/ConnectionDetail.tsx (1784 lines)"}, "properties": {"repobilityId": "dcac51d4741b0f17", "scanner": "scanner-primary", "fingerprint": "a43e3fc3ed354a0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-273206488b819f73", "level": "note", "message": {"text": "Very large file: ui-tauri/src/routes/Reports.tsx (2358 lines)"}, "properties": {"repobilityId": "b9cb9ce30f65a4a8", "scanner": "scanner-primary", "fingerprint": "273206488b819f73", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-84f788c7978fc5a0", "level": "note", "message": {"text": "Very large file: ui-tauri/src-tauri/src/supervisor.rs (2074 lines)"}, "properties": {"repobilityId": "d3b039561c2b7681", "scanner": "scanner-primary", "fingerprint": "84f788c7978fc5a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d58e5f713c20cf7", "level": "note", "message": {"text": "Very large file: ui-tauri/src-tauri/src/lib.rs (3164 lines)"}, "properties": {"repobilityId": "6e38bf2114526132", "scanner": "scanner-primary", "fingerprint": "4d58e5f713c20cf7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d79137773dd168f9", "level": "note", "message": {"text": "Very large file: kassiber/daemon_freshness.py (1622 lines)"}, "properties": {"repobilityId": "251d490891e2a92e", "scanner": "scanner-primary", "fingerprint": "d79137773dd168f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-44750d19291a33c7", "level": "note", "message": {"text": "Very large file: kassiber/importers.py (2034 lines)"}, "properties": {"repobilityId": "7cc413ec494bd75b", "scanner": "scanner-primary", "fingerprint": "44750d19291a33c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d47a191f7d42bf37", "level": "note", "message": {"text": "Very large file: kassiber/daemon.py (9327 lines)"}, "properties": {"repobilityId": "97a7d175572b137c", "scanner": "scanner-primary", "fingerprint": "d47a191f7d42bf37", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-959ba876c9509cee", "level": "note", "message": {"text": "Very large file: kassiber/db.py (2322 lines)"}, "properties": {"repobilityId": "2b48e48035f62bfc", "scanner": "scanner-primary", "fingerprint": "959ba876c9509cee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-42bd3325cb3b168a", "level": "note", "message": {"text": "Very large file: kassiber/core/reports.py (4768 lines)"}, "properties": {"repobilityId": "57972c9c2c0ad66c", "scanner": "scanner-primary", "fingerprint": "42bd3325cb3b168a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fffbe8d3bf3e36c4", "level": "note", "message": {"text": "Very large file: kassiber/core/source_funds.py (2942 lines)"}, "properties": {"repobilityId": "61c9a46c633cd2ca", "scanner": "scanner-primary", "fingerprint": "fffbe8d3bf3e36c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d46b34e6498bdc8", "level": "note", "message": {"text": "Very large file: kassiber/core/imports.py (1902 lines)"}, "properties": {"repobilityId": "f6a8e0caed4ae8c8", "scanner": "scanner-primary", "fingerprint": "4d46b34e6498bdc8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6c50ea0d09fe0ab7", "level": "note", "message": {"text": "Very large file: kassiber/core/commercial.py (1524 lines)"}, "properties": {"repobilityId": "1b8385fcfc36f05c", "scanner": "scanner-primary", "fingerprint": "6c50ea0d09fe0ab7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5021aecb9b770fe7", "level": "note", "message": {"text": "Very large file: kassiber/core/sync_backends.py (2581 lines)"}, "properties": {"repobilityId": "7f5955ddcbf59afd", "scanner": "scanner-primary", "fingerprint": "5021aecb9b770fe7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bf949cbdb1cd449f", "level": "note", "message": {"text": "Very large file: kassiber/core/ui_snapshot.py (4735 lines)"}, "properties": {"repobilityId": "c8bacf3d9c06c96b", "scanner": "scanner-primary", "fingerprint": "bf949cbdb1cd449f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-77787b02bdeef182", "level": "note", "message": {"text": "Very large file: kassiber/core/rates.py (2138 lines)"}, "properties": {"repobilityId": "24049a6912702e37", "scanner": "scanner-primary", "fingerprint": "77787b02bdeef182", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-357a488dbf8e8eeb", "level": "note", "message": {"text": "Very large file: kassiber/core/lightning/cln.py (1454 lines)"}, "properties": {"repobilityId": "5071eecc8519b451", "scanner": "scanner-primary", "fingerprint": "357a488dbf8e8eeb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bbdb2c80ae271a3a", "level": "note", "message": {"text": "Very large file: kassiber/core/engines/rp2.py (1581 lines)"}, "properties": {"repobilityId": "3851e8ec1a1df152", "scanner": "scanner-primary", "fingerprint": "bbdb2c80ae271a3a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b2f9a113ed11ac34", "level": "note", "message": {"text": "Very large file: kassiber/cli/handlers.py (4009 lines)"}, "properties": {"repobilityId": "048b865775a93780", "scanner": "scanner-primary", "fingerprint": "b2f9a113ed11ac34", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8ecbe000d3d45c40", "level": "note", "message": {"text": "Very large file: kassiber/cli/main.py (3792 lines)"}, "properties": {"repobilityId": "167b423ab1fc76ad", "scanner": "scanner-primary", "fingerprint": "8ecbe000d3d45c40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a0c58049a4fd3592", "level": "note", "message": {"text": "Very large file: kassiber/ai/tools.py (1415 lines)"}, "properties": {"repobilityId": "3fc677e12641ae92", "scanner": "scanner-primary", "fingerprint": "a0c58049a4fd3592", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b29ace9e6b6b9265", "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": "ba5a5e670fdc51fe", "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": "36f7dbe8352c22b1", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-2679282aa1c484b5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "properties": {"repobilityId": "27d579812e6be614", "scanner": "scanner-primary", "fingerprint": "2679282aa1c484b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-54295831bdc82e5b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .codex/AGENTS.md"}, "properties": {"repobilityId": "ce41ac5dc2f74f47", "scanner": "scanner-primary", "fingerprint": "54295831bdc82e5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "codex_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".codex/AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9cdb77736040f22e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/gate.md"}, "properties": {"repobilityId": "020c23f67500601a", "scanner": "scanner-primary", "fingerprint": "9cdb77736040f22e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/gate.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-f9946ba1b5d44143", "level": "note", "message": {"text": "Legacy-named symbol `_downgrade_transaction_pairs_to_legacy` in tests/test_schema_swap_matching.py:247"}, "properties": {"repobilityId": "61fcc5511e653a8c", "scanner": "scanner-primary", "fingerprint": "f9946ba1b5d44143", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-def7c257b5ab8bc5", "level": "note", "message": {"text": "Legacy-named symbol `stored_copy` in tests/test_audit_package.py:370"}, "properties": {"repobilityId": "04a709607504a1c1", "scanner": "scanner-primary", "fingerprint": "def7c257b5ab8bc5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d925bf89d79b8211", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_cli_smoke.py:127"}, "properties": {"repobilityId": "24a7665407f7e379", "scanner": "scanner-primary", "fingerprint": "d925bf89d79b8211", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b43223d3126c57de", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_swap_matching_cli.py:350"}, "properties": {"repobilityId": "1abb8b97f2076cdd", "scanner": "scanner-primary", "fingerprint": "b43223d3126c57de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6da05d7a2221b76", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/test_transfer_matching.py:393"}, "properties": {"repobilityId": "feb58a7be61c11de", "scanner": "scanner-primary", "fingerprint": "f6da05d7a2221b76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1c626443f5b5fdf", "level": "note", "message": {"text": "Legacy-named symbol `export_backup` in tests/test_secrets_smoke.py:42"}, "properties": {"repobilityId": "8419f799ec66cb71", "scanner": "scanner-primary", "fingerprint": "a1c626443f5b5fdf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f195c6d802d673cf", "level": "none", "message": {"text": "Commented-code block (7 lines) in tests/test_lightning_scaffold.py:415"}, "properties": {"repobilityId": "2bacd9e8eaade923", "scanner": "scanner-primary", "fingerprint": "f195c6d802d673cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f190e5bef5acb3b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui-tauri/vite.config.ts:446"}, "properties": {"repobilityId": "530dc7622b12873f", "scanner": "scanner-primary", "fingerprint": "f190e5bef5acb3b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c28e26317b040d05", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui-tauri/src/daemon/stream.ts:229"}, "properties": {"repobilityId": "265eb35b13c51c7a", "scanner": "scanner-primary", "fingerprint": "c28e26317b040d05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85888b2aac103f28", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui-tauri/src/daemon/transport.ts:569"}, "properties": {"repobilityId": "fbdf2ce14a014481", "scanner": "scanner-primary", "fingerprint": "85888b2aac103f28", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-74dd591b31677770", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/transactions/model.ts:676"}, "properties": {"repobilityId": "3a612dd8e2578191", "scanner": "scanner-primary", "fingerprint": "74dd591b31677770", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6dcf1eef135ec2c", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/ai/ProviderModelPicker.tsx:108"}, "properties": {"repobilityId": "0a7986aeaac1d7d1", "scanner": "scanner-primary", "fingerprint": "e6dcf1eef135ec2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68d8df424fddc758", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/kb/settingsSections.ts:1"}, "properties": {"repobilityId": "c6f6f2a26b784b69", "scanner": "scanner-primary", "fingerprint": "68d8df424fddc758", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69aeadde1d33fe0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/kb/AppShell.tsx:856"}, "properties": {"repobilityId": "1cdab8b5b8d81b50", "scanner": "scanner-primary", "fingerprint": "69aeadde1d33fe0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0386c73992915c41", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui-tauri/src/components/kb/menuIntent.ts:109"}, "properties": {"repobilityId": "b94ade8f4e832d9a", "scanner": "scanner-primary", "fingerprint": "0386c73992915c41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d3b60f395ba6b82", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui-tauri/src/components/kb/menuIntent.test.ts:241"}, "properties": {"repobilityId": "259aeb32265fbe57", "scanner": "scanner-primary", "fingerprint": "2d3b60f395ba6b82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93152f96b66f3657", "level": "none", "message": {"text": "Commented-code block (6 lines) in ui-tauri/src/lib/backendTrust.ts:3"}, "properties": {"repobilityId": "9a6a56d2255c04df", "scanner": "scanner-primary", "fingerprint": "93152f96b66f3657", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19aa80b31349b95c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 ui-tauri/src/lib/filePicker.ts:43"}, "properties": {"repobilityId": "400464e2a3c6039c", "scanner": "scanner-primary", "fingerprint": "19aa80b31349b95c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2583592407f7cb1d", "level": "none", "message": {"text": "Commented-code block (5 lines) in ui-tauri/src/routes/ConnectionDetail.tsx:104"}, "properties": {"repobilityId": "044e0a7c8a20f3dc", "scanner": "scanner-primary", "fingerprint": "2583592407f7cb1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53dcc670bf632de7", "level": "note", "message": {"text": "Stub function `write` (body is just `pass`/`return`) \u2014 kassiber/daemon_freshness.py:35"}, "properties": {"repobilityId": "bfcd950925f308a0", "scanner": "scanner-primary", "fingerprint": "53dcc670bf632de7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-d1bddd647aaabcd1", "level": "none", "message": {"text": "Commented-code block (5 lines) in kassiber/daemon.py:401"}, "properties": {"repobilityId": "40f6af45e3dac64a", "scanner": "scanner-primary", "fingerprint": "d1bddd647aaabcd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34e78598b95b1107", "level": "note", "message": {"text": "Legacy-named symbol `transaction_pairs_legacy` in kassiber/db.py:2001"}, "properties": {"repobilityId": "027eb329c2f58606", "scanner": "scanner-primary", "fingerprint": "34e78598b95b1107", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-afea736ee4521fb6", "level": "none", "message": {"text": "Commented-code block (5 lines) in kassiber/secrets/__init__.py:41"}, "properties": {"repobilityId": "7ee7fd5e40565070", "scanner": "scanner-primary", "fingerprint": "afea736ee4521fb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83894b148a5a573e", "level": "none", "message": {"text": "Commented-code block (6 lines) in kassiber/secrets/migration.py:39"}, "properties": {"repobilityId": "da16fc05714e3d11", "scanner": "scanner-primary", "fingerprint": "83894b148a5a573e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ed9b6fd1d454835", "level": "note", "message": {"text": "Legacy-named symbol `export_backup` in kassiber/backup/cli.py:15"}, "properties": {"repobilityId": "babb0a6baec71ed2", "scanner": "scanner-primary", "fingerprint": "8ed9b6fd1d454835", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-76d6e2bd14fa7ac1", "level": "note", "message": {"text": "Legacy-named symbol `export_backup` in kassiber/backup/__init__.py:27"}, "properties": {"repobilityId": "f7785b266652b02e", "scanner": "scanner-primary", "fingerprint": "76d6e2bd14fa7ac1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-705fde4ccfd3e3ab", "level": "note", "message": {"text": "Legacy-named symbol `pre_restore_backup` in kassiber/backup/pack.py:85"}, "properties": {"repobilityId": "32edbb37d35ee684", "scanner": "scanner-primary", "fingerprint": "705fde4ccfd3e3ab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-70882979b84257aa", "level": "none", "message": {"text": "Commented-code block (8 lines) in kassiber/backup/pack.py:486"}, "properties": {"repobilityId": "da1ac6fcb12178b5", "scanner": "scanner-primary", "fingerprint": "70882979b84257aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71c3cd825caf9a13", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 kassiber/backup/age_cli.py:86"}, "properties": {"repobilityId": "269ed8626cb4d40d", "scanner": "scanner-primary", "fingerprint": "71c3cd825caf9a13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7db5858bbc20cd0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in kassiber/core/tax_events.py:13"}, "properties": {"repobilityId": "35ddf597175b54de", "scanner": "scanner-primary", "fingerprint": "7db5858bbc20cd0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd09fac83cab9c0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in kassiber/core/source_funds.py:90"}, "properties": {"repobilityId": "94460702c7eb73e9", "scanner": "scanner-primary", "fingerprint": "bd09fac83cab9c0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c27b008f7aefc3f7", "level": "note", "message": {"text": "Legacy-named symbol `attachment_copy` in kassiber/core/attachments.py:402"}, "properties": {"repobilityId": "c354dcbaebda66a6", "scanner": "scanner-primary", "fingerprint": "c27b008f7aefc3f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c0bd69fe818d418c", "level": "none", "message": {"text": "Commented-code block (7 lines) in kassiber/core/source_funds_coverage.py:58"}, "properties": {"repobilityId": "a4a0e06f0ef24e42", "scanner": "scanner-primary", "fingerprint": "c0bd69fe818d418c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3f8bb483f658fc7", "level": "note", "message": {"text": "Legacy-named symbol `consecutive_unused` in kassiber/core/sync_backends.py:663"}, "properties": {"repobilityId": "ec0ab8b5968115e1", "scanner": "scanner-primary", "fingerprint": "c3f8bb483f658fc7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e498ff5df0d08d56", "level": "none", "message": {"text": "Commented-code block (6 lines) in kassiber/core/sync_backends.py:536"}, "properties": {"repobilityId": "09ecea694d64dac8", "scanner": "scanner-primary", "fingerprint": "e498ff5df0d08d56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7256611c174240b0", "level": "none", "message": {"text": "Commented-code block (10 lines) in kassiber/core/lightning/types.py:83"}, "properties": {"repobilityId": "aa70f7e4bbd3c897", "scanner": "scanner-primary", "fingerprint": "7256611c174240b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6878fe9e01c15e1e", "level": "none", "message": {"text": "Commented-code block (5 lines) in kassiber/core/lightning/cln.py:250"}, "properties": {"repobilityId": "afd08522de5197ac", "scanner": "scanner-primary", "fingerprint": "6878fe9e01c15e1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2f1897ff063019a", "level": "none", "message": {"text": "Commented-code block (5 lines) in kassiber/core/lightning/profitability.py:22"}, "properties": {"repobilityId": "21f2985247020d66", "scanner": "scanner-primary", "fingerprint": "d2f1897ff063019a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e506fe99b3914f6", "level": "none", "message": {"text": "Commented-code block (8 lines) in kassiber/core/lightning/lnd.py:318"}, "properties": {"repobilityId": "ace01927c9fd0293", "scanner": "scanner-primary", "fingerprint": "7e506fe99b3914f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54112c7010bbe6cc", "level": "none", "message": {"text": "Commented-code block (6 lines) in kassiber/core/engines/rp2.py:88"}, "properties": {"repobilityId": "059ba56c8abe4359", "scanner": "scanner-primary", "fingerprint": "54112c7010bbe6cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f1f94b51911c8f9", "level": "note", "message": {"text": "Legacy-named symbol `dispatch_backup` in kassiber/cli/main.py:117"}, "properties": {"repobilityId": "e67e114bb66cc270", "scanner": "scanner-primary", "fingerprint": "1f1f94b51911c8f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8e047ab7af03962f", "level": "note", "message": {"text": "7 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5a0455f6498c27ad", "scanner": "scanner-primary", "fingerprint": "8e047ab7af03962f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "4219057efd379b02", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b0a6cf0ee687cdc9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "7534b6e2e5f84569", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "edcd692b8b5665df", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "bdd7a6bddb50fbfa", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2d557ba7ba3d01cb", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e461a3c912471461", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "bc4889cf7f7e19d8", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3f22c80afec947e6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "523c1e3d42aa5b26", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "d94e5e484b5bada0", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "122b35f5c3ccfb7b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "25060d34c734a173", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "8fca0b616de07d06", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f981718db14c69eb", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9dad557909b86499", "level": "note", "message": {"text": "Near-duplicate function bodies in 10 places"}, "properties": {"repobilityId": "2285e0c5759e7089", "scanner": "scanner-primary", "fingerprint": "9dad557909b86499", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "8395d4c00816b82b", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "65b9564d18138098", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0a1a28ee81b3ce1f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "25844fde7106ff28", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}]}]}