{"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-6f362a2d46065498", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartImportWizard.jsx:497", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartImportWizard.jsx:497"}, "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-268a208b95637d77", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartProspectImportWizard.jsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartProspectImportWizard.jsx:213"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6cea26edbc6a3452", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/DuplicateResolver.jsx:268", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DuplicateResolver.jsx:268"}, "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-64db8a30be3cd8bb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/LeadEmailAuditPanel.jsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/LeadEmailAuditPanel.jsx:67"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74295bf0b61cbcfa", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/LeadTracker.jsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/LeadTracker.jsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7fe2adcd43e0702", "name": "Stray `console.log` in TS/JS \u2014 src/components/LeadTracker.jsx:450", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/LeadTracker.jsx:450"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f98916d61828242", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartLeadImportWizard.jsx:267", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartLeadImportWizard.jsx:267"}, "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-ac994c7c5cfbcf68", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/OutreachRemindersWidget.jsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/OutreachRemindersWidget.jsx: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-92e89b6d688ec3d3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/FollowupScorecard.jsx:43", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FollowupScorecard.jsx:43"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-752a571280a56b26", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/StatementManager.jsx:107", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/StatementManager.jsx: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-29eaeaf058c790ea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/FollowupDueWidget.jsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FollowupDueWidget.jsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-924182a6ce818824", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/AgentSettingsPanel.jsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AgentSettingsPanel.jsx:207"}, "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-acba40e54f6d40d4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/Profile.jsx:266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Profile.jsx:266"}, "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-a5cb5f4929bcc702", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PostSaleEmailSettings.jsx:278", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PostSaleEmailSettings.jsx:278"}, "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-b90df0aaf328029f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/CustomCategoryManager.jsx:205", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/CustomCategoryManager.jsx:205"}, "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-09a52cabeffebd46", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SourceColorManager.jsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SourceColorManager.jsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abdeb22759ed7abb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PaymentAlertsWidget.jsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PaymentAlertsWidget.jsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6dadecbd0c802f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/UploadView.jsx:283", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/UploadView.jsx:283"}, "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-69554f2c97079829", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/TeamView.jsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/TeamView.jsx:155"}, "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-2f13367902ab162e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/PlatformExpensesView.jsx:539", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/PlatformExpensesView.jsx:539"}, "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-94a9727cc9c2e1da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/ProspectsView.jsx:215", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/ProspectsView.jsx:215"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-907031ad6b5cf724", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/ClosedDeals.jsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/ClosedDeals.jsx:177"}, "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-27f57549275b9277", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/CommissionCalculator.jsx:269", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/CommissionCalculator.jsx:269"}, "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-be197d89cf5f379c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/BusinessBooksView.jsx:1090", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/BusinessBooksView.jsx:1090"}, "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-21bd89f4e0a32125", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/ringy/config/route.js:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/ringy/config/route.js:170"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a420388b1e26d61", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/ringy/webhook/[token]/route.js:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/ringy/webhook/[token]/route.js:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca408371a8453dd7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/email/webhook/route.js:207", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/email/webhook/route.js:207"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77af01066ec903b9", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/email/send/route.js:392", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/email/send/route.js:392"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70033f5bbe6aa0ec", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/disconnect/route.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/disconnect/route.js:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-734dd39732a714bd", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/connect/route.js:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/connect/route.js:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73c67f5be0810747", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/sync/route.js:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/sync/route.js:103"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-955d845c4926b356", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/extract-conversation/route.js:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/extract-conversation/route.js:144"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c75efae04f11f9b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/import-leads-ai/route.js:391", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/import-leads-ai/route.js:391"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80d6ac1a58d95c39", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/parse-statement-ai/route.js:347", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/parse-statement-ai/route.js:347"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0b03c86c951580d8", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/import-prospects-ai/route.js:419", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/import-prospects-ai/route.js:419"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a865f0f979da6c7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/team/invite/route.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/invite/route.js:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9defad9d15b22f35", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/team/invite/respond/route.js:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/invite/respond/route.js:101"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9142a02b18a6b754", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/team/agent/[agentId]/route.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/agent/[agentId]/route.js:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-405838a05e285602", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/team/remove/route.js:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/remove/route.js:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b08dd6f2424f2c3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/team/overview/route.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/overview/route.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7416d01a9a940b5f", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/broadcast/route.js:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/broadcast/route.js:65"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1be6ecf7ecffa3f7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/duplicate-leads/route.js:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/duplicate-leads/route.js:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-10693004b6f8c0b7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/impersonate/route.js:124", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/impersonate/route.js:124"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-171f8db670c5c5b7", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/phantom-bonuses/route.js:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/phantom-bonuses/route.js:118"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a61d23feace6c644", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/reminders/route.js:223", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/reminders/route.js:223"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-278df4330c708ba2", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/extract-screenshot-ai/route.js:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/extract-screenshot-ai/route.js:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b6efc26df706f98", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/webhook/route.js:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/webhook/route.js:77"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69e154d68297ca53", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/import-expenses-ai/route.js:527", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/import-expenses-ai/route.js:527"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53864c676bde6817", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.jsx:459", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.jsx:459"}, "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-b09b91dcf052b6fe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/landing/page.jsx:614", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/landing/page.jsx:614"}, "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-7775c8e1a3761cdf", "name": "Stray `console.log` in TS/JS \u2014 src/lib/welcomeEmails.js:460", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/welcomeEmails.js:460"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ef4ce09c224e24d", "name": "Stray `console.log` in TS/JS \u2014 src/lib/textdripServer.js:265", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/textdripServer.js:265"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9c09092c7d07a5ea", "name": "Very large file: src/components/LeadTracker.jsx (2481 lines)", "shortDescription": {"text": "Very large file: src/components/LeadTracker.jsx (2481 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-3593144b255ea252", "name": "Very large file: src/components/Profile.jsx (1346 lines)", "shortDescription": {"text": "Very large file: src/components/Profile.jsx (1346 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-d3fc41882b57aedc", "name": "Very large file: src/components/views/UploadView.jsx (1872 lines)", "shortDescription": {"text": "Very large file: src/components/views/UploadView.jsx (1872 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-3b5aec8f927d75ea", "name": "Very large file: src/components/views/ProspectsView.jsx (1915 lines)", "shortDescription": {"text": "Very large file: src/components/views/ProspectsView.jsx (1915 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-7774c8267e4d4db0", "name": "Very large file: src/components/views/CpaDashboard.jsx (1167 lines)", "shortDescription": {"text": "Very large file: src/components/views/CpaDashboard.jsx (1167 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-e647dda22b00e0f1", "name": "Very large file: src/components/views/BusinessBooksView.jsx (2008 lines)", "shortDescription": {"text": "Very large file: src/components/views/BusinessBooksView.jsx (2008 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-c0a509e5a794ea19", "name": "Very large file: src/app/landing/page.jsx (1229 lines)", "shortDescription": {"text": "Very large file: src/app/landing/page.jsx (1229 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "19 test file(s) for 197 source file(s) (ratio 0.10). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 144 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 90 placeholder/mock markers across 32 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "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-b1fdbbe2fd31be66", "name": "Commented-code block (7 lines) in src/components/DuplicateResolver.jsx:63", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/DuplicateResolver.jsx:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb10f2a0c84fe7d2", "name": "Legacy-named symbol `trial_banner_dismissed_day_v1` in src/components/PaywallGate.jsx:144", "shortDescription": {"text": "Legacy-named symbol `trial_banner_dismissed_day_v1` in src/components/PaywallGate.jsx:144"}, "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-888d611a1bde2f4d", "name": "Legacy-named symbol `investments_v2` in src/components/LeadTracker.jsx:96", "shortDescription": {"text": "Legacy-named symbol `investments_v2` in src/components/LeadTracker.jsx:96"}, "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-08940f0bf6f48025", "name": "Commented-code block (10 lines) in src/components/LeadTracker.jsx:320", "shortDescription": {"text": "Commented-code block (10 lines) in src/components/LeadTracker.jsx:320"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bbe4d696617c493c", "name": "Legacy-named symbol `onClearLegacy` in src/components/ProspectForm.jsx:60", "shortDescription": {"text": "Legacy-named symbol `onClearLegacy` in src/components/ProspectForm.jsx:60"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a0f1db925360471", "name": "Commented-code block (5 lines) in src/components/ProspectForm.jsx:104", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ProspectForm.jsx: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-8571d6f3b9fdde31", "name": "Legacy-named symbol `taken_rate_priors_v1` in src/components/TakenRateCalculator.jsx:17", "shortDescription": {"text": "Legacy-named symbol `taken_rate_priors_v1` in src/components/TakenRateCalculator.jsx:17"}, "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-74f771b434424ff5", "name": "Commented-code block (5 lines) in src/components/TakenRateCalculator.jsx:205", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/TakenRateCalculator.jsx:205"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5773f1069ff1d82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SendOutreachEmail.jsx:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SendOutreachEmail.jsx:91"}, "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-aca6afed43387936", "name": "Legacy-named symbol `chat_history_v1` in src/components/AgentChatbot.jsx:11", "shortDescription": {"text": "Legacy-named symbol `chat_history_v1` in src/components/AgentChatbot.jsx:11"}, "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-c0d2f17f51f3bdd2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AgentChatbot.jsx:519", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AgentChatbot.jsx:519"}, "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-edfb559a34fda535", "name": "Commented-code block (6 lines) in src/components/TextDripSettings.jsx:127", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/TextDripSettings.jsx: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-70adb03a21af5f9e", "name": "Legacy-named symbol `association_bonus_detail_v1` in src/components/AssociationCommissionDetailImport.jsx:22", "shortDescription": {"text": "Legacy-named symbol `association_bonus_detail_v1` in src/components/AssociationCommissionDetailImport.jsx:22"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9104dfe900e134da", "name": "Commented-code block (8 lines) in src/components/AgentSettingsPanel.jsx:43", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/AgentSettingsPanel.jsx:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac61060d4d250caa", "name": "Legacy-named symbol `no_phi_ack_v1` in src/components/NoPhiBanner.jsx:6", "shortDescription": {"text": "Legacy-named symbol `no_phi_ack_v1` in src/components/NoPhiBanner.jsx:6"}, "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-5cd867fc09f75fdf", "name": "Commented-code block (5 lines) in src/components/ScreenshotImport.jsx:85", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/ScreenshotImport.jsx:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fea8f1c60992326", "name": "Commented-code block (6 lines) in src/components/SendWelcomeEmail.jsx:161", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/SendWelcomeEmail.jsx:161"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a2a6423450909b3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SendWelcomeEmail.jsx:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SendWelcomeEmail.jsx:145"}, "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-fb136fcee5e45548", "name": "Legacy-named symbol `prim_migration_dismissed_v1` in src/components/auth/MigrationPrompt.jsx:8", "shortDescription": {"text": "Legacy-named symbol `prim_migration_dismissed_v1` in src/components/auth/MigrationPrompt.jsx:8"}, "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-b17718c429127538", "name": "Commented-code block (7 lines) in src/components/motion/MotionPrimitives.jsx:102", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/motion/MotionPrimitives.jsx:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-913a8158d64e93da", "name": "Commented-code block (6 lines) in src/components/views/ReportSheet.jsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/views/ReportSheet.jsx:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc64c943b23d91c3", "name": "Legacy-named symbol `platform_budget_v1` in src/components/views/ReportsView.jsx:48", "shortDescription": {"text": "Legacy-named symbol `platform_budget_v1` in src/components/views/ReportsView.jsx:48"}, "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-a3a1692d1ab3e516", "name": "Commented-code block (7 lines) in src/components/views/AssociationsView.jsx:109", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/views/AssociationsView.jsx: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-cd95409d62488260", "name": "Legacy-named symbol `platform_budget_v1` in src/components/views/PlatformExpensesView.jsx:9", "shortDescription": {"text": "Legacy-named symbol `platform_budget_v1` in src/components/views/PlatformExpensesView.jsx:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d3f8f77297aa31b", "name": "Commented-code block (6 lines) in src/components/views/ProspectsView.jsx:1024", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/views/ProspectsView.jsx:1024"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6dc47a892da01cbc", "name": "Commented-code block (5 lines) in src/components/views/ClosedDeals.jsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/views/ClosedDeals.jsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e9cd9ff349c7f0b", "name": "Legacy-named symbol `business_expenses_v1` in src/components/views/CpaDashboard.jsx:82", "shortDescription": {"text": "Legacy-named symbol `business_expenses_v1` in src/components/views/CpaDashboard.jsx:82"}, "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-e05a1ad854f0c81b", "name": "Legacy-named symbol `agent_tier_v1` in src/components/views/CommissionCalculator.jsx:24", "shortDescription": {"text": "Legacy-named symbol `agent_tier_v1` in src/components/views/CommissionCalculator.jsx:24"}, "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-e393fdfc2539fc79", "name": "Legacy-named symbol `business_accounts_v1` in src/components/views/BusinessBooksView.jsx:24", "shortDescription": {"text": "Legacy-named symbol `business_accounts_v1` in src/components/views/BusinessBooksView.jsx:24"}, "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-7f4e269735a575f6", "name": "Commented-code block (5 lines) in src/components/views/BusinessBooksView.jsx:158", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/views/BusinessBooksView.jsx:158"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5aba4bbf4821e2c0", "name": "Commented-code block (9 lines) in src/app/page.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/page.js:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c219987a096a575f", "name": "Legacy-named symbol `ringy_config_v1` in src/app/api/ringy/config/route.js:8", "shortDescription": {"text": "Legacy-named symbol `ringy_config_v1` in src/app/api/ringy/config/route.js:8"}, "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-4659a6c1f15513b8", "name": "Legacy-named symbol `ringy_config_v1` in src/app/api/ringy/webhook/[token]/route.js:11", "shortDescription": {"text": "Legacy-named symbol `ringy_config_v1` in src/app/api/ringy/webhook/[token]/route.js:11"}, "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-9a2028317b3a7967", "name": "Commented-code block (6 lines) in src/app/api/ringy/webhook/[token]/route.js:109", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/ringy/webhook/[token]/route.js: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-151222862f54ebc6", "name": "Legacy-named symbol `prospects_v1` in src/app/api/email/webhook/route.js:147", "shortDescription": {"text": "Legacy-named symbol `prospects_v1` in src/app/api/email/webhook/route.js:147"}, "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-b0dff09edd698ef9", "name": "Legacy-named symbol `prospects_v1` in src/app/api/email/send/route.js:194", "shortDescription": {"text": "Legacy-named symbol `prospects_v1` in src/app/api/email/send/route.js:194"}, "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-1b9b581745fe0ee7", "name": "Commented-code block (6 lines) in src/app/api/email/send/route.js:130", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/email/send/route.js:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-242daafe80ffe396", "name": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/push/test/route.js:13", "shortDescription": {"text": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/push/test/route.js:13"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b7f3b435be3e031", "name": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/push/subscribe/route.js:5", "shortDescription": {"text": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/push/subscribe/route.js:5"}, "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-f058fb0c3ebc0671", "name": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/disconnect/route.js:4", "shortDescription": {"text": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/disconnect/route.js:4"}, "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-0c6e83d6f6f6c2ba", "name": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/connect/route.js:7", "shortDescription": {"text": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/connect/route.js:7"}, "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-13781b921ebcaa22", "name": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/sync/route.js:58", "shortDescription": {"text": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/sync/route.js:58"}, "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-ffa6b8d366aae431", "name": "Legacy-named symbol `textdrip_config_v1` in src/app/api/textdrip/status/route.js:54", "shortDescription": {"text": "Legacy-named symbol `textdrip_config_v1` in src/app/api/textdrip/status/route.js:54"}, "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-5920dcc92e227754", "name": "Commented-code block (5 lines) in src/app/api/import-prospects-ai/route.js:279", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/import-prospects-ai/route.js:279"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-248f301525bfb8c3", "name": "Commented-code block (5 lines) in src/app/api/team/invite/respond/route.js:60", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/team/invite/respond/route.js:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72d9bc4052245d79", "name": "Legacy-named symbol `agent_profile_v1` in src/app/api/banners/[userId]/route.js:5", "shortDescription": {"text": "Legacy-named symbol `agent_profile_v1` in src/app/api/banners/[userId]/route.js:5"}, "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-feb67c431e157729", "name": "Legacy-named symbol `business_income_v1` in src/app/api/admin/phantom-bonuses/route.js:90", "shortDescription": {"text": "Legacy-named symbol `business_income_v1` in src/app/api/admin/phantom-bonuses/route.js:90"}, "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-b52c97e9e584bf17", "name": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/reminders/route.js:26", "shortDescription": {"text": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/reminders/route.js:26"}, "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-a53570d0e43ae3da", "name": "Commented-code block (5 lines) in src/app/api/reminders/route.js:59", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/reminders/route.js:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e125262f54504c10", "name": "Commented-code block (5 lines) in src/app/api/extract-screenshot-ai/route.js:114", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/extract-screenshot-ai/route.js:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-827a3b93d5d33473", "name": "Legacy-named symbol `welcome_email_sent_v1` in src/app/api/stripe/webhook/route.js:118", "shortDescription": {"text": "Legacy-named symbol `welcome_email_sent_v1` in src/app/api/stripe/webhook/route.js:118"}, "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-57e8040632e69c6a", "name": "Commented-code block (6 lines) in src/app/api/stripe/webhook/route.js:117", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/stripe/webhook/route.js:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6408301ed7ae8a50", "name": "Commented-code block (5 lines) in src/app/api/import-expenses-ai/route.js:264", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/import-expenses-ai/route.js:264"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a808de54189e2f5", "name": "Legacy-named symbol `business_expenses_v1` in src/app/admin/page.jsx:269", "shortDescription": {"text": "Legacy-named symbol `business_expenses_v1` in src/app/admin/page.jsx:269"}, "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-d732bb96ea67b281", "name": "Commented-code block (8 lines) in src/app/landing/page.jsx:675", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/landing/page.jsx:675"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b1af8f686ccef48", "name": "Legacy-named symbol `followup_playbook_v1` in src/lib/followupEngine.test.mjs:16", "shortDescription": {"text": "Legacy-named symbol `followup_playbook_v1` in src/lib/followupEngine.test.mjs:16"}, "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-4daf1b02db5d77cc", "name": "Legacy-named symbol `pending_email_queue_v1` in src/lib/pendingEmailQueue.js:18", "shortDescription": {"text": "Legacy-named symbol `pending_email_queue_v1` in src/lib/pendingEmailQueue.js:18"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f335ea23e60ae3b", "name": "Commented-code block (9 lines) in src/lib/duplicateResolver.test.mjs:126", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/duplicateResolver.test.mjs:126"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f03bbec8336e2481", "name": "Legacy-named symbol `prospect_source_colors_v1` in src/lib/sourceColors.js:8", "shortDescription": {"text": "Legacy-named symbol `prospect_source_colors_v1` in src/lib/sourceColors.js:8"}, "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-49ff4107c1899619", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/push.js:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/push.js:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ab36ce929749a28", "name": "Commented-code block (7 lines) in src/lib/supabase.js:20", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/supabase.js:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-558b71e2dd52f7a4", "name": "Legacy-named symbol `association_bonus_detail_v1` in src/lib/associationResiduals.js:10", "shortDescription": {"text": "Legacy-named symbol `association_bonus_detail_v1` in src/lib/associationResiduals.js:10"}, "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-6974e70dbb1ee391", "name": "Commented-code block (5 lines) in src/lib/associationResiduals.js:83", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/associationResiduals.js: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-8ee7fb508354c1ca", "name": "Commented-code block (7 lines) in src/lib/businessImport.js:136", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/businessImport.js:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46bca618efbbb9f3", "name": "Legacy-named symbol `custom_lead_options_v1` in src/lib/customLeadOptions.js:6", "shortDescription": {"text": "Legacy-named symbol `custom_lead_options_v1` in src/lib/customLeadOptions.js:6"}, "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-dc9d6dd92e490aa0", "name": "Legacy-named symbol `email_sender_identity_v1` in src/lib/outreachEmails.js:15", "shortDescription": {"text": "Legacy-named symbol `email_sender_identity_v1` in src/lib/outreachEmails.js: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-00de3ebde0c03f96", "name": "Commented-code block (6 lines) in src/lib/outreachEmails.js:32", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/outreachEmails.js:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6535a902818182d1", "name": "Legacy-named symbol `prospects_v1` in src/lib/teamServer.js:100", "shortDescription": {"text": "Legacy-named symbol `prospects_v1` in src/lib/teamServer.js:100"}, "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-f418bc0049b8ea0b", "name": "Legacy-named symbol `setup_checklist_v1` in src/lib/setupChecklist.js:10", "shortDescription": {"text": "Legacy-named symbol `setup_checklist_v1` in src/lib/setupChecklist.js:10"}, "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-86c2d6a5b1887b63", "name": "Legacy-named symbol `onboarding_progress_v1` in src/lib/onboarding.js:16", "shortDescription": {"text": "Legacy-named symbol `onboarding_progress_v1` in src/lib/onboarding.js:16"}, "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-d7fd914964155525", "name": "Legacy-named symbol `activities_v1` in src/lib/followupRollup.mjs:5", "shortDescription": {"text": "Legacy-named symbol `activities_v1` in src/lib/followupRollup.mjs:5"}, "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-a3643bf160a1c1ad", "name": "Commented-code block (5 lines) in src/lib/screenshotExtract.js:237", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/screenshotExtract.js:237"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb260889cf9ee3e8", "name": "Commented-code block (7 lines) in src/lib/statement.test.mjs:79", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/statement.test.mjs:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7509a0ea9b3c6636", "name": "Commented-code block (7 lines) in src/lib/utils.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/utils.js:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c65ae3eb6d1c407f", "name": "Legacy-named symbol `agent_profile_v1` in src/lib/agentProfile.js:18", "shortDescription": {"text": "Legacy-named symbol `agent_profile_v1` in src/lib/agentProfile.js:18"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b71badbbc06067d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/subscription.js:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/subscription.js:123"}, "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-edddcc6c41f7dd8b", "name": "Commented-code block (11 lines) in src/lib/salesreport.js:234", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/salesreport.js:234"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-26f7800066a248e7", "name": "Legacy-named symbol `announcement_acks_v1` in src/lib/announcements.js:288", "shortDescription": {"text": "Legacy-named symbol `announcement_acks_v1` in src/lib/announcements.js:288"}, "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-2d573514b0a1e6cc", "name": "Commented-code block (6 lines) in src/lib/leadDedup.test.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/leadDedup.test.mjs: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-332a3280ade7f92f", "name": "Legacy-named symbol `post_sale_email_template_v1` in src/lib/postSaleEmails.js:5", "shortDescription": {"text": "Legacy-named symbol `post_sale_email_template_v1` in src/lib/postSaleEmails.js:5"}, "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-72115fed5e8dd45d", "name": "Commented-code block (5 lines) in src/lib/postSaleEmails.js:44", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/postSaleEmails.js:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3990b03b85109c6e", "name": "Legacy-named symbol `vendor_memory_v1` in src/lib/vendorMemory.js:12", "shortDescription": {"text": "Legacy-named symbol `vendor_memory_v1` in src/lib/vendorMemory.js:12"}, "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-995e95fc9abf35e2", "name": "Legacy-named symbol `welcome_email_sent_v1` in src/lib/welcomeEmails.js:6", "shortDescription": {"text": "Legacy-named symbol `welcome_email_sent_v1` in src/lib/welcomeEmails.js:6"}, "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-052efbf2ca598152", "name": "Legacy-named symbol `user_rubric_v1` in src/lib/userRubric.js:10", "shortDescription": {"text": "Legacy-named symbol `user_rubric_v1` in src/lib/userRubric.js:10"}, "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-11992f02583f3d32", "name": "Legacy-named symbol `import_history_v1` in src/lib/importHistory.js:9", "shortDescription": {"text": "Legacy-named symbol `import_history_v1` in src/lib/importHistory.js:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6652dc7760de8535", "name": "Legacy-named symbol `platform_expenses_v1` in src/lib/teamMath.mjs:19", "shortDescription": {"text": "Legacy-named symbol `platform_expenses_v1` in src/lib/teamMath.mjs:19"}, "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-eb9751489c8757fa", "name": "Commented-code block (9 lines) in src/lib/textdripServer.js:189", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/textdripServer.js:189"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7120a5112691f361", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/textdripServer.js:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/textdripServer.js:111"}, "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-5d163736f6b0bae0", "name": "Legacy-named symbol `association_bonus_detail_v1` in src/lib/reports.mjs:385", "shortDescription": {"text": "Legacy-named symbol `association_bonus_detail_v1` in src/lib/reports.mjs:385"}, "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-a709d8d2dd107f13", "name": "Commented-code block (6 lines) in src/lib/reports.mjs:87", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/reports.mjs:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e233ef3d1221da52", "name": "Commented-code block (6 lines) in src/lib/prospects.js:26", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/prospects.js:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc9148d1e6765ecc", "name": "Legacy-named symbol `followup_playbook_v1` in src/lib/followupEngine.mjs:14", "shortDescription": {"text": "Legacy-named symbol `followup_playbook_v1` in src/lib/followupEngine.mjs:14"}, "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-d29d173696a5f0b7", "name": "Commented-code block (5 lines) in src/lib/seed.js:40", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/seed.js:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecbbbb3d057e326e", "name": "Legacy-named symbol `business_expenses_v1` in src/lib/chatTools.js:261", "shortDescription": {"text": "Legacy-named symbol `business_expenses_v1` in src/lib/chatTools.js:261"}, "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-b3fcadb350d9caa0", "name": "Commented-code block (5 lines) in src/lib/chatTools.js:168", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/chatTools.js:168"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bc0673cd2bf04cf", "name": "Legacy-named symbol `agent_profile_v1` in src/lib/postSaleHtml.js:11", "shortDescription": {"text": "Legacy-named symbol `agent_profile_v1` in src/lib/postSaleHtml.js:11"}, "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-c9697b6c2dac063f", "name": "Commented-code block (11 lines) in src/lib/postSaleHtml.js:71", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/postSaleHtml.js:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f56b2a554df2a02", "name": "Legacy-named symbol `own_advances_v1` in src/lib/statement.js:904", "shortDescription": {"text": "Legacy-named symbol `own_advances_v1` in src/lib/statement.js:904"}, "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-bd9189666344826d", "name": "Commented-code block (5 lines) in src/lib/statement.js:376", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/statement.js:376"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e37e5ce4d0d9c7a3", "name": "Legacy-named symbol `custom_categories_v1` in src/lib/customCategories.js:5", "shortDescription": {"text": "Legacy-named symbol `custom_categories_v1` in src/lib/customCategories.js:5"}, "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-0ef21f0b2bfd2157", "name": "Legacy-named symbol `__prim_kv_owner_v1` in src/lib/storage.js:56", "shortDescription": {"text": "Legacy-named symbol `__prim_kv_owner_v1` in src/lib/storage.js:56"}, "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-e19bebc44f94bccb", "name": "Commented-code block (7 lines) in src/lib/storage.js:43", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/storage.js:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fd71dea5c5c981e", "name": "Legacy-named symbol `closed_periods_v1` in src/lib/closedPeriods.js:5", "shortDescription": {"text": "Legacy-named symbol `closed_periods_v1` in src/lib/closedPeriods.js:5"}, "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-870a1a4603ff7d0f", "name": "Commented-code block (7 lines) in src/lib/closedPeriods.js:40", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/closedPeriods.js:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a35d1acc8afab011", "name": "Legacy-named symbol `platform_expenses_v1` in src/lib/constants.js:356", "shortDescription": {"text": "Legacy-named symbol `platform_expenses_v1` in src/lib/constants.js:356"}, "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-79577cfe22c97a43", "name": "Commented-code block (7 lines) in src/lib/constants.js:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/constants.js: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}}]}}, "automationDetails": {"id": "repobility/18219"}, "properties": {"repository": "rjprimeconsult-ui/USHA-MASTER-TRACKER", "repoUrl": "https://github.com/rjprimeconsult-ui/USHA-MASTER-TRACKER", "branch": "main"}, "results": [{"ruleId": "scanner-6f362a2d46065498", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartImportWizard.jsx:497"}, "properties": {"repobilityId": "a9167be7bf5a92bb", "scanner": "scanner-primary", "fingerprint": "6f362a2d46065498", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-268a208b95637d77", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartProspectImportWizard.jsx:213"}, "properties": {"repobilityId": "ca974e860839f8e8", "scanner": "scanner-primary", "fingerprint": "268a208b95637d77", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6cea26edbc6a3452", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DuplicateResolver.jsx:268"}, "properties": {"repobilityId": "a2a1068d183a5a4b", "scanner": "scanner-primary", "fingerprint": "6cea26edbc6a3452", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-64db8a30be3cd8bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/LeadEmailAuditPanel.jsx:67"}, "properties": {"repobilityId": "d5e2818d6668b83d", "scanner": "scanner-primary", "fingerprint": "64db8a30be3cd8bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-74295bf0b61cbcfa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/LeadTracker.jsx:143"}, "properties": {"repobilityId": "c6cf000961185d15", "scanner": "scanner-primary", "fingerprint": "74295bf0b61cbcfa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f7fe2adcd43e0702", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/LeadTracker.jsx:450"}, "properties": {"repobilityId": "1ce15005b0d7ef73", "scanner": "scanner-primary", "fingerprint": "f7fe2adcd43e0702", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3f98916d61828242", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SmartLeadImportWizard.jsx:267"}, "properties": {"repobilityId": "3136365ce1a0c2ac", "scanner": "scanner-primary", "fingerprint": "3f98916d61828242", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac994c7c5cfbcf68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/OutreachRemindersWidget.jsx:77"}, "properties": {"repobilityId": "b2c5e857e3d94bff", "scanner": "scanner-primary", "fingerprint": "ac994c7c5cfbcf68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-92e89b6d688ec3d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FollowupScorecard.jsx:43"}, "properties": {"repobilityId": "8a4c3fe397a5ce6a", "scanner": "scanner-primary", "fingerprint": "92e89b6d688ec3d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-752a571280a56b26", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/StatementManager.jsx:107"}, "properties": {"repobilityId": "c3109990915fb434", "scanner": "scanner-primary", "fingerprint": "752a571280a56b26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-29eaeaf058c790ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/FollowupDueWidget.jsx:61"}, "properties": {"repobilityId": "6a38fe6e4172da7f", "scanner": "scanner-primary", "fingerprint": "29eaeaf058c790ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-924182a6ce818824", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AgentSettingsPanel.jsx:207"}, "properties": {"repobilityId": "611c9b09bb882ea2", "scanner": "scanner-primary", "fingerprint": "924182a6ce818824", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-acba40e54f6d40d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Profile.jsx:266"}, "properties": {"repobilityId": "7d1362cbdf3ef362", "scanner": "scanner-primary", "fingerprint": "acba40e54f6d40d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a5cb5f4929bcc702", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PostSaleEmailSettings.jsx:278"}, "properties": {"repobilityId": "5c4764a6632096e7", "scanner": "scanner-primary", "fingerprint": "a5cb5f4929bcc702", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b90df0aaf328029f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/CustomCategoryManager.jsx:205"}, "properties": {"repobilityId": "803c9a5e2f9ba00a", "scanner": "scanner-primary", "fingerprint": "b90df0aaf328029f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-09a52cabeffebd46", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SourceColorManager.jsx:73"}, "properties": {"repobilityId": "2c8e3951a12bef58", "scanner": "scanner-primary", "fingerprint": "09a52cabeffebd46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abdeb22759ed7abb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PaymentAlertsWidget.jsx:61"}, "properties": {"repobilityId": "82a82f96b6f745c1", "scanner": "scanner-primary", "fingerprint": "abdeb22759ed7abb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a6dadecbd0c802f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/UploadView.jsx:283"}, "properties": {"repobilityId": "02d93c8d20084d8e", "scanner": "scanner-primary", "fingerprint": "a6dadecbd0c802f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-69554f2c97079829", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/TeamView.jsx:155"}, "properties": {"repobilityId": "520c16917329c930", "scanner": "scanner-primary", "fingerprint": "69554f2c97079829", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f13367902ab162e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/PlatformExpensesView.jsx:539"}, "properties": {"repobilityId": "8f195b0d2458f72f", "scanner": "scanner-primary", "fingerprint": "2f13367902ab162e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94a9727cc9c2e1da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/ProspectsView.jsx:215"}, "properties": {"repobilityId": "3ae5e2e38a0d3d89", "scanner": "scanner-primary", "fingerprint": "94a9727cc9c2e1da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-907031ad6b5cf724", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/ClosedDeals.jsx:177"}, "properties": {"repobilityId": "ff8866da64dc09b8", "scanner": "scanner-primary", "fingerprint": "907031ad6b5cf724", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-27f57549275b9277", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/CommissionCalculator.jsx:269"}, "properties": {"repobilityId": "b733928cd89b5262", "scanner": "scanner-primary", "fingerprint": "27f57549275b9277", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-be197d89cf5f379c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/views/BusinessBooksView.jsx:1090"}, "properties": {"repobilityId": "e7d179d7ad76291e", "scanner": "scanner-primary", "fingerprint": "be197d89cf5f379c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-21bd89f4e0a32125", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/ringy/config/route.js:170"}, "properties": {"repobilityId": "1ea9b763e84261b4", "scanner": "scanner-primary", "fingerprint": "21bd89f4e0a32125", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a420388b1e26d61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/ringy/webhook/[token]/route.js:92"}, "properties": {"repobilityId": "e3fca4f30f45a260", "scanner": "scanner-primary", "fingerprint": "0a420388b1e26d61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca408371a8453dd7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/email/webhook/route.js:207"}, "properties": {"repobilityId": "349e22a4eb72d22c", "scanner": "scanner-primary", "fingerprint": "ca408371a8453dd7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-77af01066ec903b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/email/send/route.js:392"}, "properties": {"repobilityId": "d601b43f9ab00303", "scanner": "scanner-primary", "fingerprint": "77af01066ec903b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-70033f5bbe6aa0ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/disconnect/route.js:60"}, "properties": {"repobilityId": "3bb3862361dea203", "scanner": "scanner-primary", "fingerprint": "70033f5bbe6aa0ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-734dd39732a714bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/connect/route.js:109"}, "properties": {"repobilityId": "cab46906b0f4b6b4", "scanner": "scanner-primary", "fingerprint": "734dd39732a714bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-73c67f5be0810747", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/sync/route.js:103"}, "properties": {"repobilityId": "3fbfef69782db97b", "scanner": "scanner-primary", "fingerprint": "73c67f5be0810747", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-955d845c4926b356", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/textdrip/extract-conversation/route.js:144"}, "properties": {"repobilityId": "aebdfd7b9bc38790", "scanner": "scanner-primary", "fingerprint": "955d845c4926b356", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c75efae04f11f9b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/import-leads-ai/route.js:391"}, "properties": {"repobilityId": "f8b9e2cb79c1bcab", "scanner": "scanner-primary", "fingerprint": "7c75efae04f11f9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-80d6ac1a58d95c39", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/parse-statement-ai/route.js:347"}, "properties": {"repobilityId": "7e9ce6304b54ce33", "scanner": "scanner-primary", "fingerprint": "80d6ac1a58d95c39", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b03c86c951580d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/import-prospects-ai/route.js:419"}, "properties": {"repobilityId": "a3069da6ffc58bdb", "scanner": "scanner-primary", "fingerprint": "0b03c86c951580d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a865f0f979da6c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/invite/route.js:60"}, "properties": {"repobilityId": "7fbe6f9e69be3e1c", "scanner": "scanner-primary", "fingerprint": "3a865f0f979da6c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9defad9d15b22f35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/invite/respond/route.js:101"}, "properties": {"repobilityId": "126c5ab3957b078f", "scanner": "scanner-primary", "fingerprint": "9defad9d15b22f35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9142a02b18a6b754", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/agent/[agentId]/route.js:50"}, "properties": {"repobilityId": "37d71fa56b9dce13", "scanner": "scanner-primary", "fingerprint": "9142a02b18a6b754", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-405838a05e285602", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/remove/route.js:41"}, "properties": {"repobilityId": "be6f7e0610f43a11", "scanner": "scanner-primary", "fingerprint": "405838a05e285602", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b08dd6f2424f2c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/overview/route.js:53"}, "properties": {"repobilityId": "36813f679e0047ee", "scanner": "scanner-primary", "fingerprint": "1b08dd6f2424f2c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7416d01a9a940b5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/broadcast/route.js:65"}, "properties": {"repobilityId": "6c502d25b1b21544", "scanner": "scanner-primary", "fingerprint": "7416d01a9a940b5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1be6ecf7ecffa3f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/duplicate-leads/route.js:110"}, "properties": {"repobilityId": "7514adb7626f84d0", "scanner": "scanner-primary", "fingerprint": "1be6ecf7ecffa3f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-10693004b6f8c0b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/impersonate/route.js:124"}, "properties": {"repobilityId": "3bdf44368146b499", "scanner": "scanner-primary", "fingerprint": "10693004b6f8c0b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-171f8db670c5c5b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/admin/phantom-bonuses/route.js:118"}, "properties": {"repobilityId": "ed2f091fd9dec6a0", "scanner": "scanner-primary", "fingerprint": "171f8db670c5c5b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a61d23feace6c644", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/reminders/route.js:223"}, "properties": {"repobilityId": "9a99b847be9cd30d", "scanner": "scanner-primary", "fingerprint": "a61d23feace6c644", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-278df4330c708ba2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/extract-screenshot-ai/route.js:110"}, "properties": {"repobilityId": "fed411f13d15d6ba", "scanner": "scanner-primary", "fingerprint": "278df4330c708ba2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b6efc26df706f98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/stripe/webhook/route.js:77"}, "properties": {"repobilityId": "0b23d2d38c4452c9", "scanner": "scanner-primary", "fingerprint": "6b6efc26df706f98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69e154d68297ca53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/import-expenses-ai/route.js:527"}, "properties": {"repobilityId": "e9b88c061919c069", "scanner": "scanner-primary", "fingerprint": "69e154d68297ca53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-53864c676bde6817", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.jsx:459"}, "properties": {"repobilityId": "0d8d496eb35b5fa3", "scanner": "scanner-primary", "fingerprint": "53864c676bde6817", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b09b91dcf052b6fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/landing/page.jsx:614"}, "properties": {"repobilityId": "075d3640257daae7", "scanner": "scanner-primary", "fingerprint": "b09b91dcf052b6fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7775c8e1a3761cdf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/welcomeEmails.js:460"}, "properties": {"repobilityId": "672fe4b82c1da695", "scanner": "scanner-primary", "fingerprint": "7775c8e1a3761cdf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ef4ce09c224e24d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/textdripServer.js:265"}, "properties": {"repobilityId": "656dc157e11071c9", "scanner": "scanner-primary", "fingerprint": "9ef4ce09c224e24d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9c09092c7d07a5ea", "level": "note", "message": {"text": "Very large file: src/components/LeadTracker.jsx (2481 lines)"}, "properties": {"repobilityId": "3ee9827257e17af5", "scanner": "scanner-primary", "fingerprint": "9c09092c7d07a5ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3593144b255ea252", "level": "note", "message": {"text": "Very large file: src/components/Profile.jsx (1346 lines)"}, "properties": {"repobilityId": "f26833fabc3752c2", "scanner": "scanner-primary", "fingerprint": "3593144b255ea252", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d3fc41882b57aedc", "level": "note", "message": {"text": "Very large file: src/components/views/UploadView.jsx (1872 lines)"}, "properties": {"repobilityId": "cb65c1922571e424", "scanner": "scanner-primary", "fingerprint": "d3fc41882b57aedc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b5aec8f927d75ea", "level": "note", "message": {"text": "Very large file: src/components/views/ProspectsView.jsx (1915 lines)"}, "properties": {"repobilityId": "2cc279cf6b06ef93", "scanner": "scanner-primary", "fingerprint": "3b5aec8f927d75ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7774c8267e4d4db0", "level": "note", "message": {"text": "Very large file: src/components/views/CpaDashboard.jsx (1167 lines)"}, "properties": {"repobilityId": "a2aa298a258251e3", "scanner": "scanner-primary", "fingerprint": "7774c8267e4d4db0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e647dda22b00e0f1", "level": "note", "message": {"text": "Very large file: src/components/views/BusinessBooksView.jsx (2008 lines)"}, "properties": {"repobilityId": "99cec36815e30e4b", "scanner": "scanner-primary", "fingerprint": "e647dda22b00e0f1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c0a509e5a794ea19", "level": "note", "message": {"text": "Very large file: src/app/landing/page.jsx (1229 lines)"}, "properties": {"repobilityId": "ee88c89ecc8af005", "scanner": "scanner-primary", "fingerprint": "c0a509e5a794ea19", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "2165682a72934832", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "bb0c45783160085a", "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": "11e5e93880e8ba81", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "63d3a653aac6ec35", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "a6497960adf9c869", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "aeb13218fe9518dd", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "544eea593f136b00", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "6f83c8d474a5df46", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "898547c49f9aaadd", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "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-b1fdbbe2fd31be66", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/DuplicateResolver.jsx:63"}, "properties": {"repobilityId": "022cbb88f165af98", "scanner": "scanner-primary", "fingerprint": "b1fdbbe2fd31be66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb10f2a0c84fe7d2", "level": "note", "message": {"text": "Legacy-named symbol `trial_banner_dismissed_day_v1` in src/components/PaywallGate.jsx:144"}, "properties": {"repobilityId": "1b95bfba777cb737", "scanner": "scanner-primary", "fingerprint": "cb10f2a0c84fe7d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-888d611a1bde2f4d", "level": "note", "message": {"text": "Legacy-named symbol `investments_v2` in src/components/LeadTracker.jsx:96"}, "properties": {"repobilityId": "38a9ce8c7d5fd07e", "scanner": "scanner-primary", "fingerprint": "888d611a1bde2f4d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-08940f0bf6f48025", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/components/LeadTracker.jsx:320"}, "properties": {"repobilityId": "875483bfac7ca326", "scanner": "scanner-primary", "fingerprint": "08940f0bf6f48025", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bbe4d696617c493c", "level": "note", "message": {"text": "Legacy-named symbol `onClearLegacy` in src/components/ProspectForm.jsx:60"}, "properties": {"repobilityId": "32cd6f4767b36f56", "scanner": "scanner-primary", "fingerprint": "bbe4d696617c493c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1a0f1db925360471", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ProspectForm.jsx:104"}, "properties": {"repobilityId": "5734304f19df4e67", "scanner": "scanner-primary", "fingerprint": "1a0f1db925360471", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8571d6f3b9fdde31", "level": "note", "message": {"text": "Legacy-named symbol `taken_rate_priors_v1` in src/components/TakenRateCalculator.jsx:17"}, "properties": {"repobilityId": "625eab9e2649e950", "scanner": "scanner-primary", "fingerprint": "8571d6f3b9fdde31", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-74f771b434424ff5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/TakenRateCalculator.jsx:205"}, "properties": {"repobilityId": "e71f7915cd48d002", "scanner": "scanner-primary", "fingerprint": "74f771b434424ff5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5773f1069ff1d82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SendOutreachEmail.jsx:91"}, "properties": {"repobilityId": "3f0e6332255d9b73", "scanner": "scanner-primary", "fingerprint": "d5773f1069ff1d82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aca6afed43387936", "level": "note", "message": {"text": "Legacy-named symbol `chat_history_v1` in src/components/AgentChatbot.jsx:11"}, "properties": {"repobilityId": "5a6eb92fc0d650c9", "scanner": "scanner-primary", "fingerprint": "aca6afed43387936", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c0d2f17f51f3bdd2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/AgentChatbot.jsx:519"}, "properties": {"repobilityId": "7801810fb13071f6", "scanner": "scanner-primary", "fingerprint": "c0d2f17f51f3bdd2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edfb559a34fda535", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/TextDripSettings.jsx:127"}, "properties": {"repobilityId": "db0078027ca4a8c9", "scanner": "scanner-primary", "fingerprint": "edfb559a34fda535", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70adb03a21af5f9e", "level": "note", "message": {"text": "Legacy-named symbol `association_bonus_detail_v1` in src/components/AssociationCommissionDetailImport.jsx:22"}, "properties": {"repobilityId": "9ff71947f901e3dd", "scanner": "scanner-primary", "fingerprint": "70adb03a21af5f9e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9104dfe900e134da", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/AgentSettingsPanel.jsx:43"}, "properties": {"repobilityId": "9a67b33cd3ce7b8e", "scanner": "scanner-primary", "fingerprint": "9104dfe900e134da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac61060d4d250caa", "level": "note", "message": {"text": "Legacy-named symbol `no_phi_ack_v1` in src/components/NoPhiBanner.jsx:6"}, "properties": {"repobilityId": "ca2a61c2b52784b2", "scanner": "scanner-primary", "fingerprint": "ac61060d4d250caa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5cd867fc09f75fdf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/ScreenshotImport.jsx:85"}, "properties": {"repobilityId": "95cb2ccbc122de27", "scanner": "scanner-primary", "fingerprint": "5cd867fc09f75fdf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fea8f1c60992326", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/SendWelcomeEmail.jsx:161"}, "properties": {"repobilityId": "86c51437a809c078", "scanner": "scanner-primary", "fingerprint": "3fea8f1c60992326", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a2a6423450909b3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/SendWelcomeEmail.jsx:145"}, "properties": {"repobilityId": "238990994d35639e", "scanner": "scanner-primary", "fingerprint": "7a2a6423450909b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fb136fcee5e45548", "level": "note", "message": {"text": "Legacy-named symbol `prim_migration_dismissed_v1` in src/components/auth/MigrationPrompt.jsx:8"}, "properties": {"repobilityId": "2ffe55fe44be489b", "scanner": "scanner-primary", "fingerprint": "fb136fcee5e45548", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b17718c429127538", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/motion/MotionPrimitives.jsx:102"}, "properties": {"repobilityId": "8c2196d136f4bf8c", "scanner": "scanner-primary", "fingerprint": "b17718c429127538", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-913a8158d64e93da", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/views/ReportSheet.jsx:4"}, "properties": {"repobilityId": "12d4e3163dc68fb6", "scanner": "scanner-primary", "fingerprint": "913a8158d64e93da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc64c943b23d91c3", "level": "note", "message": {"text": "Legacy-named symbol `platform_budget_v1` in src/components/views/ReportsView.jsx:48"}, "properties": {"repobilityId": "c10af180399d39cf", "scanner": "scanner-primary", "fingerprint": "cc64c943b23d91c3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a3a1692d1ab3e516", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/views/AssociationsView.jsx:109"}, "properties": {"repobilityId": "62b25421fa548c6c", "scanner": "scanner-primary", "fingerprint": "a3a1692d1ab3e516", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd95409d62488260", "level": "note", "message": {"text": "Legacy-named symbol `platform_budget_v1` in src/components/views/PlatformExpensesView.jsx:9"}, "properties": {"repobilityId": "578fd12d4a2ce4ba", "scanner": "scanner-primary", "fingerprint": "cd95409d62488260", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0d3f8f77297aa31b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/views/ProspectsView.jsx:1024"}, "properties": {"repobilityId": "d16f484cadcd457c", "scanner": "scanner-primary", "fingerprint": "0d3f8f77297aa31b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dc47a892da01cbc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/views/ClosedDeals.jsx:17"}, "properties": {"repobilityId": "405f70e789016d91", "scanner": "scanner-primary", "fingerprint": "6dc47a892da01cbc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e9cd9ff349c7f0b", "level": "note", "message": {"text": "Legacy-named symbol `business_expenses_v1` in src/components/views/CpaDashboard.jsx:82"}, "properties": {"repobilityId": "ef343a5d4e16c730", "scanner": "scanner-primary", "fingerprint": "5e9cd9ff349c7f0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e05a1ad854f0c81b", "level": "note", "message": {"text": "Legacy-named symbol `agent_tier_v1` in src/components/views/CommissionCalculator.jsx:24"}, "properties": {"repobilityId": "be521b9e6a0644e1", "scanner": "scanner-primary", "fingerprint": "e05a1ad854f0c81b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e393fdfc2539fc79", "level": "note", "message": {"text": "Legacy-named symbol `business_accounts_v1` in src/components/views/BusinessBooksView.jsx:24"}, "properties": {"repobilityId": "b486b5e39b6466a9", "scanner": "scanner-primary", "fingerprint": "e393fdfc2539fc79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7f4e269735a575f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/views/BusinessBooksView.jsx:158"}, "properties": {"repobilityId": "71c7b88186998d1f", "scanner": "scanner-primary", "fingerprint": "7f4e269735a575f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5aba4bbf4821e2c0", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/page.js:5"}, "properties": {"repobilityId": "5ecc6ee212b01465", "scanner": "scanner-primary", "fingerprint": "5aba4bbf4821e2c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c219987a096a575f", "level": "note", "message": {"text": "Legacy-named symbol `ringy_config_v1` in src/app/api/ringy/config/route.js:8"}, "properties": {"repobilityId": "e3823c6a9b58a2ef", "scanner": "scanner-primary", "fingerprint": "c219987a096a575f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4659a6c1f15513b8", "level": "note", "message": {"text": "Legacy-named symbol `ringy_config_v1` in src/app/api/ringy/webhook/[token]/route.js:11"}, "properties": {"repobilityId": "1d099d5630e1af98", "scanner": "scanner-primary", "fingerprint": "4659a6c1f15513b8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9a2028317b3a7967", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/ringy/webhook/[token]/route.js:109"}, "properties": {"repobilityId": "1339a04ce18c5a5f", "scanner": "scanner-primary", "fingerprint": "9a2028317b3a7967", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-151222862f54ebc6", "level": "note", "message": {"text": "Legacy-named symbol `prospects_v1` in src/app/api/email/webhook/route.js:147"}, "properties": {"repobilityId": "373cab1a36c76d3d", "scanner": "scanner-primary", "fingerprint": "151222862f54ebc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b0dff09edd698ef9", "level": "note", "message": {"text": "Legacy-named symbol `prospects_v1` in src/app/api/email/send/route.js:194"}, "properties": {"repobilityId": "2f8948debfd2cf7c", "scanner": "scanner-primary", "fingerprint": "b0dff09edd698ef9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1b9b581745fe0ee7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/email/send/route.js:130"}, "properties": {"repobilityId": "092c01657fb698a1", "scanner": "scanner-primary", "fingerprint": "1b9b581745fe0ee7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-242daafe80ffe396", "level": "note", "message": {"text": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/push/test/route.js:13"}, "properties": {"repobilityId": "06a7d2c3cc12d8fc", "scanner": "scanner-primary", "fingerprint": "242daafe80ffe396", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9b7f3b435be3e031", "level": "note", "message": {"text": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/push/subscribe/route.js:5"}, "properties": {"repobilityId": "10dedeaca0b1f18d", "scanner": "scanner-primary", "fingerprint": "9b7f3b435be3e031", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f058fb0c3ebc0671", "level": "note", "message": {"text": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/disconnect/route.js:4"}, "properties": {"repobilityId": "4818040e9dfef804", "scanner": "scanner-primary", "fingerprint": "f058fb0c3ebc0671", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0c6e83d6f6f6c2ba", "level": "note", "message": {"text": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/connect/route.js:7"}, "properties": {"repobilityId": "97ebcdc3f0180893", "scanner": "scanner-primary", "fingerprint": "0c6e83d6f6f6c2ba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-13781b921ebcaa22", "level": "note", "message": {"text": "Legacy-named symbol `textdrip_secret_v1` in src/app/api/textdrip/sync/route.js:58"}, "properties": {"repobilityId": "a3d74af43c00e463", "scanner": "scanner-primary", "fingerprint": "13781b921ebcaa22", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ffa6b8d366aae431", "level": "note", "message": {"text": "Legacy-named symbol `textdrip_config_v1` in src/app/api/textdrip/status/route.js:54"}, "properties": {"repobilityId": "70d250a60f361288", "scanner": "scanner-primary", "fingerprint": "ffa6b8d366aae431", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5920dcc92e227754", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/import-prospects-ai/route.js:279"}, "properties": {"repobilityId": "903b309bfba7a53d", "scanner": "scanner-primary", "fingerprint": "5920dcc92e227754", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-248f301525bfb8c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/team/invite/respond/route.js:60"}, "properties": {"repobilityId": "13ae88f69e310ea1", "scanner": "scanner-primary", "fingerprint": "248f301525bfb8c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72d9bc4052245d79", "level": "note", "message": {"text": "Legacy-named symbol `agent_profile_v1` in src/app/api/banners/[userId]/route.js:5"}, "properties": {"repobilityId": "51255fcf3b92b894", "scanner": "scanner-primary", "fingerprint": "72d9bc4052245d79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-feb67c431e157729", "level": "note", "message": {"text": "Legacy-named symbol `business_income_v1` in src/app/api/admin/phantom-bonuses/route.js:90"}, "properties": {"repobilityId": "2769604acae9abfa", "scanner": "scanner-primary", "fingerprint": "feb67c431e157729", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b52c97e9e584bf17", "level": "note", "message": {"text": "Legacy-named symbol `push_subscriptions_v1` in src/app/api/reminders/route.js:26"}, "properties": {"repobilityId": "4806964b918f6ce7", "scanner": "scanner-primary", "fingerprint": "b52c97e9e584bf17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a53570d0e43ae3da", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/reminders/route.js:59"}, "properties": {"repobilityId": "637f986219b138b7", "scanner": "scanner-primary", "fingerprint": "a53570d0e43ae3da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e125262f54504c10", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/extract-screenshot-ai/route.js:114"}, "properties": {"repobilityId": "894675a807a61beb", "scanner": "scanner-primary", "fingerprint": "e125262f54504c10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-827a3b93d5d33473", "level": "note", "message": {"text": "Legacy-named symbol `welcome_email_sent_v1` in src/app/api/stripe/webhook/route.js:118"}, "properties": {"repobilityId": "65341b2247630d40", "scanner": "scanner-primary", "fingerprint": "827a3b93d5d33473", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-57e8040632e69c6a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/stripe/webhook/route.js:117"}, "properties": {"repobilityId": "d8977e2a19a59e5a", "scanner": "scanner-primary", "fingerprint": "57e8040632e69c6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6408301ed7ae8a50", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/import-expenses-ai/route.js:264"}, "properties": {"repobilityId": "2021e5970d03674e", "scanner": "scanner-primary", "fingerprint": "6408301ed7ae8a50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a808de54189e2f5", "level": "note", "message": {"text": "Legacy-named symbol `business_expenses_v1` in src/app/admin/page.jsx:269"}, "properties": {"repobilityId": "35e05b0d5a9bd3b3", "scanner": "scanner-primary", "fingerprint": "1a808de54189e2f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d732bb96ea67b281", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/landing/page.jsx:675"}, "properties": {"repobilityId": "0368a8ab3e954a8e", "scanner": "scanner-primary", "fingerprint": "d732bb96ea67b281", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b1af8f686ccef48", "level": "note", "message": {"text": "Legacy-named symbol `followup_playbook_v1` in src/lib/followupEngine.test.mjs:16"}, "properties": {"repobilityId": "6396e6a52d5f46f4", "scanner": "scanner-primary", "fingerprint": "3b1af8f686ccef48", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4daf1b02db5d77cc", "level": "note", "message": {"text": "Legacy-named symbol `pending_email_queue_v1` in src/lib/pendingEmailQueue.js:18"}, "properties": {"repobilityId": "127093b47718e210", "scanner": "scanner-primary", "fingerprint": "4daf1b02db5d77cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0f335ea23e60ae3b", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/duplicateResolver.test.mjs:126"}, "properties": {"repobilityId": "2a84efb97ccc2c90", "scanner": "scanner-primary", "fingerprint": "0f335ea23e60ae3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f03bbec8336e2481", "level": "note", "message": {"text": "Legacy-named symbol `prospect_source_colors_v1` in src/lib/sourceColors.js:8"}, "properties": {"repobilityId": "d77d1ecdbfbf171e", "scanner": "scanner-primary", "fingerprint": "f03bbec8336e2481", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-49ff4107c1899619", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/push.js:67"}, "properties": {"repobilityId": "142862279fdd5c1f", "scanner": "scanner-primary", "fingerprint": "49ff4107c1899619", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ab36ce929749a28", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/supabase.js:20"}, "properties": {"repobilityId": "196956954f84e0c5", "scanner": "scanner-primary", "fingerprint": "6ab36ce929749a28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-558b71e2dd52f7a4", "level": "note", "message": {"text": "Legacy-named symbol `association_bonus_detail_v1` in src/lib/associationResiduals.js:10"}, "properties": {"repobilityId": "47a3e328cc5d7567", "scanner": "scanner-primary", "fingerprint": "558b71e2dd52f7a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6974e70dbb1ee391", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/associationResiduals.js:83"}, "properties": {"repobilityId": "4165dcb9dbfa525c", "scanner": "scanner-primary", "fingerprint": "6974e70dbb1ee391", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ee7fb508354c1ca", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/businessImport.js:136"}, "properties": {"repobilityId": "acae813ae61110a2", "scanner": "scanner-primary", "fingerprint": "8ee7fb508354c1ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46bca618efbbb9f3", "level": "note", "message": {"text": "Legacy-named symbol `custom_lead_options_v1` in src/lib/customLeadOptions.js:6"}, "properties": {"repobilityId": "eafae42abcbbbdf6", "scanner": "scanner-primary", "fingerprint": "46bca618efbbb9f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc9d6dd92e490aa0", "level": "note", "message": {"text": "Legacy-named symbol `email_sender_identity_v1` in src/lib/outreachEmails.js:15"}, "properties": {"repobilityId": "e116bc9a17e0b7fb", "scanner": "scanner-primary", "fingerprint": "dc9d6dd92e490aa0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-00de3ebde0c03f96", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/outreachEmails.js:32"}, "properties": {"repobilityId": "bafc7f9f4be76ae7", "scanner": "scanner-primary", "fingerprint": "00de3ebde0c03f96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6535a902818182d1", "level": "note", "message": {"text": "Legacy-named symbol `prospects_v1` in src/lib/teamServer.js:100"}, "properties": {"repobilityId": "e0bc075ce8487a84", "scanner": "scanner-primary", "fingerprint": "6535a902818182d1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f418bc0049b8ea0b", "level": "note", "message": {"text": "Legacy-named symbol `setup_checklist_v1` in src/lib/setupChecklist.js:10"}, "properties": {"repobilityId": "3de3abcfac597686", "scanner": "scanner-primary", "fingerprint": "f418bc0049b8ea0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-86c2d6a5b1887b63", "level": "note", "message": {"text": "Legacy-named symbol `onboarding_progress_v1` in src/lib/onboarding.js:16"}, "properties": {"repobilityId": "f1f17dbc84d90f65", "scanner": "scanner-primary", "fingerprint": "86c2d6a5b1887b63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d7fd914964155525", "level": "note", "message": {"text": "Legacy-named symbol `activities_v1` in src/lib/followupRollup.mjs:5"}, "properties": {"repobilityId": "58e7f80b992800f9", "scanner": "scanner-primary", "fingerprint": "d7fd914964155525", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a3643bf160a1c1ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/screenshotExtract.js:237"}, "properties": {"repobilityId": "c64491edea5cc9dd", "scanner": "scanner-primary", "fingerprint": "a3643bf160a1c1ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb260889cf9ee3e8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/statement.test.mjs:79"}, "properties": {"repobilityId": "a5d6a191047a9abc", "scanner": "scanner-primary", "fingerprint": "eb260889cf9ee3e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7509a0ea9b3c6636", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/utils.js:5"}, "properties": {"repobilityId": "6a96796831ca6921", "scanner": "scanner-primary", "fingerprint": "7509a0ea9b3c6636", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c65ae3eb6d1c407f", "level": "note", "message": {"text": "Legacy-named symbol `agent_profile_v1` in src/lib/agentProfile.js:18"}, "properties": {"repobilityId": "ebb0bd50c7eec7e1", "scanner": "scanner-primary", "fingerprint": "c65ae3eb6d1c407f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b71badbbc06067d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/subscription.js:123"}, "properties": {"repobilityId": "f4ffe249bb0c69a1", "scanner": "scanner-primary", "fingerprint": "b71badbbc06067d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edddcc6c41f7dd8b", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/salesreport.js:234"}, "properties": {"repobilityId": "e70ab27978853a7f", "scanner": "scanner-primary", "fingerprint": "edddcc6c41f7dd8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26f7800066a248e7", "level": "note", "message": {"text": "Legacy-named symbol `announcement_acks_v1` in src/lib/announcements.js:288"}, "properties": {"repobilityId": "17292bffcc0d705d", "scanner": "scanner-primary", "fingerprint": "26f7800066a248e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2d573514b0a1e6cc", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/leadDedup.test.mjs:1"}, "properties": {"repobilityId": "21b07a7ba94e3ec7", "scanner": "scanner-primary", "fingerprint": "2d573514b0a1e6cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-332a3280ade7f92f", "level": "note", "message": {"text": "Legacy-named symbol `post_sale_email_template_v1` in src/lib/postSaleEmails.js:5"}, "properties": {"repobilityId": "ed1d742177beeeae", "scanner": "scanner-primary", "fingerprint": "332a3280ade7f92f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-72115fed5e8dd45d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/postSaleEmails.js:44"}, "properties": {"repobilityId": "a3956f5b12a35e4d", "scanner": "scanner-primary", "fingerprint": "72115fed5e8dd45d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3990b03b85109c6e", "level": "note", "message": {"text": "Legacy-named symbol `vendor_memory_v1` in src/lib/vendorMemory.js:12"}, "properties": {"repobilityId": "1f2e8cf7cf22a112", "scanner": "scanner-primary", "fingerprint": "3990b03b85109c6e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-995e95fc9abf35e2", "level": "note", "message": {"text": "Legacy-named symbol `welcome_email_sent_v1` in src/lib/welcomeEmails.js:6"}, "properties": {"repobilityId": "498fe226cc8a0d6a", "scanner": "scanner-primary", "fingerprint": "995e95fc9abf35e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-052efbf2ca598152", "level": "note", "message": {"text": "Legacy-named symbol `user_rubric_v1` in src/lib/userRubric.js:10"}, "properties": {"repobilityId": "64938dd6774e1ec6", "scanner": "scanner-primary", "fingerprint": "052efbf2ca598152", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-11992f02583f3d32", "level": "note", "message": {"text": "Legacy-named symbol `import_history_v1` in src/lib/importHistory.js:9"}, "properties": {"repobilityId": "06d6adea34ad03d1", "scanner": "scanner-primary", "fingerprint": "11992f02583f3d32", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6652dc7760de8535", "level": "note", "message": {"text": "Legacy-named symbol `platform_expenses_v1` in src/lib/teamMath.mjs:19"}, "properties": {"repobilityId": "67498ca8c30f7fca", "scanner": "scanner-primary", "fingerprint": "6652dc7760de8535", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-eb9751489c8757fa", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/textdripServer.js:189"}, "properties": {"repobilityId": "7dfa19f4fcedb5f2", "scanner": "scanner-primary", "fingerprint": "eb9751489c8757fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7120a5112691f361", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/textdripServer.js:111"}, "properties": {"repobilityId": "f6a8b5a52fc28497", "scanner": "scanner-primary", "fingerprint": "7120a5112691f361", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5d163736f6b0bae0", "level": "note", "message": {"text": "Legacy-named symbol `association_bonus_detail_v1` in src/lib/reports.mjs:385"}, "properties": {"repobilityId": "9c6c6d11a9ab6cee", "scanner": "scanner-primary", "fingerprint": "5d163736f6b0bae0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a709d8d2dd107f13", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/reports.mjs:87"}, "properties": {"repobilityId": "2d01785986a4382b", "scanner": "scanner-primary", "fingerprint": "a709d8d2dd107f13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e233ef3d1221da52", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/prospects.js:26"}, "properties": {"repobilityId": "d4b4085bceb91f2f", "scanner": "scanner-primary", "fingerprint": "e233ef3d1221da52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc9148d1e6765ecc", "level": "note", "message": {"text": "Legacy-named symbol `followup_playbook_v1` in src/lib/followupEngine.mjs:14"}, "properties": {"repobilityId": "b0bc1fb82cd71a88", "scanner": "scanner-primary", "fingerprint": "cc9148d1e6765ecc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d29d173696a5f0b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/seed.js:40"}, "properties": {"repobilityId": "261248b8ee46fe0b", "scanner": "scanner-primary", "fingerprint": "d29d173696a5f0b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecbbbb3d057e326e", "level": "note", "message": {"text": "Legacy-named symbol `business_expenses_v1` in src/lib/chatTools.js:261"}, "properties": {"repobilityId": "358e3dcae47c16ad", "scanner": "scanner-primary", "fingerprint": "ecbbbb3d057e326e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b3fcadb350d9caa0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/chatTools.js:168"}, "properties": {"repobilityId": "292edd076869cc27", "scanner": "scanner-primary", "fingerprint": "b3fcadb350d9caa0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bc0673cd2bf04cf", "level": "note", "message": {"text": "Legacy-named symbol `agent_profile_v1` in src/lib/postSaleHtml.js:11"}, "properties": {"repobilityId": "abe1033637b6c0db", "scanner": "scanner-primary", "fingerprint": "6bc0673cd2bf04cf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c9697b6c2dac063f", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/postSaleHtml.js:71"}, "properties": {"repobilityId": "ec3d03b0d27ade61", "scanner": "scanner-primary", "fingerprint": "c9697b6c2dac063f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f56b2a554df2a02", "level": "note", "message": {"text": "Legacy-named symbol `own_advances_v1` in src/lib/statement.js:904"}, "properties": {"repobilityId": "b2279d3ec6bcee14", "scanner": "scanner-primary", "fingerprint": "9f56b2a554df2a02", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bd9189666344826d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/statement.js:376"}, "properties": {"repobilityId": "30b6d86cbf09211a", "scanner": "scanner-primary", "fingerprint": "bd9189666344826d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e37e5ce4d0d9c7a3", "level": "note", "message": {"text": "Legacy-named symbol `custom_categories_v1` in src/lib/customCategories.js:5"}, "properties": {"repobilityId": "eb4605e39bb4ea01", "scanner": "scanner-primary", "fingerprint": "e37e5ce4d0d9c7a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0ef21f0b2bfd2157", "level": "note", "message": {"text": "Legacy-named symbol `__prim_kv_owner_v1` in src/lib/storage.js:56"}, "properties": {"repobilityId": "909afb8bc63544f7", "scanner": "scanner-primary", "fingerprint": "0ef21f0b2bfd2157", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e19bebc44f94bccb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/storage.js:43"}, "properties": {"repobilityId": "efce760c19f06bfa", "scanner": "scanner-primary", "fingerprint": "e19bebc44f94bccb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fd71dea5c5c981e", "level": "note", "message": {"text": "Legacy-named symbol `closed_periods_v1` in src/lib/closedPeriods.js:5"}, "properties": {"repobilityId": "4784851496a6056c", "scanner": "scanner-primary", "fingerprint": "3fd71dea5c5c981e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-870a1a4603ff7d0f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/closedPeriods.js:40"}, "properties": {"repobilityId": "7726552db9e482f0", "scanner": "scanner-primary", "fingerprint": "870a1a4603ff7d0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a35d1acc8afab011", "level": "note", "message": {"text": "Legacy-named symbol `platform_expenses_v1` in src/lib/constants.js:356"}, "properties": {"repobilityId": "f331db98f387b8b2", "scanner": "scanner-primary", "fingerprint": "a35d1acc8afab011", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-79577cfe22c97a43", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/constants.js:1"}, "properties": {"repobilityId": "c545f4dbd86fe151", "scanner": "scanner-primary", "fingerprint": "79577cfe22c97a43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}