{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: scottring/symphonyOS", "shortDescription": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#8\nRepo: scottring/symphonyOS\nIssue/PR number: 8\nGraph consistency label: needs_more_evidence\nNodes: 30\nEdges: 56\nNode types: {'pr_file': 21, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: "}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: scottring/symphonyOS", "shortDescription": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#6\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#6\nRepo: scottring/symphonyOS\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-20989b654a8c27a3\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/6\",\n    \"text\": \"Git"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_test_ci_gap", "name": "Foundry mined test ci gap after feedback: scottring/symphonyOS", "shortDescription": {"text": "Foundry mined test ci gap after feedback: scottring/symphonyOS"}, "fullDescription": {"text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_verification_signal\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#9\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#9\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#9\nRepo: scottring/symphonyOS\nIssue/PR number: 9\nGraph consistency label: supported_by_verification_signal\nNodes: 48\nEdges: 74\nNode types: {'pr_file': 34, 'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1"}, "properties": {"scanner": "foundry_dataset", "category": "testing", "severity": "high", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: scottring/symphonyOS", "shortDescription": {"text": "Foundry mined schema ui api mismatch: scottring/symphonyOS"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#8\nRepo: scottring/symphonyOS\nIssue/PR number: 8\nGraph consistency label: needs_more_evidence\nNodes: 30\nEdges: 56\nNode types: {'pr_file': 21, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 21, 'comment_chain_touches"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: scottring/symphonyOS", "shortDescription": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#8\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 21\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'dependency_or_build': 2, 'ui_or_frontend': 18, 'schema_or_data': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-50e970498c93bc85\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\":"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "scanner-9ec177dfb7dee65d", "name": "Stray `console.log` in TS/JS \u2014 scripts/vault-sync.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/vault-sync.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56dfc2fa74c44dd7", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-create-event/index.ts:188", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-create-event/index.ts:188"}, "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-f0ad8886d9375207", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-events/index.ts:198", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-events/index.ts:198"}, "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-ec37c9fd8e41916d", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-update-location/index.ts:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-update-location/index.ts:192"}, "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-2a1bbaf34bcafb9c", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/action-queue/index.ts:226", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/action-queue/index.ts:226"}, "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-e22abf329e96dc7a", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/waitlist-signup-notify/index.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/waitlist-signup-notify/index.ts:95"}, "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-3299c96df9690fde", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/proactive-engine/index.ts:521", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/proactive-engine/index.ts:521"}, "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-0b5560ff39ca13a4", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/gcal-location-update/index.ts:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/gcal-location-update/index.ts:192"}, "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-74d333fbf9ba8a6c", "name": "TODO/FIXME marker in shipping code \u2014 src/apps/job-pipeline/components/ApplicationRow.tsx:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/apps/job-pipeline/components/ApplicationRow.tsx:3"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19d82776c140c663", "name": "`truncate` class without `title=` for hover reveal \u2014 src/apps/us/UsView.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/apps/us/UsView.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd7729b8becd4444", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/PuppyEasterEgg.tsx:113", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/PuppyEasterEgg.tsx:113"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f985753c1d7d1793", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/TaskDetail.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/TaskDetail.tsx:95"}, "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-5ff1557ab9369af4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/HomeAddressSettings.tsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/HomeAddressSettings.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76fc649836bd8b66", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/SettingsPage.tsx:611", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/SettingsPage.tsx:611"}, "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-e2dc4924e9e4d6c2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/CalendarSettings.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/CalendarSettings.tsx:113"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-576222fd4e859f37", "name": "Icon-only button without accessible name \u2014 src/components/layout/QuickCapture.tsx:401", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/layout/QuickCapture.tsx:401"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a0a5f34bda82e10", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:435", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:435"}, "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-a32d63f06090b855", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/PullStrip.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/PullStrip.tsx:86"}, "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-c23e1e2bb5b12dea", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EmailActionsBanner.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EmailActionsBanner.tsx:67"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fce4615e3c0b1c47", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/ScheduleItem.tsx:398", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/ScheduleItem.tsx:398"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b36468641e8bff53", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/SwipeableCard.tsx:353", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/SwipeableCard.tsx:353"}, "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-eb3a9929f6bf38d3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/StagingFloat.tsx:492", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/StagingFloat.tsx:492"}, "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-e840e98b600df9db", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/InboxTaskCard.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/InboxTaskCard.tsx:236"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-026125ef31ee90a1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EveningMealCard.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EveningMealCard.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5007e92e4aba69ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/ClarityIndicator.tsx:253", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/ClarityIndicator.tsx:253"}, "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-0bc56fe4e2d71db7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EventEmailsSection.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EventEmailsSection.tsx:60"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-470ceba00aba5c64", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/DayNavCluster.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/DayNavCluster.tsx:86"}, "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-da6e01eff39c55a6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/DiscussionBadge.tsx:47", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/DiscussionBadge.tsx:47"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-951d05f3b009fdb3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/surface/sections/PanelWhy.tsx:147", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/surface/sections/PanelWhy.tsx:147"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6590d1d188915484", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/surface/sections/PanelLinks.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/surface/sections/PanelLinks.tsx:40"}, "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-f36ba646f3948534", "name": "Icon-only button without accessible name \u2014 src/components/detail/DetailPanelRedesign.tsx:2685", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/detail/DetailPanelRedesign.tsx:2685"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0dcf118bee933244", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/detail/DetailPanelRedesign.tsx:445", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/detail/DetailPanelRedesign.tsx:445"}, "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-43e92eac91be9b87", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/ListPicker.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/ListPicker.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68d64027a1e17fdf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/InboxTriageModal.tsx:214", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/InboxTriageModal.tsx:214"}, "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-e2f42284376117f4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/AssignPicker.tsx:161", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/AssignPicker.tsx:161"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68d9a7e2a30ccf25", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/TimePickerPopover.tsx:321", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/TimePickerPopover.tsx:321"}, "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-642472ae28d8dd26", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/SchedulePopover.tsx:607", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/SchedulePopover.tsx:607"}, "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-7f94d21ae2dcc195", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/goals/GoalTreeView.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/goals/GoalTreeView.tsx:75"}, "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-e5cfc6e30d624cd5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contact/ContactViewRedesign.tsx:329", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contact/ContactViewRedesign.tsx:329"}, "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-0522dd8a4639339c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallEmailActionCard.tsx:68", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallEmailActionCard.tsx:68"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-725dfe522db38778", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallLookAhead.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallLookAhead.tsx:103"}, "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-035a466b41bca2bc", "name": "Icon-only button without accessible name \u2014 src/components/wall/WallEmailActionsOverlay.tsx:83", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/wall/WallEmailActionsOverlay.tsx:83"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8024f1438fc6ccf0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDiscussionWidget.tsx:28", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDiscussionWidget.tsx:28"}, "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-861920aadd411fe6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/wall/WallRecipeViewer.tsx:283", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/wall/WallRecipeViewer.tsx:283"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-23e78a37aeb71de2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallSwimlane.tsx:246", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallSwimlane.tsx:246"}, "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-cb3dd80243b98552", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallNowCard.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallNowCard.tsx:105"}, "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-5e50536d9779900c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallEmailActions.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallEmailActions.tsx:35"}, "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-bf8fdaddbe19306a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallRoomsView.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallRoomsView.tsx:212"}, "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-3a1e21e12a26f700", "name": "Icon-only button without accessible name \u2014 src/components/wall/WallAgentCards.tsx:81", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/components/wall/WallAgentCards.tsx:81"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9cbd842880974b2e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallAgentCards.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallAgentCards.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bb26d1b8dfb0598", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallItem.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallItem.tsx:86"}, "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-df038959192e22dd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDinnerWidget.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDinnerWidget.tsx:106"}, "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-c8313a04967e9fbf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDiscussList.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDiscussList.tsx:35"}, "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-1372779cc8ef78e3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallChoresWidget.tsx:173", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallChoresWidget.tsx:173"}, "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-51bfdc35774f94bb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallItemDetail.tsx:190", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallItemDetail.tsx:190"}, "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-bd4c2d96d6b1433d", "name": "Stray `console.log` in TS/JS \u2014 src/components/wall/WallCalendar.tsx:280", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/wall/WallCalendar.tsx:280"}, "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-77a0716996994a57", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/now/WallNowRail.tsx:12", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/now/WallNowRail.tsx:12"}, "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-dfff0f6e8625ef53", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/now/WallNowQuadrant.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/now/WallNowQuadrant.tsx:35"}, "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-cd47aac3418baacb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/AfterSchoolView.tsx:208", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/AfterSchoolView.tsx:208"}, "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-555a6ce5012f08dd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/WeekendMorningView.tsx:225", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/WeekendMorningView.tsx:225"}, "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-9fec33b4c65cdbaf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/DinnerFlowView.tsx:133", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/DinnerFlowView.tsx:133"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0541d76890c62491", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/wall/contexts/DinnerFlowView.tsx:194", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/wall/contexts/DinnerFlowView.tsx:194"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bf7a3d29cc5ce89", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/BedtimeView.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/BedtimeView.tsx:241"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c30523d45806a64", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/EmailActionStrip.tsx:48", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/EmailActionStrip.tsx:48"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97773890ecae136a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/list/ListsList.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/list/ListsList.tsx:171"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03d0a60f71c72905", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/agent/BriefingSection.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/agent/BriefingSection.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-521f4d2f2b800460", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/timeline/TimelineCompanion.tsx:520", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/timeline/TimelineCompanion.tsx:520"}, "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-a12231531b7fc14b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/task/CompletionNotesPrompt.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/task/CompletionNotesPrompt.tsx:78"}, "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-d923d637815acd5a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/task/TaskViewRedesign.tsx:827", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/task/TaskViewRedesign.tsx:827"}, "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-b0861573549f232b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/chat/ChatPanel.tsx:188", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/chat/ChatPanel.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f47f8a1b8cd19ed6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/SearchResultItem.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/SearchResultItem.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-843a10a5f16b6c30", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/WeekView.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/WeekView.tsx:126"}, "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-2b1e304b715be010", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/CascadingRiverView.tsx:371", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/CascadingRiverView.tsx:371"}, "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-32154b19978ba383", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/week/WeekSummaryRow.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/week/WeekSummaryRow.tsx:35"}, "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-1fb505b581d9d397", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/week/WeekEventBlock.tsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/week/WeekEventBlock.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4504537f2821169", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/routine/RoutinesListRedesign.tsx:368", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/routine/RoutinesListRedesign.tsx:368"}, "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-d3ac2f6a3cc0956f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/location/PlacesAutocomplete.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/location/PlacesAutocomplete.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-506ff15f7e6f4638", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/meeting/MeetingNotesView.tsx:28", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/meeting/MeetingNotesView.tsx:28"}, "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-31fd6692c9021e36", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2GlanceCard.tsx:27", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2GlanceCard.tsx:27"}, "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-a0b45cb50769f516", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2ItemActionSheet.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2ItemActionSheet.tsx:94"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-643f2fe54a194171", "name": "Stray `console.log` in TS/JS \u2014 src/components/wall-v2/WallV2Shell.tsx:411", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/wall-v2/WallV2Shell.tsx:411"}, "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-eef60cb6880bdb99", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2EventCard.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2EventCard.tsx:88"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a2d43e6a8040852", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2AtAGlance.tsx:32", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2AtAGlance.tsx:32"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a9fc001de612795", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2UpcomingCard.tsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2UpcomingCard.tsx:34"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd577fe24eeb66c2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/NoteModal.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/NoteModal.tsx:206"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9416317a2e440973", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/NotePicker.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/NotePicker.tsx: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-53801d04954b45f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/EntityLinkPicker.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/EntityLinkPicker.tsx:218"}, "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-33fbf93d295f62bd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/history/CompletedTasksView.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/history/CompletedTasksView.tsx:258"}, "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-1f05a7f06c30ff73", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/directions/AddStopInput.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/directions/AddStopInput.tsx:140"}, "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-ff30c1bf168b814c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/directions/StopItem.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/directions/StopItem.tsx:64"}, "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-ce7f75caacd3c523", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/attachments/AttachmentList.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/attachments/AttachmentList.tsx:114"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aab1162f6fd0dedf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/PlanningColumn.tsx:315", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/PlanningColumn.tsx:315"}, "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-6519a59ab26745cf", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/daily/PlanTodaySession.tsx:119", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/daily/PlanTodaySession.tsx:119"}, "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-251c28da8d411931", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/cadence/CadenceSession.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/cadence/CadenceSession.tsx:128"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8a33ed58484c055", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/pins/PinnedItem.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pins/PinnedItem.tsx:71"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d585c8822241443", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/calendar/CalendarListDiscovery.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/calendar/CalendarListDiscovery.tsx:94"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04d0ab0babd438ae", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/calendar/CalendarDomainAssignment.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/calendar/CalendarDomainAssignment.tsx:153"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dc4b24a849e5e73", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/recipe/RecipeSection.tsx:94", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/recipe/RecipeSection.tsx:94"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-679011fdc84b70c4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/recipe/RecipeViewer.tsx:244", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/recipe/RecipeViewer.tsx:244"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-571057efcdce59a9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectsListRedesign.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectsListRedesign.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16262e8e6b8d6147", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectViewRedesign.tsx:667", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectViewRedesign.tsx:667"}, "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-5b8bdb87f194e865", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectControl.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectControl.tsx:59"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31b4459d98ce307d", "name": "Stray `console.log` in TS/JS \u2014 src/components/meals/chat/AskSymphonyRail.tsx:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/meals/chat/AskSymphonyRail.tsx:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f9cfa45a57a7da2", "name": "TODO/FIXME marker in shipping code \u2014 src/components/meals/groceries-v2/SendToGroceriesModalV2.tsx:106", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/meals/groceries-v2/SendToGroceriesModalV2.tsx:106"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61d10512d7466d6a", "name": "TODO/FIXME marker in shipping code \u2014 src/components/meals/tonight/MobileTabBar.tsx:19", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/meals/tonight/MobileTabBar.tsx:19"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-969420abcdb81a84", "name": "TODO/FIXME marker in shipping code \u2014 src/components/meals/tonight/TonightPage.tsx:55", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/meals/tonight/TonightPage.tsx:55"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c64857e8339e89e9", "name": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:5"}, "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-22de094750679b89", "name": "TODO/FIXME marker in shipping code \u2014 src/hooks/useMealPlan.test.ts:50", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/useMealPlan.test.ts:50"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d4ae519b1bf2c05", "name": "TODO/FIXME marker in shipping code \u2014 src/hooks/useGroceryStatus.test.ts:34", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/useGroceryStatus.test.ts:34"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ba8b0d1a02d29fa", "name": "Stray `console.log` in TS/JS \u2014 src/hooks/useWeather.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useWeather.ts:162"}, "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-4a1e79acba02f6d8", "name": "Stray `console.log` in TS/JS \u2014 src/hooks/useApplyMealSuggestion.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useApplyMealSuggestion.ts:35"}, "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-53e4f545b1376fb8", "name": "Stray `console.log` in TS/JS \u2014 src/hooks/useKioskCards.ts:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useKioskCards.ts:72"}, "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-371497229cd172c6", "name": "TODO/FIXME marker in shipping code \u2014 src/shell/LegacyDetailPanelHost.tsx:51", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/shell/LegacyDetailPanelHost.tsx:51"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad399c24542c8c83", "name": "TODO/FIXME marker in shipping code \u2014 src/shell/providers/MealEventsProvider.tsx:16", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/shell/providers/MealEventsProvider.tsx:16"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-933369bd1d233cfe", "name": "Stray `console.log` in TS/JS \u2014 e2e/p4-smoke.spec.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 e2e/p4-smoke.spec.ts:54"}, "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-5a32ac60613087ac", "name": "Runtime dotenv file present in repo: .env.production", "shortDescription": {"text": "Runtime dotenv file present in repo: .env.production"}, "fullDescription": {"text": "`.env.production` looks like a runtime dotenv file. It contains secret-looking assignments for VITE_SUPABASE_ANON_KEY, VITE_GOOGLE_MAPS_API_KEY. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-d3edd3c18a0a964b", "name": "Insecure pattern 'direct_innerhtml_assignment' in launch-dashboard.html:533", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in launch-dashboard.html:533"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ccb404108dcddb4b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/ask-symphony-meal/index.ts:19", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ask-symphony-meal/index.ts:19"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0443bacccfe24bde", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/recipe-discover/index.ts:14", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/recipe-discover/index.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6de6838fce7aabc5", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/places-proxy/index.ts:11", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/places-proxy/index.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fc66fe4b3b1cfcb8", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/kiosk-agent/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/kiosk-agent/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-552f10b6b9213731", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/extract-capture/index.ts:12", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/extract-capture/index.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a89260492745f80d", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/capture-to-inbox/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/capture-to-inbox/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0594947ad37dae75", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-create-event/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-create-event/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-157e16bd10095221", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-event-threads/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-event-threads/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a5d21be1f1f067f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-weather/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-weather/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-374bbb44b8f3f588", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/email-scanner/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/email-scanner/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3300b1b79bbb6677", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-events/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-events/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7def7977f836111", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-move-event/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-move-event/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0a61144f0739132b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/meal-plan-undo/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/meal-plan-undo/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9764c2703fc4182e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-recipe/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-recipe/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed65d778d1cec7c4", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-update-location/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-update-location/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5b8401775d20e11e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/action-queue/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/action-queue/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b082cceabbfe6ccb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/rhythms-parse/index.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/rhythms-parse/index.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-963fd4ea9a18b76c", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/semantic-search/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/semantic-search/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8ff15108abd3236e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-check/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-check/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0df2d6ac5ce17a9f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/meal-plan-generate/index.ts:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/meal-plan-generate/index.ts:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d1ca60a1228dc61e", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/waitlist-signup-notify/index.ts:2", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/waitlist-signup-notify/index.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b71c359d9c3b395", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-callback/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-callback/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6691e00757e94890", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/symphony-agent/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/symphony-agent/index.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8c3e9be6cccb24f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-send/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-send/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45bcbdd599483233", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/proactive-engine/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/proactive-engine/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3bd23bc6d57d68b6", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vault-sync/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vault-sync/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d4695265008e740", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/goal-planning-chat/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/goal-planning-chat/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-23c24136f1df19cb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/vault-write/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vault-write/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b09ffb514ca8ce21", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/note-match/index.ts:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/note-match/index.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a3eb8f8dd86d210", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/gcal-location-update/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gcal-location-update/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-baf2161b1d0dd688", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-delete-event/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-delete-event/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7b0f2e3c557b9f66", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-list/index.ts:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-list/index.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95b73eede76fa501", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-auth-url/index.ts:4", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-auth-url/index.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d446d1350f47e2f", "name": "Insecure pattern 'local_storage_auth_token' in raycast-extension/src/lib/supabase.ts:31", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in raycast-extension/src/lib/supabase.ts:31"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-99025e61c894634b", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/apps/tasks/TaskDetailPanel.test.tsx:14", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/apps/tasks/TaskDetailPanel.test.tsx:14"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6cddce3a28ab917c", "name": "Insecure pattern 'local_storage_auth_token' in src/components/JoinHousehold.tsx:73", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/components/JoinHousehold.tsx:73"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb2f0a80f126b0a6", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/PuppyEasterEgg.tsx:113", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/PuppyEasterEgg.tsx:113"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be3d90faac72f8e9", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/surface/sections/PanelWhy.tsx:147", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/surface/sections/PanelWhy.tsx:147"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1047cf81b9c5b59", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/wall/WallRecipeViewer.tsx:283", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/wall/WallRecipeViewer.tsx:283"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c05071e4e96bf9ef", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/wall/contexts/DinnerFlowView.tsx:194", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/wall/contexts/DinnerFlowView.tsx:194"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1ef4061707e62e26", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/recipe/RecipeViewer.tsx:244", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/recipe/RecipeViewer.tsx:244"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e3e775dc29091350", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/htmlUtils.ts:8", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/htmlUtils.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca8e4c42ddaccd26", "name": "Very large file: docs/design_handoff_onboarding_flow/artboards/PlannerV3.jsx (1546 lines)", "shortDescription": {"text": "Very large file: docs/design_handoff_onboarding_flow/artboards/PlannerV3.jsx (1546 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-0e89a54c60e19f59", "name": "Very large file: src/components/detail/DetailPanelRedesign.tsx (3498 lines)", "shortDescription": {"text": "Very large file: src/components/detail/DetailPanelRedesign.tsx (3498 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-5a6e7d4c178c9e5d", "name": "Very large file: src/components/task/TaskViewRedesign.tsx (1049 lines)", "shortDescription": {"text": "Very large file: src/components/task/TaskViewRedesign.tsx (1049 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-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 41 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 352 placeholder/mock markers across 129 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. 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-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.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-96340c74622049d4", "name": "Agent authority lacks a verifier contract: .claude/commands/screen.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/screen.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2a75245b9268d1ac", "name": "Agent instruction/config may expose a secret: .claude/commands/deploy.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/commands/deploy.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a4bda4ff6765d34", "name": "Agent authority lacks a verifier contract: .claude/commands/deploy.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/deploy.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0107242bde6f4ca1", "name": "Agent authority lacks a verifier contract: .claude/commands/apply.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/apply.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edfa743149131833", "name": "Commented-code block (6 lines) in docs/design_handoff_onboarding_flow/design-canvas.jsx:2", "shortDescription": {"text": "Commented-code block (6 lines) in docs/design_handoff_onboarding_flow/design-canvas.jsx:2"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6289c7903f7b27bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design_handoff_onboarding_flow/design-canvas.jsx:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design_handoff_onboarding_flow/design-canvas.jsx:63"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-88236f30f42292ed", "name": "Commented-code block (5 lines) in docs/design_handoff_onboarding_flow/artboards/PlannerV3.jsx:314", "shortDescription": {"text": "Commented-code block (5 lines) in docs/design_handoff_onboarding_flow/artboards/PlannerV3.jsx:314"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39e57307fb9a7196", "name": "Commented-code block (6 lines) in vite/yaml-engine.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in vite/yaml-engine.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b72c585c4f2d8116", "name": "Commented-code block (7 lines) in supabase/functions/places-proxy/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/places-proxy/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c57d49a7f6b50ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/places-proxy/index.ts:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/places-proxy/index.ts:44"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0983834e25e9a4fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/kiosk-agent/index.ts:336", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/kiosk-agent/index.ts:336"}, "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-412f57353bd9bbec", "name": "Commented-code block (7 lines) in supabase/functions/extract-capture/index.ts:51", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/extract-capture/index.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f250ef02e937981c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/extract-capture/index.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/extract-capture/index.ts:20"}, "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-b31c63313271ef43", "name": "Commented-code block (5 lines) in supabase/functions/extract-capture/lib/whatsapp.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/extract-capture/lib/whatsapp.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cfa6b45b155f86b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-create-event/index.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-create-event/index.ts:25"}, "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-8b17636ca91ad050", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-event-threads/index.ts:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-event-threads/index.ts:116"}, "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-70ffea5d38a0271f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-weather/index.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-weather/index.ts:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b101ad73632c898", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/email-scanner/index.ts:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/email-scanner/index.ts:98"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-320166cbe4b72be9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-events/index.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-events/index.ts:25"}, "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-2f855393dca27b5f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-move-event/index.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-move-event/index.ts:24"}, "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-cbfadad68b7e8794", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-update-location/index.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-update-location/index.ts:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-043315b4da58ccff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/action-queue/index.ts:361", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/action-queue/index.ts:361"}, "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-f885233f47dec4a5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rhythms-parse/index.ts:110", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rhythms-parse/index.ts:110"}, "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-c8a71569be79be71", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/semantic-search/index.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/semantic-search/index.ts:48"}, "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-ae9df8c0cc55a85e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-check/index.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-check/index.ts: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-92c0a5b3c0a246e6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/meal-plan-generate/index.ts:391", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/meal-plan-generate/index.ts:391"}, "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-ac301d62baa8987f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/waitlist-signup-notify/index.ts:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/waitlist-signup-notify/index.ts:57"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f77b37ade1b33982", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-callback/index.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-callback/index.ts:42"}, "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-765d4bd40386d87b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/symphony-agent/index.ts:339", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/symphony-agent/index.ts:339"}, "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-027e420402323087", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-send/index.ts:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-send/index.ts:33"}, "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-9cb3eed8287c3a2d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/proactive-engine/index.ts:436", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/proactive-engine/index.ts:436"}, "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-b4361c78318a31e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vault-sync/index.ts:272", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vault-sync/index.ts:272"}, "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-b9c17e740ff23e9e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/goal-planning-chat/index.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/goal-planning-chat/index.ts: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-db7136959a2b7362", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vault-write/index.ts:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vault-write/index.ts:65"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-42802cd1585233a6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gcal-location-update/index.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gcal-location-update/index.ts:26"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-469d7b2d793aa4b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-delete-event/index.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-delete-event/index.ts:24"}, "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-4eef56397a76d179", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-list/index.ts:25", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-list/index.ts:25"}, "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-1d747f0614ff7958", "name": "Commented-code block (9 lines) in src/main.tsx:88", "shortDescription": {"text": "Commented-code block (9 lines) in src/main.tsx:88"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1326100603ca271", "name": "Commented-code block (6 lines) in src/apps/tasks/TasksApp.tsx:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/apps/tasks/TasksApp.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9dfb009b52a548ae", "name": "Commented-code block (5 lines) in src/apps/tasks/HomeViewContainer.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/apps/tasks/HomeViewContainer.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d440352347653c2", "name": "Commented-code block (5 lines) in src/apps/tasks/HorizonView.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/apps/tasks/HorizonView.tsx: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-bc850dc0b8c86f8a", "name": "Commented-code block (6 lines) in src/apps/tasks/index.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/apps/tasks/index.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb1814750707997c", "name": "Commented-code block (7 lines) in src/apps/tasks/TaskDetailPanel.tsx:59", "shortDescription": {"text": "Commented-code block (7 lines) in src/apps/tasks/TaskDetailPanel.tsx: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-9ea6c70ac909767c", "name": "Commented-code block (5 lines) in src/apps/meals/MealsApp.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in src/apps/meals/MealsApp.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32c75f313537761f", "name": "Commented-code block (5 lines) in src/components/layout/QuickCapture.tsx:295", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/layout/QuickCapture.tsx:295"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3534f6111c3118c2", "name": "Commented-code block (5 lines) in src/components/schedule/InboxView.tsx:320", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/schedule/InboxView.tsx: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-221656ce2fcdf09f", "name": "Commented-code block (7 lines) in src/components/schedule/ScheduleItem.tsx:828", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/schedule/ScheduleItem.tsx:828"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-303e3a6240490bd4", "name": "Commented-code block (5 lines) in src/components/schedule/TodayView.tsx:247", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/schedule/TodayView.tsx:247"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd81c845837137aa", "name": "Commented-code block (5 lines) in src/components/schedule/TimelineQuickInput.tsx:20", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/schedule/TimelineQuickInput.tsx:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d0132815ae74b0f", "name": "Commented-code block (5 lines) in src/components/schedule/MobileTypeTile.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/schedule/MobileTypeTile.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68ac5cf8f2cc2a2d", "name": "Commented-code block (5 lines) in src/components/schedule/TodayView.test.tsx:286", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/schedule/TodayView.test.tsx:286"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e6a00b849386566", "name": "Commented-code block (5 lines) in src/components/detail/DetailPanelRedesign.tsx:1116", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/detail/DetailPanelRedesign.tsx:1116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38dba2b30747857a", "name": "Commented-code block (5 lines) in src/components/wall/WallCameraView.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/wall/WallCameraView.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-520325c3627c0395", "name": "Commented-code block (5 lines) in src/components/wall/today/todayItem.ts:33", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/wall/today/todayItem.ts:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b81b48ba05e397ef", "name": "Commented-code block (5 lines) in src/components/wall/contexts/useContextEngine.ts:83", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/wall/contexts/useContextEngine.ts: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-a469b2f7bcc49b92", "name": "Commented-code block (5 lines) in src/components/home/HomeView.tsx:86", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/home/HomeView.tsx:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c777ec9b1a3fa8a", "name": "Commented-code block (6 lines) in src/components/home/week/WeekViewV2.tsx:241", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/home/week/WeekViewV2.tsx:241"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0ea2b34dd07fae2", "name": "Commented-code block (6 lines) in src/components/home/week/WeekViewMobile.tsx:83", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/home/week/WeekViewMobile.tsx: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-e290cf22715dd0d5", "name": "Commented-code block (5 lines) in src/components/home/week/WeekEventBlock.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/home/week/WeekEventBlock.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69c19b92be9c9757", "name": "Commented-code block (5 lines) in src/components/routine/RoutineScheduleEditor.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/routine/RoutineScheduleEditor.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c91c1f88c1547ad0", "name": "Commented-code block (5 lines) in src/components/wall-v2/wallV2Adapter.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/wall-v2/wallV2Adapter.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bee5a58f36357cd", "name": "Commented-code block (5 lines) in src/components/wall-v2/tints.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/wall-v2/tints.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c8af8755030da0d", "name": "Commented-code block (6 lines) in src/components/wall-v2/WallV2Shell.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/wall-v2/WallV2Shell.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a79f7f7aaabad53b", "name": "Commented-code block (5 lines) in src/components/wall-v2/WallV2EventCard.tsx:43", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/wall-v2/WallV2EventCard.tsx: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-c13d25d464f3e152", "name": "Commented-code block (7 lines) in src/components/notes/TiptapEditor.tsx:112", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/notes/TiptapEditor.tsx:112"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0351a00451c3d475", "name": "Commented-code block (5 lines) in src/components/planning/daily/PlanTodaySession.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/planning/daily/PlanTodaySession.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79b967a6e718b498", "name": "Commented-code block (6 lines) in src/components/planning/cadence/CadenceSession.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/planning/cadence/CadenceSession.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8c790f1d9b101a1", "name": "Legacy-named symbol `irisLegacy` in src/components/meals/day-detail/DayDetailPage.tsx:286", "shortDescription": {"text": "Legacy-named symbol `irisLegacy` in src/components/meals/day-detail/DayDetailPage.tsx:286"}, "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-1ab5664a2d7a3720", "name": "Commented-code block (5 lines) in src/components/meals/plan/SlotSection.tsx:126", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/meals/plan/SlotSection.tsx: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-309aab1f0737db0f", "name": "Commented-code block (7 lines) in src/lib/quickInputParser.ts:28", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/quickInputParser.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e94f59851200bd4", "name": "Commented-code block (7 lines) in src/lib/lazyWithRetry.ts:50", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/lazyWithRetry.ts:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fcc95d4904d33ffa", "name": "Commented-code block (6 lines) in src/lib/mealsVisibility.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/mealsVisibility.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-381fefc9c0cc777c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/agentStream.ts:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/agentStream.ts:59"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-08fe31088b7622e6", "name": "Commented-code block (6 lines) in src/lib/googleMaps.ts:142", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/googleMaps.ts:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c5ae83e842a5062", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/placesRest.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/placesRest.ts:6"}, "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-4c9d247a30cb7eff", "name": "Commented-code block (8 lines) in src/lib/quietHours.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/quietHours.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1dde06b1d0fe3de2", "name": "Commented-code block (5 lines) in src/lib/triage/applyWhen.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/triage/applyWhen.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44f37eb4875899ad", "name": "Legacy-named symbol `doneOld` in src/lib/today/taskPools.test.ts:26", "shortDescription": {"text": "Legacy-named symbol `doneOld` in src/lib/today/taskPools.test.ts: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-319c37db64f2932d", "name": "Commented-code block (6 lines) in src/lib/today/grouping.ts:91", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/today/grouping.ts:91"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32bde3d71ee2634c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/today/groupTasks.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/today/groupTasks.ts:24"}, "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-4b0dd5d08aaf0773", "name": "Commented-code block (5 lines) in src/lib/cadence/config.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/cadence/config.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc528e68d5a8c606", "name": "Commented-code block (6 lines) in src/pages/CalendarCallback.tsx:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/CalendarCallback.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-955eff1d06cb1587", "name": "Commented-code block (5 lines) in src/hooks/useDirections.ts:197", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useDirections.ts:197"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe5f9e92f2cc35ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useEventDiscussionFlags.ts:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useEventDiscussionFlags.ts:38"}, "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-6b02e311d8a8702b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useHiddenCalendarEvents.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useHiddenCalendarEvents.ts:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1971b81390885195", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useWeather.ts:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useWeather.ts:120"}, "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-984c34044c05cef1", "name": "Commented-code block (7 lines) in src/hooks/useBuildAutoReload.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useBuildAutoReload.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce6584a022ee9478", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useProjectSync.ts:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useProjectSync.ts:113"}, "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-a74f218652c23b77", "name": "Commented-code block (5 lines) in src/hooks/useSupabaseTasks.ts:90", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useSupabaseTasks.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04f690a1dde95ca8", "name": "Commented-code block (6 lines) in src/hooks/useSystemHealth.ts:122", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useSystemHealth.ts:122"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b4b747da3b7b7cc", "name": "Commented-code block (7 lines) in src/hooks/useDragScroll.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useDragScroll.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c949bfd26038f86", "name": "Commented-code block (5 lines) in src/hooks/useDetailPanelState.ts:110", "shortDescription": {"text": "Commented-code block (5 lines) in src/hooks/useDetailPanelState.ts:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b4bbe92687817e6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useAskSymphony.ts:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useAskSymphony.ts:93"}, "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-a006c87f0a46652f", "name": "Commented-code block (7 lines) in src/shell/ShellRoutes.tsx:12", "shortDescription": {"text": "Commented-code block (7 lines) in src/shell/ShellRoutes.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f58f3d9aa42dfda9", "name": "Commented-code block (8 lines) in src/shell/LegacyDetailPanelHost.tsx:10", "shortDescription": {"text": "Commented-code block (8 lines) in src/shell/LegacyDetailPanelHost.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca88ad5e1c8ec974", "name": "Commented-code block (6 lines) in src/shell/useShellChrome.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/shell/useShellChrome.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2f8b4c9eb544a31", "name": "Commented-code block (5 lines) in src/shell/providers/MealEventsProvider.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/shell/providers/MealEventsProvider.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e648db5e87212f47", "name": "Commented-code block (7 lines) in e2e/app.spec.ts:38", "shortDescription": {"text": "Commented-code block (7 lines) in e2e/app.spec.ts:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-022e6399d1ef2beb", "name": "12 env vars used in code but missing from .env.example", "shortDescription": {"text": "12 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CI`, `DEV`, `MODE`, `NODE_ENV`, `PROD`, `SUPABASE_ANON_KEY`, `SUPABASE_URL`, `SUPABASE_USER_EMAIL` + 4 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c52913fadfe2f7d3", "name": "Frontend route `/goals/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/goals/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ecfce249e9cbcba0", "name": "Frontend route `/projects/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/projects/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d067c9a468ed6fb", "name": "Frontend route `/routines/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/routines/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fe2b7221e6efa4a1", "name": "Frontend route `/contacts/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/contacts/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-56a0609eafb8a0b8", "name": "Frontend route `/family/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/family/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f9d0f36fb73571d", "name": "Frontend route `/agent/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/agent/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-31b14ebdd40235d1", "name": "Frontend route `/wall/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/wall/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b1d5adf10957cba8", "name": "Frontend route `/wall-v2/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/wall-v2/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6d0b976e8fa6be5b", "name": "Frontend route `/jobs/*` has no Link/navigate to it \u2014 src/shell/providers/SelectionProvider.test.tsx", "shortDescription": {"text": "Frontend route `/jobs/*` has no Link/navigate to it \u2014 src/shell/providers/SelectionProvider.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f9e11441678bcd09", "name": "Frontend route `/tasks-new/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/tasks-new/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a66ed39fdb694cb7", "name": "Frontend route `/morning/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/morning/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea3f155c8ad9776c", "name": "Frontend route `/bedtime/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/bedtime/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1300d5d30e7f75d1", "name": "Frontend route `/meals/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/meals/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-78610a678e9b1007", "name": "Frontend route `/home/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/home/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9b809ceee7b066d8", "name": "Frontend route `/settings/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/settings/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e37e1f27874379d9", "name": "Frontend route `/history/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/history/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-97f6c0030b5cf589", "name": "Frontend route `/lists/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/lists/*` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e63753c205b8a663", "name": "Frontend route `/join/:token` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/join/:token` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8da4b52b4a02b601", "name": "Frontend route `/calendar-callback` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/calendar-callback` has no Link/navigate to it \u2014 src/main.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad078e660d287c66", "name": "Frontend route `/*` has no Link/navigate to it \u2014 src/shell/ShellRoutes.tsx", "shortDescription": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 src/shell/ShellRoutes.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-298beb3dca890949", "name": "Frontend route `:goalId` has no Link/navigate to it \u2014 src/apps/goals/GoalsApp.tsx", "shortDescription": {"text": "Frontend route `:goalId` has no Link/navigate to it \u2014 src/apps/goals/GoalsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4b10aecc83dc958", "name": "Frontend route `:projectId` has no Link/navigate to it \u2014 src/apps/projects/ProjectsApp.tsx", "shortDescription": {"text": "Frontend route `:projectId` has no Link/navigate to it \u2014 src/apps/projects/ProjectsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cae678fdda823c34", "name": "Frontend route `new` has no Link/navigate to it \u2014 src/apps/routines/RoutinesApp.tsx", "shortDescription": {"text": "Frontend route `new` has no Link/navigate to it \u2014 src/apps/routines/RoutinesApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-032dc9daa40f3ff3", "name": "Frontend route `:routineId` has no Link/navigate to it \u2014 src/apps/routines/RoutinesApp.tsx", "shortDescription": {"text": "Frontend route `:routineId` has no Link/navigate to it \u2014 src/apps/routines/RoutinesApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6347138cfd979e49", "name": "Frontend route `today` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx", "shortDescription": {"text": "Frontend route `today` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9dbc54e9765ae491", "name": "Frontend route `inbox` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx", "shortDescription": {"text": "Frontend route `inbox` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d5e2f8b55db4ba6c", "name": "Frontend route `task/:taskId` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx", "shortDescription": {"text": "Frontend route `task/:taskId` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-23a5a41f5af60a68", "name": "Frontend route `week` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `week` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef5acc3f5bbcef04", "name": "Frontend route `month` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `month` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12d3b1a6019e4e08", "name": "Frontend route `season` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `season` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-19d1dd2bcf879f75", "name": "Frontend route `year` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `year` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a8ab3ea80b6a6cfe", "name": "Frontend route `someday` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `someday` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7eb178e94db1505", "name": "Frontend route `tasks-new` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `tasks-new` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-909a03c2fda0c260", "name": "Frontend route `tasks-new/today` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `tasks-new/today` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-53986f2eca5f45e7", "name": "Frontend route `tasks-new/inbox` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `tasks-new/inbox` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4e92810d9d0ff055", "name": "Frontend route `tasks-new/task/:taskId` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx", "shortDescription": {"text": "Frontend route `tasks-new/task/:taskId` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cfa3032ba3d3d66d", "name": "Frontend route `/home/space/:id` has no Link/navigate to it \u2014 src/apps/home/SpaceView.test.tsx", "shortDescription": {"text": "Frontend route `/home/space/:id` has no Link/navigate to it \u2014 src/apps/home/SpaceView.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bd3821959ae2e50", "name": "Frontend route `/home/asset/:id` has no Link/navigate to it \u2014 src/apps/home/AssetView.test.tsx", "shortDescription": {"text": "Frontend route `/home/asset/:id` has no Link/navigate to it \u2014 src/apps/home/AssetView.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f12bc404d8190bd", "name": "Frontend route `space/:id/session` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx", "shortDescription": {"text": "Frontend route `space/:id/session` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f70fd43b495b030", "name": "Frontend route `space/:id` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx", "shortDescription": {"text": "Frontend route `space/:id` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8ac79bad320fdcbe", "name": "Frontend route `asset/new` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx", "shortDescription": {"text": "Frontend route `asset/new` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f589baa42477f2c6", "name": "Frontend route `asset/:id` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx", "shortDescription": {"text": "Frontend route `asset/:id` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-10c9175d74963e92", "name": "Frontend route `/home/space/:id/session` has no Link/navigate to it \u2014 src/apps/home/capture/RoomSessionMode.test.tsx", "shortDescription": {"text": "Frontend route `/home/space/:id/session` has no Link/navigate to it \u2014 src/apps/home/capture/RoomSessionMode.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c15159642b3c43d", "name": "Frontend route `:contactId` has no Link/navigate to it \u2014 src/apps/contacts/ContactsApp.tsx", "shortDescription": {"text": "Frontend route `:contactId` has no Link/navigate to it \u2014 src/apps/contacts/ContactsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49e698cc855283fd", "name": "Frontend route `:memberId` has no Link/navigate to it \u2014 src/apps/family/FamilyApp.tsx", "shortDescription": {"text": "Frontend route `:memberId` has no Link/navigate to it \u2014 src/apps/family/FamilyApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dae41848ecd1c6cf", "name": "Frontend route `shelf` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx", "shortDescription": {"text": "Frontend route `shelf` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e5f39c032986ce3a", "name": "Frontend route `habits` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx", "shortDescription": {"text": "Frontend route `habits` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cab5d91e302a211a", "name": "Frontend route `grams` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx", "shortDescription": {"text": "Frontend route `grams` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-410cb2eb4ff29113", "name": "Frontend route `tonight` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx", "shortDescription": {"text": "Frontend route `tonight` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ff4a7c43a560c049", "name": "Frontend route `day/:date` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx", "shortDescription": {"text": "Frontend route `day/:date` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30324b952cd68816", "name": "Frontend route `cook/:recipeId` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx", "shortDescription": {"text": "Frontend route `cook/:recipeId` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49ee11921e6209f9", "name": "Frontend route `brief` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx", "shortDescription": {"text": "Frontend route `brief` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0901bc1b712a9be2", "name": "Frontend route `plan` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx", "shortDescription": {"text": "Frontend route `plan` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-674172fc3d06c475", "name": "Frontend route `/chromed/*` has no Link/navigate to it \u2014 src/shell/Shell.test.tsx", "shortDescription": {"text": "Frontend route `/chromed/*` has no Link/navigate to it \u2014 src/shell/Shell.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f76d4d425a053a2", "name": "Frontend route `/chromeless/*` has no Link/navigate to it \u2014 src/shell/Shell.test.tsx", "shortDescription": {"text": "Frontend route `/chromeless/*` has no Link/navigate to it \u2014 src/shell/Shell.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4e823741e93bce8", "name": "Frontend route `/today/*` has no Link/navigate to it \u2014 src/shell/providers/SelectionProvider.test.tsx", "shortDescription": {"text": "Frontend route `/today/*` has no Link/navigate to it \u2014 src/shell/providers/SelectionProvider.test.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19113"}, "properties": {"repository": "scottring/symphonyOS", "repoUrl": "https://github.com/scottring/symphonyOS", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466912, "scanner": "foundry_dataset", "fingerprint": "0cdb32ae2db1b68042119c9152c94a1f941322f2b4bb04a4f2ca29b135f1bbcd", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"schema_or_data": 1, "ui_or_frontend": 18, "ui_workflow_gap": 1, "dependency_or_build": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 56, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 21, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 30, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 21, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#8", "issue_number": "8", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-01a218a9bc4e66c9", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"schema_or_data": 4, "ui_or_frontend": 72, "dependency_or_build": 8}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#8\nRepo: scottring/symphonyOS\nIssue/PR number: 8\nGraph consistency label: needs_more_evidence\nNodes: 30\nEdges: 56\nNode types: {'pr_file': 21, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 21, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 18, 'not_resolved_or_not_observed': 3, 'dependency_or_build': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'schema_or_data': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-2928e28e06d300ed", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466911, "scanner": "foundry_dataset", "fingerprint": "0f771ef40b10e7da0febce3e16af45c09af8a20a37a8db2a3b2537112c97f323", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"api_integration_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 11, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 9, "node_types": {"repo": 1, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#7", "issue_number": "7", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-92da382ac2a6481b", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#7\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#7\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#7\nRepo: scottring/symphonyOS\nIssue/PR number: 7\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'api_integration_gap': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-4118447d0a7c9db3", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466910, "scanner": "foundry_dataset", "fingerprint": "dc9e98b41027c2df2dc6c3305bfe5b705f5f3148047cc5288a09e91a1853602b", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"human_feedback_general": 1, "unlinked_human_feedback": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 11, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 9, "node_types": {"repo": 1, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#6", "issue_number": "6", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-aa3bd53758b962be", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#6\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#6\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#6\nRepo: scottring/symphonyOS\nIssue/PR number: 6\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ambiguous_needs_more_evidence': 3, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-2b005459dd918abe", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466909, "scanner": "foundry_dataset", "fingerprint": "b74c665879677ac4edab49dc3ee4a0d3deded1bffb47e068cd7f099553d9ecf3", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 11, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 9, "node_types": {"repo": 1, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#5", "issue_number": "5", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-8e9c8b508b852f51", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#5\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#5\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#5\nRepo: scottring/symphonyOS\nIssue/PR number: 5\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-3c87d14e078fb88d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466908, "scanner": "foundry_dataset", "fingerprint": "f97fd82002b4b3da90fdbe2092948132b52a301839caf2f52c33b57eece9b53e", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_workflow_gap": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "ambiguous_needs_more_evidence": 1, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 12, "node_types": {"repo": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#4", "issue_number": "4", "quality_tiers": {"unresolved": 4}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-ac4bede242570e79", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#4\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#4\nRepo: scottring/symphonyOS\nIssue/PR number: 4\nGraph consistency label: needs_more_evidence\nNodes: 12\nEdges: 16\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'human_feedback_general': 1, 'human_reported_issue_no_linked_fix': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-eb53df6d127e5d1d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466907, "scanner": "foundry_dataset", "fingerprint": "ace62450ed0816b9b9fde1d1e88a7579c27d0964a5f0b6608e958f3bef82d871", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"api_integration_gap": 2, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "ambiguous_needs_more_evidence": 1, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 21, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#3", "issue_number": "3", "quality_tiers": {"unresolved": 5}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-bb3556611b0641d1", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#3\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#3\nRepo: scottring/symphonyOS\nIssue/PR number: 3\nGraph consistency label: needs_more_evidence\nNodes: 15\nEdges: 21\nNode types: {'link_quality': 5, 'comment': 3, 'comment_chain': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'api_integration_gap': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-f1148fb5a6a410dc", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466906, "scanner": "foundry_dataset", "fingerprint": "33c402f4c2f51f7ac74de03dc0e13c82384cde9445361008baffb67ddfbb89e9", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 4, "agent_instruction_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 23, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 4, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 1, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 13, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 4, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#28", "issue_number": "28", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-de6eb0fa94aff47e", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 16}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#28\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#28\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#28\nRepo: scottring/symphonyOS\nIssue/PR number: 28\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 23\nNode types: {'pr_file': 4, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 4, 'comment_chain_touches_file': 4, 'issue_chain_touches_file': 4, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 4, 'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-03749b27d0ee769a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466905, "scanner": "foundry_dataset", "fingerprint": "a00af66c1a2545dc65126163ee8613a84cee9e852d0cd2d4160ba66efa62f47a", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 1, "ui_workflow_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#23", "issue_number": "23", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-3de186ec04249a96", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 4}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#23\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#23\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#23\nRepo: scottring/symphonyOS\nIssue/PR number: 23\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'ui_or_frontend': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-e14704e24c20bb95", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466904, "scanner": "foundry_dataset", "fingerprint": "1ad8b56ead7771102f3b756799e8269e1cf3bd2948601295754c192262771fb5", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 1, "ui_workflow_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#20", "issue_number": "20", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-33d2edfeff86baf4", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 4}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#20\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#20\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#20\nRepo: scottring/symphonyOS\nIssue/PR number: 20\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'ui_or_frontend': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-6d95c3c691b0e748", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466903, "scanner": "foundry_dataset", "fingerprint": "e1be74fddbf24aaef30e3b2bc07fe87d8036055f103da0338dfbbfe89244668c", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_workflow_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 11, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 9, "node_types": {"repo": 1, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#2", "issue_number": "2", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-f2d04ebebed1505e", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#2\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#2\nRepo: scottring/symphonyOS\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-9411f2222f8646e4", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466902, "scanner": "foundry_dataset", "fingerprint": "1cfcaa393029d4c74cb60057fb0562c1ced2a8a5f5a216a12a49718e01ee0113", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 1, "ui_workflow_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 14, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 1, "comment_chain_touches_file": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 10, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#19", "issue_number": "19", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-fb205d11958e8aeb", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 4}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#19\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#19\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#19\nRepo: scottring/symphonyOS\nIssue/PR number: 19\nGraph consistency label: needs_more_evidence\nNodes: 10\nEdges: 14\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'pr_file': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_touches_file': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'comment_chain_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'ui_or_frontend': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-b8381ed2c901f32d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466901, "scanner": "foundry_dataset", "fingerprint": "cb35f587f0b09038e203960cb00c390cc2a93e41fa86517fc917990a4a8ec8c8", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 2, "ui_workflow_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 17, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 2, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 1, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 11, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#18", "issue_number": "18", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-fc36a2b51d2fb659", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 8}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#18\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#18\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#18\nRepo: scottring/symphonyOS\nIssue/PR number: 18\nGraph consistency label: needs_more_evidence\nNodes: 11\nEdges: 17\nNode types: {'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'thread_touches_file': 2, 'comment_chain_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'ui_or_frontend': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-9da8613010a8c671", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466900, "scanner": "foundry_dataset", "fingerprint": "b9bf991424f3139edbd5bd60ba115b0e070b3b53f949e53eed1c9949fea9a1db", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 2, "ui_workflow_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 17, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 2, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 1, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 11, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#14", "issue_number": "14", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-ff6f9c10eb847b6c", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 8}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#14\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#14\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#14\nRepo: scottring/symphonyOS\nIssue/PR number: 14\nGraph consistency label: needs_more_evidence\nNodes: 11\nEdges: 17\nNode types: {'link_quality': 3, 'pr_file': 2, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'thread_touches_file': 2, 'comment_chain_touches_file': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'ui_or_frontend': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-70fedb80b265284d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466899, "scanner": "foundry_dataset", "fingerprint": "706e3dbc99b41e737d9f55185b8585c0e5a75e8e61c5b5d36d4fb3aff454852b", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"bug_fix": 4, "test_or_ci": 11, "ui_or_frontend": 12, "security_auth_secret": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"claimed_resolved_unverified": 6, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 79, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 23, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 4, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 39, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 2, "pr_file": 23, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#10", "issue_number": "10", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-0f463d8dd4f0f19b", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"test_or_ci": 55, "ui_or_frontend": 60}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: weak_supervision_needs_review\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#10\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#10\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#10\nRepo: scottring/symphonyOS\nIssue/PR number: 10\nGraph consistency label: weak_supervision_needs_review\nNodes: 39\nEdges: 79\nNode types: {'pr_file': 23, 'commit': 4, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 24, 'thread_touches_file': 23, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 12, 'test_or_ci': 11, 'bug_fix': 4, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'human_feedback_general': 1, 'human_reported_issue_then_fix_attempt': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-cb836c7a013a26df", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 466898, "scanner": "foundry_dataset", "fingerprint": "3b29b4a95f5e3009af5ffe444f67c5370159d86888b7a84a1fc2e1790c7f45ca", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"test_ci_gap": 1, "ui_workflow_gap": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "ambiguous_needs_more_evidence": 1, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 21, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#1", "issue_number": "1", "quality_tiers": {"unresolved": 5}, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-6a9240cf3489a1a9", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#1\nRepo: scottring/symphonyOS\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 15\nEdges: 21\nNode types: {'link_quality': 5, 'comment': 3, 'comment_chain': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'ui_workflow_gap': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-e8c8d102efd50905", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439270, "scanner": "foundry_dataset", "fingerprint": "29f37671e03aa74f6d41b3f84e0b4b29201ed61937caf54a3ba0d578f37e0c56", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#6", "human_labels": ["human_feedback_general"], "issue_number": "6", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-4cfa4f5349519b24", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#6\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#6\nRepo: scottring/symphonyOS\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-20989b654a8c27a3\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/6\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/6\\nTitle: docs: Add Second Brain Entity Notes spec\\nBody:\\n## Summary\\r\\n\\r\\nAdds the **Second Brain: Entity Notes** spec which enables the existing \\r\\nnotes system and connects it to Symphony entities.\\r\\n\\r\\n**Phase 1: Entity Notes** (7 tasks)\\r\\n- Enable notes feature flag\\r\\n- Entity linking UI \\r\\n- Notes sections in TaskView, ProjectView, ContactView\\r\\n- Quick note capture from entity context\\r\\n- Notes in global search\\r\\n\\r\\n**Phase 2: Structured Templates** (5 tasks)\\r\\n- Travel Itinerary template with auto-population from calendar\\r\\n- Calendar event scanner\\r\\n- Manual entry for gaps\\r\\n\\r\\n## Spec Location\\r\\n`tasks/second-brain-entity-notes.md`\\r\\n\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-ada1352655c43dd9\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-44be9d06c135ceb2", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439269, "scanner": "foundry_dataset", "fingerprint": "85bc39639a50a04a6a6852298e481f27e936b21d1cbba1f6c7b3ebb2caf398dc", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#27", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "27", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.65, "repo_full_name": "scottring/symphonyOS", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-634faa9cc7a3a36b", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 4, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 4}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#27\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#27\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 4\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-526b1f4545bbfd44\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/27\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/27\\nTitle: fix(week): polish bundle \u2014 FAB, picker overlap, AI chat, meals click, dropdown clip\\nBody:\\n## Summary\\n\\nFive UI polish fixes after the Week-view lane layout landed:\\n\\n- **FAB visibility**: QuickCapture (+) FAB no longer disappears when a detail panel is open on desktop.\\n- **Picker overlap**: HomeHeader gains right padding so the D/W/M picker pills aren't covered by the '?' help button.\\n- **AI chat trigger**: New Sparkles button next to the help '?' to toggle the chat panel (Today + non-Today).\\n- **Meal cards clickable**: WeekSummaryRow cards (Family dinner / Groceries / Prep ahead) navigate to /meals.\\n- **Dropdown clip**: ActionableActions more-menu opens upward to avoid being clipped at the panel bottom.\\n\\nDeferred: virtual-meeting detection in detail pane \u2014 needs an edge-function change to surface Google Meet hangoutLink. Issue tracked separately.\\n\\n## Test plan\\n\\n- [x] 73 tests pass (week folder)\\n- [x] TypeScript clean\\n- [x] Build clean\\n- [ ] Manual verify on prod\\n\\n\ud83e\udd16 Generated with [Claude Code](https://c\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-3d484aaa0e20519c\",\n    \"filename\": \"src/components/detail/ActionableActions.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 1,\n    \"deletions\": 1,\n    \"changes\": 2,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/2881b16b40ee715eff8f1dd050cc3b67191a850f/src%2Fcomponents%2Fdetail%2FActionableActions.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-50f5464767418b56\",\n    \"filename\": \"src/components/home/HomeHeader.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 1,\n    \"deletions\": 1,\n    \"changes\": 2,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/2881b16b40ee715\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-16579b1f822e2940", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439268, "scanner": "foundry_dataset", "fingerprint": "4a1f4aeae95af5a90a77683c3216fa50afe6bf603cc20b5c37895885b8b83373", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#25", "human_labels": ["test_ci_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "25", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.65, "repo_full_name": "scottring/symphonyOS", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-5f89e990eb5d1f61", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 5, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 2, "ui_or_frontend": 3}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#25\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#25\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 5\nLabels: {'test_ci_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'test_or_ci': 2, 'ui_or_frontend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-7ff9c0b5e5d3a4e1\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/25\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/25\\nTitle: feat(week): side-by-side lanes for overlapping items\\nBody:\\n## Summary\\n\\nImplements [spec](https://github.com/scottring/symphonyOS/blob/main/docs/superpowers/specs/2026-05-21-week-overlap-lanes.md) for side-by-side lane layout on the Week + Workweek views. Previously, two timed items at the same time on the same day occupied identical rectangles \u2014 one fully obscured the other. Most visibly hit two routines sharing a `time_of_day` (both default to 30-min duration with no `endTime`).\\n\\nThe fix is a new pure layout function `layoutWeekLanes(items, weekStart, dayCount)` that:\\n1. Buckets items by day in the visible range.\\n2. Sorts each day by `(startMin asc, endMin desc)`.\\n3. Sweeps to form overlap clusters.\\n4. Assigns each item to the lowest-index lane whose previous occupant has already ended.\\n\\n`WeekEventBlock` consumes the resulting `PlacedItem` and uses `laneIdx` / `laneCount` to compute `left` and `width`, with a 2px intra-lane gap. `WeekViewMobile` is unchanged (it uses a per-day bucketed list with no positi\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-6b1dee64d5fdc64f\",\n    \"filename\": \"src/components/home/week/WeekEventBlock.test.tsx\",\n    \"label\": \"test_or_ci\",\n    \"status\": \"modified\",\n    \"additions\": 32,\n    \"deletions\": 4,\n    \"changes\": 36,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/b46e0ed4c0b76e848ea9e77cee7e5c959bb8550b/src%2Fcomponents%2Fhome%2Fweek%2FWeekEventBlock.test.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-12280dd291a4cb87\",\n    \"filename\": \"src/components/home/week/WeekEventBlock.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 43,\n    \"deletions\": 28,\n    \"changes\": 71,\n    \"blob_url\": \"https:\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-89c66161cdf65af6", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439267, "scanner": "foundry_dataset", "fingerprint": "b0cc5386edc8ef6f5c79f4f6aae26f80121054e35b75f65705563269af7a2371", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#22", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "22", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.7, "repo_full_name": "scottring/symphonyOS", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-418aa75e26446b8a", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#22\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#22\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d6f9c77cedd0ee86\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/22\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/22\\nTitle: fix(mobile): unicode arrow glyphs for date\\nBody:\\nReplaces SVG chevrons with Unicode \u2039 and \u203a text characters. Avoids any SVG rendering inconsistency on mobile Safari.\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-354c963fcdee0108\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 24,\n    \"deletions\": 32,\n    \"changes\": 56,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/6733ce5a218f5e8f35851adad50358b9693f8028/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-0c129d1827890f7c\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-1f00304dee61f997", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439266, "scanner": "foundry_dataset", "fingerprint": "6469529b451682553391cf20ab3e58a12e5f113ce58527fe8053e9428634f906", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#21", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "21", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.59, "repo_full_name": "scottring/symphonyOS", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-c83ef8b5a31e3487", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#21\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#21\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-3adaedb5e0eff993\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/21\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/21\\nTitle: fix(mobile): inline SVG arrows for header date\\nBody:\\nLucide ChevronLeft/Right were rendering inconsistently on mobile Safari. Swap to inline SVG arrows matching the existing search/sign-out icon style (fill=currentColor, viewBox 0 0 20 20, p-2 rounded-xl).\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-4b8c9dcd78bc575d\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 9,\n    \"deletions\": 5,\n    \"changes\": 14,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/482ebd314d18c55f1b61bb0187da161b45fb77a0/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-13d4354dd1dca87c\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-1cb10ac5981a83e4", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439265, "scanner": "foundry_dataset", "fingerprint": "37ea4db03f27b501bbe7df9b5dbd9ccb252dc8007d877611bf30ebd5748214e3", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#17", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "17", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.59, "repo_full_name": "scottring/symphonyOS", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-c0e4b6637c9be9a3", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#17\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#17\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-54150e0af80d6ca5\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/17\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/17\\nTitle: fix(mobile): always render date arrows\\nBody:\\nRender the prev/next arrows alongside the mobile header date unconditionally; darken + enlarge them so they're clearly visible.\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-9a9183efaa87639f\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 21,\n    \"deletions\": 23,\n    \"changes\": 44,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/9d37a492bbce040562531f80f9b0e4afa9b84040/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-3ef5b58a09d70106\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-fa8e65bc5505be8c", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439264, "scanner": "foundry_dataset", "fingerprint": "3dfddb9d54f0e28f911e6b724dfad1da2aa0cb3dcf174d39e2696e2bcad6ee51", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#16", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "16", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.625, "repo_full_name": "scottring/symphonyOS", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-bbaca1c1bf22ff1b", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#16\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#16\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-a5a609887afa6762\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/16\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/16\\nTitle: fix(mobile): make app-header date visible\\nBody:\\nBumps the inlined mobile date to text-lg font-semibold so it can't be missed, drops the activeView gate, and keeps the arrows conditional on onDateChange (date alone still renders if handler is missing).\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-9a4d148baf3bb9cf\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 25,\n    \"deletions\": 21,\n    \"changes\": 46,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/64eeacc1d3c199e2d8a60639aad6370d5e049c6e/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-91292426018bbbe4\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-551340740ce2a3c8", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439263, "scanner": "foundry_dataset", "fingerprint": "9ca556e719d0bb89afac874dcca7d79a3620669143939a89de8a2d8f4ba4f5ae", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#15", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "15", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.59, "repo_full_name": "scottring/symphonyOS", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-583a1d24aad94b0d", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 3, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 3}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#15\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#15\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-4eb886cb85e29757\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/15\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/15\\nTitle: feat(mobile): compact header \u2014 tree logo + inline date + icons\\nBody:\\nReplaces the Symphony word logo with the tree, moves search/help/sign-out to the right, and inlines a compact date + arrows in the center of the app header. Hides the now-redundant TodayHeader and the MORNING/AFTERNOON/EVENING section labels on mobile.\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-51b2c59a383b9a3e\",\n    \"filename\": \"src/App.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 2,\n    \"deletions\": 0,\n    \"changes\": 2,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/315283c96ef60ac9ad4b857033c4eddbbf7fe3f4/src%2FApp.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-b0f8774c2feb89f9\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 48,\n    \"deletions\": 10,\n    \"changes\": 58,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/315283c96ef60ac9ad4b857033c4eddbbf7fe3f4/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-0eef8625a903452a\",\n    \"filename\": \"src/components/schedule/TodayView.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 10,\n    \"deletions\": 8,\n    \"changes\": 18,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/315283c96ef60ac9ad4b857033c4eddbbf7fe3f4/src%2Fcomponents%2Fschedule%2FTodayView.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-d5799763b32c989a\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\":\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-5cfc0494179c6912", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: scottring/symphonyOS"}, "properties": {"repobilityId": 439262, "scanner": "foundry_dataset", "fingerprint": "cde28690a10d64bddb3ed9c4f83602c7de9681ee71babce418d28381802d752b", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "scottring/symphonyOS#10", "human_labels": ["human_feedback_general", "security_auth_secret", "test_or_ci", "ui_or_frontend"], "issue_number": "10", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.59, "repo_full_name": "scottring/symphonyOS", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-b0c5d65ef368d5b2", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 23, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 11, "ui_or_frontend": 12}, "linked_commit_count": 4, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_weak_supervision", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: assumption_checks\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#10\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#10\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 4\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 23\nLabels: {'security_auth_secret': 1, 'human_feedback_general': 1}\nPolarities: {'bad': 1, 'neutral': 1}\nChanged file labels: {'ui_or_frontend': 12, 'test_or_ci': 11}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-74db9dc67a625c92\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/10\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/10\\nTitle: Today redesign \u2014 Layer 1 (chrome & layout)\\nBody:\\n## Summary\\n\\nLayer 1 of the Today-view redesign (matches the approved Image 1 mockup; Image 2 / This Week triage deferred to its own spec). Pure visual + presentational over existing data \u2014 no data-model, routing, or network changes.\\n\\n- **Sidebar:** time-of-day greeting + `<Sun/>`, house illustration + tagline, flat Meals/Family/Home quick-nav (existing routes only \u2014 This Week/Calendar deferred, no dead links)\\n- **Task cards:** lucide category tiles (emoji removed), \\\"Today\\\" pill, note glyph, assignee initials badge\\n- **Section headers:** lucide icon + time range (Morning 6:00 AM \u2013 12:00 PM \u2026)\\n- **Today header:** editorial StatsRow (due today \u00b7 this week \u00b7 total \u00b7 Clarity \u00b7 AI) + Today's Focus card with clarity-keyed templated headline\\n- **5 tested pure helpers:** greetingForHour, categoryIcon, initialsFor, daySectionMeta, focusHeadline\\n\\nBuilt TDD via subagent-driven development; each task passed spec + code-quality review plus a final holistic branch\"\n  },\n  {\n    \"id\": \"github-feedback-comment-8faee1a1612d2499\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/10#issuecomment-4490478862\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: issue_comment\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/10#issuecomment-4490478862\\nTitle: \\nBody:\\nSuperseded. The additive Layer 1 approach in this PR was abandoned in favor of a cohesive shell-first rebuild + a parity remediation,\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-assumption_checks-e011bd66451700be", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 460291, "scanner": "foundry_dataset", "fingerprint": "b75c96657fb66f69f9e7cc93fdfe3004d68d79f722f5938ad2e50e92b71597a9", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"bug_fix": 2, "test_or_ci": 6, "test_ci_gap": 1, "docs_or_claims": 4, "schema_or_data": 5, "ui_or_frontend": 18, "source_or_other": 1, "verification_or_tests": 3, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 74, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 34, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 48, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 34, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#9", "issue_number": "9", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-b6a5f7b595c981bf", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"test_or_ci": 24, "docs_or_claims": 16, "schema_or_data": 20, "ui_or_frontend": 72, "source_or_other": 4}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_verification_signal\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#9\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#9\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#9\nRepo: scottring/symphonyOS\nIssue/PR number: 9\nGraph consistency label: supported_by_verification_signal\nNodes: 48\nEdges: 74\nNode types: {'pr_file': 34, 'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 34, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 5, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 18, 'test_or_ci': 6, 'schema_or_data': 5, 'docs_or_claims': 4, 'verification_or_tests': 3, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'source_or_other': 1, 'human_reported_issue_then_verified_fix_attempt': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-c2356d8bacc7548e", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 460290, "scanner": "foundry_dataset", "fingerprint": "53fe421217de7b14cd2dd9ab21aae70fa6220a1a3a01b978226119fdb9798037", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_or_ci": 2, "test_ci_gap": 1, "ui_or_frontend": 3, "verification_or_tests": 5, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 31, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 5, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 5, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 5, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 19, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 5, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#25", "issue_number": "25", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-2f6d816bdd8a616c", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"test_or_ci": 8, "ui_or_frontend": 12}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#25\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#25\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#25\nRepo: scottring/symphonyOS\nIssue/PR number: 25\nGraph consistency label: weak_supervision_needs_review\nNodes: 19\nEdges: 31\nNode types: {'pr_file': 5, 'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 5, 'comment_chain_links_commit': 5, 'comment_chain_touches_file': 5, 'issue_chain_touches_file': 5, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'verification_or_tests': 5, 'ui_or_frontend': 3, 'ambiguous_needs_more_evidence': 3, 'test_or_ci': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'comment_has_related_commit_context': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-5414a784fe02c64b", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 460289, "scanner": "foundry_dataset", "fingerprint": "44a9805036e89a83dd9a51afb36a18bebe64c83d39955f92e208ca693d6c8b70", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"bug_fix": 1, "test_or_ci": 1, "test_ci_gap": 1, "ui_or_frontend": 3, "verification_or_tests": 4, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 28, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 4, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 4, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 18, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 4, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#24", "issue_number": "24", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-86fbd2265d74d525", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"test_or_ci": 4, "ui_or_frontend": 12}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: supported_by_verification_signal\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#24\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#24\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#24\nRepo: scottring/symphonyOS\nIssue/PR number: 24\nGraph consistency label: supported_by_verification_signal\nNodes: 18\nEdges: 28\nNode types: {'commit': 5, 'pr_file': 4, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'thread_touches_file': 4, 'comment_chain_touches_file': 4, 'issue_chain_touches_file': 4, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'verification_or_tests': 4, 'ui_or_frontend': 3, 'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'test_or_ci': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'bug_fix': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-e936254464538559", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: scottring/symphonyOS"}, "properties": {"repobilityId": 460288, "scanner": "foundry_dataset", "fingerprint": "7f67a52d753b251b6432b9856f526582e9281e4ceffbb5689d2a408b27c5e736", "category": "testing", "severity": "high", "confidence": 0.78, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Feedback exposes missing tests or CI", "intent": "Hard negatives for feedback/fix chains without adequate guardrails.", "labels": {"test_ci_gap": 1, "ui_workflow_gap": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "ambiguous_needs_more_evidence": 1, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"not_resolved_or_not_observed": 8, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 21, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 3, "thread_has_comment": 3, "chain_has_link_quality": 5, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 3}, "node_count": 15, "node_types": {"repo": 1, "thread": 1, "comment": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 3}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#1", "issue_number": "1", "quality_tiers": {"unresolved": 5}, "repo_full_name": "scottring/symphonyOS", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-a70df3699b1d078f", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Feedback exposes missing tests or CI\nQuery id: test_ci_gap_after_feedback\nQuery type: motif_query\nIntent: Hard negatives for feedback/fix chains without adequate guardrails.\nMotif: test_ci_gap_after_feedback\nTraining usage: hard_negative\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#1\nEvidence:\nGraph motif: Feedback or fix context exposes missing test/CI guardrails\nMotif id: test_ci_gap_after_feedback\nPolarity: bad\nTraining usage: hard_negative\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#1\nRepo: scottring/symphonyOS\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 15\nEdges: 21\nNode types: {'link_quality': 5, 'comment': 3, 'comment_chain': 3, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 5, 'thread_has_comment': 3, 'thread_has_comment_chain': 3, 'comment_has_chain': 3, 'issue_chain_has_comment_chain': 3, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'ui_workflow_gap': 1, 'human_feedback_general': 1, 'unlinked_human_feedback': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'not_resolved_or_not_observed': 8, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'unresolved': 5}\nCI labels: {}\nCurriculum targets:\n- Turn human feedback into regression tests and CI gates.\n- Penalize fixes that do not add or exercise verification for affected workflows.\nAssumption checks:\n- Did the fix add tests for the exact complaint?\n- Does CI run those tests, or is verification only implied?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-2e9b60e9a4f6d5ae", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/test_ci_gap_after_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/test_ci_gap_after_feedback", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: scottring/symphonyOS"}, "properties": {"repobilityId": 453834, "scanner": "foundry_dataset", "fingerprint": "e495b89d543fa6e20cd2b28c3ae012d165c55e35c232e37de1dcd19798f13721", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"schema_or_data": 1, "ui_or_frontend": 18, "ui_workflow_gap": 1, "dependency_or_build": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 56, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 21, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 30, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 21, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#8", "issue_number": "8", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-24088e7838ab11cf", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"schema_or_data": 4, "ui_or_frontend": 72, "dependency_or_build": 8}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#8\nRepo: scottring/symphonyOS\nIssue/PR number: 8\nGraph consistency label: needs_more_evidence\nNodes: 30\nEdges: 56\nNode types: {'pr_file': 21, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 21, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 18, 'not_resolved_or_not_observed': 3, 'dependency_or_build': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'schema_or_data': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-ef690eeb4a4fb474", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: scottring/symphonyOS"}, "properties": {"repobilityId": 453833, "scanner": "foundry_dataset", "fingerprint": "f02dad877257c5cbf39fd4ee6d06e427646f7df072db19dd25fb83abff4bf1cf", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 3, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"not_resolved_or_not_observed": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 11, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 9, "node_types": {"repo": 1, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#5", "issue_number": "5", "quality_tiers": {"unresolved": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-44e2c8d370c86449", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#5\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#5\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#5\nRepo: scottring/symphonyOS\nIssue/PR number: 5\nGraph consistency label: needs_more_evidence\nNodes: 9\nEdges: 11\nNode types: {'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'not_resolved_or_not_observed': 3, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_no_linked_fix': 1}\nOutcomes: {'not_resolved_or_not_observed': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-e30bb0ca1ce0dc39", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: scottring/symphonyOS"}, "properties": {"repobilityId": 453832, "scanner": "foundry_dataset", "fingerprint": "7ddb88719c07a9f2cffc08d7e02ac7d5ac318efcdd434735461b6a5d6b23c3ed", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 1, "data_schema": 1, "schema_or_data": 2, "ui_or_frontend": 3, "verification_or_tests": 3, "data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 31, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 5, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 5, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "comment_chain_touches_file": 5, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 19, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "pr_file": 5, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#29", "issue_number": "29", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-a332695098b21747", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"schema_or_data": 8, "ui_or_frontend": 12}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#29\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#29\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#29\nRepo: scottring/symphonyOS\nIssue/PR number: 29\nGraph consistency label: supported_by_verification_signal\nNodes: 19\nEdges: 31\nNode types: {'pr_file': 5, 'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 5, 'comment_chain_links_commit': 5, 'comment_chain_touches_file': 5, 'issue_chain_touches_file': 5, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 3, 'verification_or_tests': 3, 'claimed_resolved_with_verification_signal': 3, 'schema_or_data': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1, 'bug_fix': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-23cff79a65a73f1a", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: scottring/symphonyOS"}, "properties": {"repobilityId": 453831, "scanner": "foundry_dataset", "fingerprint": "8dd8d4dbac2cb22b16c4875695e8cc9eafd219d85fbf5e3412f546bbd07eaf34", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"bug_fix": 2, "data_schema": 1, "verification_or_tests": 2, "data_schema_persistence": 1, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "claimed_resolved_with_verification_signal": 3, "human_reported_issue_then_verified_fix_attempt": 1}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 16, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "thread_has_comment_chain": 1, "comment_chain_links_commit": 5, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 14, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "scottring/symphonyOS#12", "issue_number": "12", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "scottring/symphonyOS", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-fcb10b4b040c86e4", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: supported_by_verification_signal\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#12\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#12\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: scottring/symphonyOS#12\nRepo: scottring/symphonyOS\nIssue/PR number: 12\nGraph consistency label: supported_by_verification_signal\nNodes: 14\nEdges: 16\nNode types: {'commit': 5, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 5, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_with_verification_signal': 3, 'verification_or_tests': 2, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'data_schema': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6}\nQuality tiers: {'weak_supervision': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "graph-query-motif_query-c3ff38868514ad67", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444720, "scanner": "foundry_dataset", "fingerprint": "3b0321502efd4d8c8dd9035f94c6691b788b926dd28aaff6ea1ab980d4d20ad2", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#8", "human_labels": ["dependency_or_build", "schema_or_data", "ui_or_frontend", "ui_workflow_gap"], "issue_number": "8", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-541d40ebd070e53b", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 21, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"schema_or_data": 1, "ui_or_frontend": 18, "dependency_or_build": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#8\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#8\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 21\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'dependency_or_build': 2, 'ui_or_frontend': 18, 'schema_or_data': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-50e970498c93bc85\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/8\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/8\\nTitle: feat: enhance scheduling and mobile experience with improved defer/schedule UI\\nBody:\\n## Summary\\n- Enhanced defer and schedule dropdowns with icon-based 2-column grid layout\\n- Added \\\"In 3 hours\\\" and \\\"This evening\\\" defer options with time-aware filtering\\n- Improved mobile layout and touch interactions\\n- Added full-screen notes editor modal to DetailPanelRedesign\\n- Integrated Tiptap rich text editor for notes functionality\\n\\n## Key Changes\\n- **DeferPicker & SchedulePopover**: Replaced emojis with Lucide icons, implemented 2-column grid layout for better visual organization\\n- **Time-based deferrals**: Added `getHoursFromNow()` and `getThisEvening()` helpers that round to 30-minute intervals\\n- **Smart filtering**: Fixed inbox task filtering to compare full date+time instead of just dates, properly handling same-day deferrals\\n- **Event propagation**: Added `createPortal` to DeferPicker with proper event stopping to prevent click bubbling\\n\\n## Test Plan\\n- \u2705 Defer tasks \\\"In 3 hours\\\" - items disappear and reappear\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-1439b4f6112d5c02\",\n    \"filename\": \"package-lock.json\",\n    \"label\": \"dependency_or_build\",\n    \"status\": \"modified\",\n    \"additions\": 886,\n    \"deletions\": 5,\n    \"changes\": 891,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/dfc712875d34ffa3cb0f4a3b7550e4b2d6c34b9c/package-lock.json\"\n  },\n  {\n    \"id\": \"github-pr-file-file-a228aac9e3aedce0\",\n    \"filename\": \"package.json\",\n    \"label\": \"dependency_or_build\",\n    \"status\": \"modified\",\n    \"additions\": 9,\n    \"deletions\": 0,\n    \"changes\": 9,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/dfc712875d34ffa3cb0f4a3b7550e4b2d6c34b9c/\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-1c8132b9d3aa69a8", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444719, "scanner": "foundry_dataset", "fingerprint": "8f8738a1e0fa7dadb5998cc06c4ba5737ac75475eeb2e269e5798a0cf19a30ca", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#7", "human_labels": ["api_integration_gap"], "issue_number": "7", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-d87f01e9cf78e5d2", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#7\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#7\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'api_integration_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-0b163518199860ea\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/7\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/7\\nTitle: feat: implement Second Brain Entity Notes (Phase 1)\\nBody:\\n## Summary\\n\\n- **Enable notes feature**: Notes section now visible in sidebar navigation\\n- **Entity linking in NoteDetail**: Users can link notes to tasks, projects, and contacts with a visual picker, see linked entities with icons, and remove links\\n- **Notes sections on entity views**: TaskView, ProjectView, and ContactView now display linked notes and allow inline note creation\\n- **Global search integration**: Notes are searchable by content, title, and topic name; results display with emerald icon\\n\\n## New Components\\n\\n| Component | Purpose |\\n|-----------|---------|\\n| `EntityLinkPicker` | Tabbed picker for selecting entities (All/Tasks/Projects/Contacts) to link from notes |\\n| `EntityNoteCapture` | Inline note creation with Cmd/Ctrl+Enter to save, Escape to cancel |\\n| `EntityNotesSection` | Reusable section displaying linked notes with add capability |\\n\\n## Files Changed\\n\\n- `src/components/layout/Sidebar.tsx` - Enable feature flag\\n- `src/compo\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-8cf1f28f01286605\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\":\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-be7150935d2c2ccb", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444718, "scanner": "foundry_dataset", "fingerprint": "685e05d523d6c16a353d9d1a5adb7944434e6d9056c5edfd74d47e938f9572ef", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#5", "human_labels": ["data_schema_persistence"], "issue_number": "5", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-9a8bb824e0ba837f", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#5\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#5\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'data_schema_persistence': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-74ba27ab96e2766e\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/5\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/5\\nTitle: Fix project detail page status issues\\nBody:\\nThe database only allowed 'not_started', 'active', 'completed' but the frontend uses 'in_progress' and 'on_hold'. This was causing 400 errors when trying to update project status.\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-8967b1e238c551ab\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-0122087350862e86", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444717, "scanner": "foundry_dataset", "fingerprint": "77e78518f196602750a75d0c0e62c00bab2776db77e04531586f4e1012b298ab", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#4", "human_labels": ["human_feedback_general", "ui_workflow_gap"], "issue_number": "4", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-78a7e22ff34968c3", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#4\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#4\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'ui_workflow_gap': 1, 'human_feedback_general': 1}\nPolarities: {'bad': 1, 'neutral': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-75a1d8271efbf921\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/4\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/4\\nTitle: Fix project detail page status issues\\nBody:\\n\u2026l control\"\n  },\n  {\n    \"id\": \"github-feedback-comment-eb891da1826a4252\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/4#issuecomment-3647971229\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: issue_comment\\nRepo: scottring/symphonyOS\\nAuthor: cursor[bot] (Bot)\\nURL: https://github.com/scottring/symphonyOS/pull/4#issuecomment-3647971229\\nTitle: \\nBody:\\nYou have run out of free Bugbot PR reviews for this billing cycle. This will reset on January 22.\\n\\nTo receive reviews on all of your PRs, visit the [Cursor dashboard](https://www.cursor.com/dashboard?tab=bugbot) to activate Pro and start your 14-day free trial.\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-f70ed78a37942f2b\", \"evidence-chain-comment_to_commit-511fb9b5774e75b5\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\":\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-1541deb9e8b8a8f7", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444716, "scanner": "foundry_dataset", "fingerprint": "ac263dbc45850a9c9871272f3e0a2de1b6260128089fffa20ea5a55769cf18b1", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#3", "human_labels": ["api_integration_gap", "human_feedback_general"], "issue_number": "3", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-14043f61021bbffb", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#3\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#3\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'api_integration_gap': 2, 'human_feedback_general': 1}\nPolarities: {'bad': 2, 'neutral': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-67ba2709c286fe66\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/3\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/3\\nTitle: fix: allow manual project status changes and display linked calendar \u2026\\nBody:\\n\u2026events\\r\\n\\r\\n- Fix project status auto-update overriding manual changes by tracking previous calculated status and only auto-updating when task completion changes (not when user manually selects a status)\\r\\n- Add getEventNotesForProject function to fetch events linked to a project\\r\\n- Add Linked Events section in project view sidebar to display calendar events associated with the project\\r\\n- Pass linked events from App.tsx to ProjectViewRedesign component\\n\\n<!-- CURSOR_SUMMARY -->\\n---\\n\\n> [!NOTE]\\n> Displays project-linked calendar events and updates status logic to avoid overriding manual selections.\\n> \\n> - **Project View**\\n>   - Adds a \\\"Linked Events\\\" section in `ProjectViewRedesign` to list associated calendar events.\\n>   - `ProjectViewRedesign` accepts `linkedEvents` prop for rendering.\\n> - **Data/State**\\n>   - Introduces `useEventNotes.getEventNotesForProject` to fetch event notes by `project_id` and update cache.\\n>   - In `Ap\"\n  },\n  {\n    \"id\": \"github-feedback-comment-a608e09fae6b11a0\",\n    \"kind\": \"review_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/3#discussion_r2615422879\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: review_comment\\nRepo: scottring/symphonyOS\\nAuthor: cursor[bot] (Bot)\\nURL: https://github.com/scottring/symphonyOS/pull/3#discussion_r2615422879\\nTitle: \\nBody:\\n### Bug: Missing cleanup causes race condition in linked events fetch\\n\\n<!-- **Medium Severity** -->\\n\\n<!-- DESCRIPTION START -->\\nThe `useEffect` for fetching linked events doesn't\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-510b307745d40d9a", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444715, "scanner": "foundry_dataset", "fingerprint": "b270e83d96eeab06e212091bc57463914437d5cd6ddf221e8ecc3d7264baa841", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#28", "human_labels": ["agent_instruction_gap", "ui_or_frontend"], "issue_number": "28", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-b32ecdcaab6c0035", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 4, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 4}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#28\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#28\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 4\nLabels: {'agent_instruction_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6261a5d617d86ee5\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/28\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/28\\nTitle: fix(home): sidebar highlight + AI/help buttons aligned with picker\\nBody:\\n## Summary\\n\\nTwo UI bugs on home routes:\\n\\n1. **Sidebar highlight wrong on Week view**: \\\\`Today\\\\` highlighted instead of \\\\`This Week\\\\`. Now reads \\\\`useHomeView.currentView\\\\` to follow the actual visible D/W/M view.\\n2. **AI + help buttons overlap D/W/M picker**: Refactored via a new \\\\`AppShellChromeContext\\\\` so both buttons render inside \\\\`HomeHeader\\\\`'s right flex group on home routes \u2014 naturally vertically aligned with the picker. Non-home routes still get the absolute buttons from AppShell.\\n\\n## Test plan\\n- [x] 118 tests pass (home + layout suites)\\n- [x] TypeScript clean\\n- [x] Build clean\\n- [ ] Manual verify on prod\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-7a3de0e75ab2650e\",\n    \"filename\": \"src/components/home/HomeHeader.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 22,\n    \"deletions\": 2,\n    \"changes\": 24,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/524a678847064d7d0cbb62e7aaf31e48a3b03672/src%2Fcomponents%2Fhome%2FHomeHeader.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-7f7385f85097c08e\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 15,\n    \"deletions\": 26,\n    \"changes\": 41,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/524a678847064d7d0cbb62e7aaf31e48a3b03672/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-f2af340f961392af\",\n    \"filename\": \"src/components/layout/Sidebar.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 4,\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-d25e05db5984674a", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444714, "scanner": "foundry_dataset", "fingerprint": "bf8023d73a36a0e04f29f2bf392a4eb64290558f3f36f554259c12cde3a845a3", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#23", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "23", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-0efa7a3ed5e73fc3", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#23\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#23\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5c01a718004922c6\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/23\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/23\\nTitle: fix(mobile): use ASCII < > arrows for date\\nBody:\\nPlain ASCII characters in monospace font. Guaranteed render in any font/platform.\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-36ef76ce58a9b64c\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 6,\n    \"deletions\": 4,\n    \"changes\": 10,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/46389a511db160c8de328c4ee35323a774f94c3f/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-4eefabf48fef8626\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-4176c403c118b980", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444713, "scanner": "foundry_dataset", "fingerprint": "52864f1bb68dce71e823d8cfb926fba80490b5d6e942efa7f166f6213d7b0e16", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#20", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "20", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-0cdbc39567d0e3e6", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#20\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#20\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-c0ef86edf04fe22d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/20\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/20\\nTitle: fix(mobile): drop help button from mobile header\\nBody:\\nRemoves the help (?) button from the mobile header so the search + sign-out icons + date arrows all fit comfortably.\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-88244ea244a266c6\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 0,\n    \"deletions\": 8,\n    \"changes\": 8,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/b9486ea838d2912ed415a11a73093f20b581e07d/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-6c63d5e61ff2dc29\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-a0ce9fc858887c3c", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444712, "scanner": "foundry_dataset", "fingerprint": "7a0553cadd3c07c03ec6d1eaa41a406d8cc3b3cf7dcf576c15e4bc1ae55458f6", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#2", "human_labels": ["ui_workflow_gap"], "issue_number": "2", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-8b87e5defd52f7f8", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#2\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#2\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-4daec94a0ea5471b\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/2\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/2\\nTitle: Remove number badge from toggle\\nBody:\\nRemove the inbox count badge from the HomeViewSwitcher Day button. This simplifies the UI by removing the badge and the related inboxCount prop and computation logic.\\n\\n<!-- CURSOR_SUMMARY -->\\n---\\n\\n> [!NOTE]\\n> Remove the Day toggle inbox badge and all associated props, logic, and styling from HomeView and HomeViewSwitcher.\\n> \\n> - **UI**\\n>   - **`HomeViewSwitcher`**: Remove badge support and `inboxCount` prop; delete badge rendering and related styles; keep segmented control for Day/Week.\\n>   - **`HomeView`**: Remove `useBadgeVisibility` and `inboxCount` computation; stop passing `inboxCount` to `HomeViewSwitcher`.\\n> - **Behavior**\\n>   - Day toggle no longer displays an inbox count badge; assignee filter remains unchanged.\\n> \\n> <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit f25d537b67fdb43530f25d2dff7a76ca283bfcf1. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup>\\n<!-- /\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-4d5586ebd2b47125\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bu\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-29c4122b99513440", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444711, "scanner": "foundry_dataset", "fingerprint": "9cfd5dd5de0ad2a48202c8158f886035535962ce7b158dbd9df893f1aad998cf", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#19", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "19", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-8861160cfe612d9f", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#19\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#19\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-4155c0cb77233218\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/19\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/19\\nTitle: fix(mobile): make date arrows unmistakable\\nBody:\\nWraps the prev/next chevrons in a 32px pill (bg-neutral-100, rounded-full) with strokeWidth 2.5 so they are clearly visible against the cream background.\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-748a40ed78dc159f\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 5,\n    \"deletions\": 5,\n    \"changes\": 10,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/820fa994c6b768365a0138d5395b7eb62f716152/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-01da2fa64dd10216\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"ci\": 1, \"designs\": 1, \"docs\": 1}\nHelicopter views: {\"graphs\": 2, \"schemas\": 2}\nBundle labels: {\"source_backed_architecture_schema_bundle\": 1}\nCo-occurrence labels: {\"mixed_good_bad_repo_profile\": 1}", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-41609bda7540c23c", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444710, "scanner": "foundry_dataset", "fingerprint": "e18218aa75d66b1a1bf5d4ddcf0fca80b541c6bddf4aa1713425099752aa685d", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#18", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "18", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-4e307e81edc4fef3", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#18\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#18\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-477564ea6fc31d6d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/18\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/18\\nTitle: fix(mobile): transparent header + tighter add-row spacing\\nBody:\\nHeader bg-transparent (drops the elevated card fill + border); shrinks top/bottom container padding and the add-to-today row spacing.\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-b4e8541b2c22a445\",\n    \"filename\": \"src/components/layout/AppShell.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 22,\n    \"deletions\": 24,\n    \"changes\": 46,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/2e850e1e6794b97d1864d81579ec1e9d62020dbb/src%2Fcomponents%2Flayout%2FAppShell.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-a460f35b4e434a19\",\n    \"filename\": \"src/components/schedule/TodayView.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 2,\n    \"deletions\": 2,\n    \"changes\": 4,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/2e850e1e6794b97d1864d81579ec1e9d62020dbb/src%2Fcomponents%2Fschedule%2FTodayView.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-b094fb930e98b55f\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\": 1, \"source_bundle_uses_cooccurrence_profile\": 1}\nArtifact families: {\"c\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-84b2d2bf1c68575a", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444709, "scanner": "foundry_dataset", "fingerprint": "0c24f8ea0a6b83b5d18d15a1f1bc0f92e300760812702565a6fa9f1f4144e177", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#14", "human_labels": ["ui_or_frontend", "ui_workflow_gap"], "issue_number": "14", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-6ea81b13ca61754d", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 2}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#14\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#14\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'ui_workflow_gap': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'ui_or_frontend': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-157ccd0019154ef3\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/14\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/14\\nTitle: feat(mobile): edge-to-edge schedule cards\\nBody:\\nDrops the 24px mobile page gutter so task/event cards span the full viewport. Section labels, date header, and the add-to-today row keep a 12px inset.\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-8481504ef4ae32b3\",\n    \"filename\": \"src/components/schedule/TodayHeader.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 1,\n    \"deletions\": 1,\n    \"changes\": 2,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/8cf25d82d12632887bd3bb56c41c983b5cb567de/src%2Fcomponents%2Fschedule%2FTodayHeader.tsx\"\n  },\n  {\n    \"id\": \"github-pr-file-file-e720808669734361\",\n    \"filename\": \"src/components/schedule/TodayView.tsx\",\n    \"label\": \"ui_or_frontend\",\n    \"status\": \"modified\",\n    \"additions\": 3,\n    \"deletions\": 3,\n    \"changes\": 6,\n    \"blob_url\": \"https://github.com/scottring/symphonyOS/blob/8cf25d82d12632887bd3bb56c41c983b5cb567de/src%2Fcomponents%2Fschedule%2FTodayView.tsx\"\n  }\n]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-c8a55f49628d3702\"]\nSource graph evidence:\nSource evidence repo graph summary\nRepo: scottring/symphonyOS\nGraph label: source_backed_multi_signal_graph\nNodes: 11\nEdges: 14\nNode types: {\"cooccurrence_profile\": 1, \"github_repo_summary\": 1, \"helicopter_repo_view\": 4, \"repo\": 1, \"source_artifact\": 3, \"source_bundle\": 1}\nEdge types: {\"artifact_needs_claim_verification\": 1, \"artifact_supports_design_schema_api\": 1, \"artifact_supports_verification\": 1, \"repo_has_cooccurrence_profile\": 1, \"repo_has_github_evidence_summary\": 1, \"repo_has_graphs_helicopter_view\": 2, \"repo_has_schemas_helicopter_view\": 2, \"repo_has_source_artifact\": 3, \"repo_has_source_bundle\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-d368ef8943d89fe4", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: scottring/symphonyOS"}, "properties": {"repobilityId": 444708, "scanner": "foundry_dataset", "fingerprint": "d507d3c6a0389e89ca0acea611253ff7bd8283c3e523c72c0ffae10b42a69747", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "scottring/symphonyOS#1", "human_labels": ["human_feedback_general", "test_ci_gap", "ui_workflow_gap"], "issue_number": "1", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "scottring/symphonyOS", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-d6161a428a4014e0", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 0, "helicopter_view_count": 4, "source_artifact_count": 3, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: scottring/symphonyOS\nThread: scottring/symphonyOS#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: scottring/symphonyOS#1\nRepo: scottring/symphonyOS\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 3\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'test_ci_gap': 1, 'ui_workflow_gap': 1, 'human_feedback_general': 1}\nPolarities: {'bad': 2, 'neutral': 1}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-c20f31475961aafb\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/1\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: scottring/symphonyOS\\nAuthor: scottring (User)\\nURL: https://github.com/scottring/symphonyOS/pull/1\\nTitle: Evaluate codebase health and improve test coverage\\nBody:\\nThis commit includes a full evaluation of the codebase health with:\\r\\n\\r\\nTest Coverage Improvements:\\r\\n- Add tests for useToast hook (13 tests)\\r\\n- Add tests for useUndo hook (15 tests)\\r\\n- Add tests for useOnlineStatus hook (7 tests)\\r\\n- Add tests for useSystemHealth hook (31 tests)\\r\\n- Add tests for routineFormatters lib (24 tests)\\r\\n- Add tests for actionDetection lib (38 tests)\\r\\n- Add tests for taskAge lib (38 tests)\\r\\n\\r\\nNew Utility Hooks:\\r\\n- useModal/useModalWithData: Eliminates repeated modal state patterns\\r\\n- useDebouncedCallback/useDebouncedValue: Eliminates repeated debounce logic\\r\\n\\r\\nNew Utility Functions:\\r\\n- dateUtils.ts: Centralized date string operations (toDateString, parseLocalDate, etc.)\\r\\n- Tests for all new utilities (70 additional tests)\\r\\n\\r\\nDocumentation:\\r\\n- CODEBASE_HEALTH_ASSESSMENT.md: Comprehensive assessment report including:\\r\\n  - Test coverage analysis\\r\\n  - Code quality issues identified\\r\\n  - Refactoring roadmap with priorities\\r\\n  - Esti\"\n  },\n  {\n    \"id\": \"github-feedback-comment-6a5a13ac012b6f88\",\n    \"kind\": \"review_comment\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/scottring/symphonyOS/pull/1#discussion_r2612056043\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: review_comment\\nRepo: scottring/symphonyOS\\nAuthor: cursor[bot] (Bot)\\nURL: https://github.com/scottring/symphonyOS/pull/1#discussion_r2612056043\\nTitle: \\nBody:\\n### Bug: Unstable toggle callback reference breaks memoization\\n\\n<!-- **Medium Severity** -->\\n\\n<!-- DESCRIPTION START -->\\nThe `toggle` function in `useModalWi\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/scottring/symphonyOS", "source_id": "comment-chain-pattern-bad_chains-e2e06e3106f8dc06", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "scottring/symphonyOS", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "scanner-9ec177dfb7dee65d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/vault-sync.ts:36"}, "properties": {"repobilityId": "1ba2e8c441f2e4a2", "scanner": "scanner-primary", "fingerprint": "9ec177dfb7dee65d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56dfc2fa74c44dd7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-create-event/index.ts:188"}, "properties": {"repobilityId": "44849014316ad262", "scanner": "scanner-primary", "fingerprint": "56dfc2fa74c44dd7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f0ad8886d9375207", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-events/index.ts:198"}, "properties": {"repobilityId": "2d58223ffe94ed3f", "scanner": "scanner-primary", "fingerprint": "f0ad8886d9375207", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec37c9fd8e41916d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/google-calendar-update-location/index.ts:192"}, "properties": {"repobilityId": "dbe1e6a932e19afb", "scanner": "scanner-primary", "fingerprint": "ec37c9fd8e41916d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a1bbaf34bcafb9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/action-queue/index.ts:226"}, "properties": {"repobilityId": "d274df34fd2dc02d", "scanner": "scanner-primary", "fingerprint": "2a1bbaf34bcafb9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e22abf329e96dc7a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/waitlist-signup-notify/index.ts:95"}, "properties": {"repobilityId": "7e56039ade7fadcd", "scanner": "scanner-primary", "fingerprint": "e22abf329e96dc7a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3299c96df9690fde", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/proactive-engine/index.ts:521"}, "properties": {"repobilityId": "3c0c608a9bbdda1d", "scanner": "scanner-primary", "fingerprint": "3299c96df9690fde", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b5560ff39ca13a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/gcal-location-update/index.ts:192"}, "properties": {"repobilityId": "961fd9fad907cb04", "scanner": "scanner-primary", "fingerprint": "0b5560ff39ca13a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74d333fbf9ba8a6c", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/apps/job-pipeline/components/ApplicationRow.tsx:3"}, "properties": {"repobilityId": "793b3bbc95b26f3b", "scanner": "scanner-primary", "fingerprint": "74d333fbf9ba8a6c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-19d82776c140c663", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/apps/us/UsView.tsx:79"}, "properties": {"repobilityId": "af56031c03831aec", "scanner": "scanner-primary", "fingerprint": "19d82776c140c663", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd7729b8becd4444", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/PuppyEasterEgg.tsx:113"}, "properties": {"repobilityId": "a8b3c36243d5ff87", "scanner": "scanner-primary", "fingerprint": "fd7729b8becd4444", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f985753c1d7d1793", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/TaskDetail.tsx:95"}, "properties": {"repobilityId": "62ff05a490790c8c", "scanner": "scanner-primary", "fingerprint": "f985753c1d7d1793", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ff1557ab9369af4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/HomeAddressSettings.tsx:143"}, "properties": {"repobilityId": "8f81b977633f1027", "scanner": "scanner-primary", "fingerprint": "5ff1557ab9369af4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-76fc649836bd8b66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/SettingsPage.tsx:611"}, "properties": {"repobilityId": "16aaf1a277334cb4", "scanner": "scanner-primary", "fingerprint": "76fc649836bd8b66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2dc4924e9e4d6c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/settings/CalendarSettings.tsx:113"}, "properties": {"repobilityId": "f5fd0aeaf944b000", "scanner": "scanner-primary", "fingerprint": "e2dc4924e9e4d6c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-576222fd4e859f37", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/layout/QuickCapture.tsx:401"}, "properties": {"repobilityId": "c4ac5a637bb55ed6", "scanner": "scanner-primary", "fingerprint": "576222fd4e859f37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7a0a5f34bda82e10", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layout/Sidebar.tsx:435"}, "properties": {"repobilityId": "be1152cdf47927a8", "scanner": "scanner-primary", "fingerprint": "7a0a5f34bda82e10", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a32d63f06090b855", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/PullStrip.tsx:86"}, "properties": {"repobilityId": "5040acc1b0783090", "scanner": "scanner-primary", "fingerprint": "a32d63f06090b855", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c23e1e2bb5b12dea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EmailActionsBanner.tsx:67"}, "properties": {"repobilityId": "5ea6ae68388b94cc", "scanner": "scanner-primary", "fingerprint": "c23e1e2bb5b12dea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fce4615e3c0b1c47", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/ScheduleItem.tsx:398"}, "properties": {"repobilityId": "691d84ba742c3863", "scanner": "scanner-primary", "fingerprint": "fce4615e3c0b1c47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b36468641e8bff53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/SwipeableCard.tsx:353"}, "properties": {"repobilityId": "a8f72b578231bb08", "scanner": "scanner-primary", "fingerprint": "b36468641e8bff53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb3a9929f6bf38d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/StagingFloat.tsx:492"}, "properties": {"repobilityId": "5da429c490ca417a", "scanner": "scanner-primary", "fingerprint": "eb3a9929f6bf38d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e840e98b600df9db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/InboxTaskCard.tsx:236"}, "properties": {"repobilityId": "8a6e8ecbd76f3c84", "scanner": "scanner-primary", "fingerprint": "e840e98b600df9db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-026125ef31ee90a1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EveningMealCard.tsx:63"}, "properties": {"repobilityId": "901daf3e5ea4e27e", "scanner": "scanner-primary", "fingerprint": "026125ef31ee90a1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5007e92e4aba69ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/ClarityIndicator.tsx:253"}, "properties": {"repobilityId": "4ac5e83692002ca4", "scanner": "scanner-primary", "fingerprint": "5007e92e4aba69ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0bc56fe4e2d71db7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/EventEmailsSection.tsx:60"}, "properties": {"repobilityId": "82e8da893d5e1b65", "scanner": "scanner-primary", "fingerprint": "0bc56fe4e2d71db7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-470ceba00aba5c64", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/DayNavCluster.tsx:86"}, "properties": {"repobilityId": "fee60b4e906dc48e", "scanner": "scanner-primary", "fingerprint": "470ceba00aba5c64", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da6e01eff39c55a6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule/DiscussionBadge.tsx:47"}, "properties": {"repobilityId": "d49bd2de1843c30d", "scanner": "scanner-primary", "fingerprint": "da6e01eff39c55a6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-951d05f3b009fdb3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/surface/sections/PanelWhy.tsx:147"}, "properties": {"repobilityId": "e75fa5947ec93650", "scanner": "scanner-primary", "fingerprint": "951d05f3b009fdb3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6590d1d188915484", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/surface/sections/PanelLinks.tsx:40"}, "properties": {"repobilityId": "c7d4f453050f8127", "scanner": "scanner-primary", "fingerprint": "6590d1d188915484", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f36ba646f3948534", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/detail/DetailPanelRedesign.tsx:2685"}, "properties": {"repobilityId": "8c04cfde2a8d4775", "scanner": "scanner-primary", "fingerprint": "f36ba646f3948534", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0dcf118bee933244", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/detail/DetailPanelRedesign.tsx:445"}, "properties": {"repobilityId": "80579f8df6537091", "scanner": "scanner-primary", "fingerprint": "0dcf118bee933244", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-43e92eac91be9b87", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/ListPicker.tsx:112"}, "properties": {"repobilityId": "43334c95fc2bcc99", "scanner": "scanner-primary", "fingerprint": "43e92eac91be9b87", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68d64027a1e17fdf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/InboxTriageModal.tsx:214"}, "properties": {"repobilityId": "1f9a91230f2ebf57", "scanner": "scanner-primary", "fingerprint": "68d64027a1e17fdf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2f42284376117f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/AssignPicker.tsx:161"}, "properties": {"repobilityId": "3344fe5f4e63e221", "scanner": "scanner-primary", "fingerprint": "e2f42284376117f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68d9a7e2a30ccf25", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/TimePickerPopover.tsx:321"}, "properties": {"repobilityId": "d91cbbbd763be850", "scanner": "scanner-primary", "fingerprint": "68d9a7e2a30ccf25", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-642472ae28d8dd26", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/triage/SchedulePopover.tsx:607"}, "properties": {"repobilityId": "9e747c9d68a732c2", "scanner": "scanner-primary", "fingerprint": "642472ae28d8dd26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7f94d21ae2dcc195", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/goals/GoalTreeView.tsx:75"}, "properties": {"repobilityId": "5760ec90c236ee91", "scanner": "scanner-primary", "fingerprint": "7f94d21ae2dcc195", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e5cfc6e30d624cd5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contact/ContactViewRedesign.tsx:329"}, "properties": {"repobilityId": "09c8d1693ca2ef14", "scanner": "scanner-primary", "fingerprint": "e5cfc6e30d624cd5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0522dd8a4639339c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallEmailActionCard.tsx:68"}, "properties": {"repobilityId": "feec604fb247b7f2", "scanner": "scanner-primary", "fingerprint": "0522dd8a4639339c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-725dfe522db38778", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallLookAhead.tsx:103"}, "properties": {"repobilityId": "48c02fac93535ce1", "scanner": "scanner-primary", "fingerprint": "725dfe522db38778", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-035a466b41bca2bc", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/wall/WallEmailActionsOverlay.tsx:83"}, "properties": {"repobilityId": "2494828026b36d45", "scanner": "scanner-primary", "fingerprint": "035a466b41bca2bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8024f1438fc6ccf0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDiscussionWidget.tsx:28"}, "properties": {"repobilityId": "4c1c6d96a7378673", "scanner": "scanner-primary", "fingerprint": "8024f1438fc6ccf0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-861920aadd411fe6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/wall/WallRecipeViewer.tsx:283"}, "properties": {"repobilityId": "12a0df6fbf77c073", "scanner": "scanner-primary", "fingerprint": "861920aadd411fe6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-23e78a37aeb71de2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallSwimlane.tsx:246"}, "properties": {"repobilityId": "afe6ed1b8832f57e", "scanner": "scanner-primary", "fingerprint": "23e78a37aeb71de2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb3dd80243b98552", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallNowCard.tsx:105"}, "properties": {"repobilityId": "c35c93ebce0ab286", "scanner": "scanner-primary", "fingerprint": "cb3dd80243b98552", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e50536d9779900c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallEmailActions.tsx:35"}, "properties": {"repobilityId": "358af92ed4870063", "scanner": "scanner-primary", "fingerprint": "5e50536d9779900c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf8fdaddbe19306a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallRoomsView.tsx:212"}, "properties": {"repobilityId": "7cbd739b1f44ecb9", "scanner": "scanner-primary", "fingerprint": "bf8fdaddbe19306a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a1e21e12a26f700", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/components/wall/WallAgentCards.tsx:81"}, "properties": {"repobilityId": "70bea2492d8666aa", "scanner": "scanner-primary", "fingerprint": "3a1e21e12a26f700", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9cbd842880974b2e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallAgentCards.tsx:112"}, "properties": {"repobilityId": "b700561c9d039a8c", "scanner": "scanner-primary", "fingerprint": "9cbd842880974b2e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bb26d1b8dfb0598", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallItem.tsx:86"}, "properties": {"repobilityId": "128b5a053c574ca2", "scanner": "scanner-primary", "fingerprint": "3bb26d1b8dfb0598", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df038959192e22dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDinnerWidget.tsx:106"}, "properties": {"repobilityId": "2108daa0e9298150", "scanner": "scanner-primary", "fingerprint": "df038959192e22dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c8313a04967e9fbf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallDiscussList.tsx:35"}, "properties": {"repobilityId": "9178d0bf9b94e5e1", "scanner": "scanner-primary", "fingerprint": "c8313a04967e9fbf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1372779cc8ef78e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallChoresWidget.tsx:173"}, "properties": {"repobilityId": "7cbff62920ac38a0", "scanner": "scanner-primary", "fingerprint": "1372779cc8ef78e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51bfdc35774f94bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/WallItemDetail.tsx:190"}, "properties": {"repobilityId": "707d279f2822b73a", "scanner": "scanner-primary", "fingerprint": "51bfdc35774f94bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd4c2d96d6b1433d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/wall/WallCalendar.tsx:280"}, "properties": {"repobilityId": "655ab67c93c99af0", "scanner": "scanner-primary", "fingerprint": "bd4c2d96d6b1433d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-77a0716996994a57", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/now/WallNowRail.tsx:12"}, "properties": {"repobilityId": "decf7508c8c4897b", "scanner": "scanner-primary", "fingerprint": "77a0716996994a57", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dfff0f6e8625ef53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/now/WallNowQuadrant.tsx:35"}, "properties": {"repobilityId": "5d73dd21c5284433", "scanner": "scanner-primary", "fingerprint": "dfff0f6e8625ef53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd47aac3418baacb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/AfterSchoolView.tsx:208"}, "properties": {"repobilityId": "c673924eae9f7ba8", "scanner": "scanner-primary", "fingerprint": "cd47aac3418baacb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-555a6ce5012f08dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/WeekendMorningView.tsx:225"}, "properties": {"repobilityId": "c05d1cd8907f802a", "scanner": "scanner-primary", "fingerprint": "555a6ce5012f08dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9fec33b4c65cdbaf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/DinnerFlowView.tsx:133"}, "properties": {"repobilityId": "883e4e2261881199", "scanner": "scanner-primary", "fingerprint": "9fec33b4c65cdbaf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0541d76890c62491", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/wall/contexts/DinnerFlowView.tsx:194"}, "properties": {"repobilityId": "df94189e2cb9de45", "scanner": "scanner-primary", "fingerprint": "0541d76890c62491", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0bf7a3d29cc5ce89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/BedtimeView.tsx:241"}, "properties": {"repobilityId": "539088859ce1d118", "scanner": "scanner-primary", "fingerprint": "0bf7a3d29cc5ce89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6c30523d45806a64", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall/contexts/EmailActionStrip.tsx:48"}, "properties": {"repobilityId": "bd4c9c7d07263324", "scanner": "scanner-primary", "fingerprint": "6c30523d45806a64", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-97773890ecae136a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/list/ListsList.tsx:171"}, "properties": {"repobilityId": "a2219f43d7028e1e", "scanner": "scanner-primary", "fingerprint": "97773890ecae136a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03d0a60f71c72905", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/agent/BriefingSection.tsx:62"}, "properties": {"repobilityId": "296eee1dbf45d411", "scanner": "scanner-primary", "fingerprint": "03d0a60f71c72905", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-521f4d2f2b800460", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/timeline/TimelineCompanion.tsx:520"}, "properties": {"repobilityId": "6c0b365fd93ee6b4", "scanner": "scanner-primary", "fingerprint": "521f4d2f2b800460", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a12231531b7fc14b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/task/CompletionNotesPrompt.tsx:78"}, "properties": {"repobilityId": "dff77d0ecc9bae9b", "scanner": "scanner-primary", "fingerprint": "a12231531b7fc14b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d923d637815acd5a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/task/TaskViewRedesign.tsx:827"}, "properties": {"repobilityId": "bf3d99aec1d380f0", "scanner": "scanner-primary", "fingerprint": "d923d637815acd5a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b0861573549f232b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/chat/ChatPanel.tsx:188"}, "properties": {"repobilityId": "43f0d60859c40ed7", "scanner": "scanner-primary", "fingerprint": "b0861573549f232b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f47f8a1b8cd19ed6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/search/SearchResultItem.tsx:89"}, "properties": {"repobilityId": "b2179f1bc8912e38", "scanner": "scanner-primary", "fingerprint": "f47f8a1b8cd19ed6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-843a10a5f16b6c30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/WeekView.tsx:126"}, "properties": {"repobilityId": "50ace384417c4477", "scanner": "scanner-primary", "fingerprint": "843a10a5f16b6c30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2b1e304b715be010", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/CascadingRiverView.tsx:371"}, "properties": {"repobilityId": "9c476192dbffc7b1", "scanner": "scanner-primary", "fingerprint": "2b1e304b715be010", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32154b19978ba383", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/week/WeekSummaryRow.tsx:35"}, "properties": {"repobilityId": "5d1f8c12dd96493a", "scanner": "scanner-primary", "fingerprint": "32154b19978ba383", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1fb505b581d9d397", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/home/week/WeekEventBlock.tsx:143"}, "properties": {"repobilityId": "8f4d729f79f7ac6f", "scanner": "scanner-primary", "fingerprint": "1fb505b581d9d397", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f4504537f2821169", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/routine/RoutinesListRedesign.tsx:368"}, "properties": {"repobilityId": "cb9cc870ae77b450", "scanner": "scanner-primary", "fingerprint": "f4504537f2821169", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d3ac2f6a3cc0956f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/location/PlacesAutocomplete.tsx:131"}, "properties": {"repobilityId": "056dc43baa7395c5", "scanner": "scanner-primary", "fingerprint": "d3ac2f6a3cc0956f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-506ff15f7e6f4638", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/meeting/MeetingNotesView.tsx:28"}, "properties": {"repobilityId": "e674c18a51de6d7d", "scanner": "scanner-primary", "fingerprint": "506ff15f7e6f4638", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-31fd6692c9021e36", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2GlanceCard.tsx:27"}, "properties": {"repobilityId": "62c855c01bbed0d6", "scanner": "scanner-primary", "fingerprint": "31fd6692c9021e36", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a0b45cb50769f516", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2ItemActionSheet.tsx:94"}, "properties": {"repobilityId": "234f39dd4617259e", "scanner": "scanner-primary", "fingerprint": "a0b45cb50769f516", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-643f2fe54a194171", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/wall-v2/WallV2Shell.tsx:411"}, "properties": {"repobilityId": "df16d2b694efb501", "scanner": "scanner-primary", "fingerprint": "643f2fe54a194171", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eef60cb6880bdb99", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2EventCard.tsx:88"}, "properties": {"repobilityId": "8e782d3b6e8a01de", "scanner": "scanner-primary", "fingerprint": "eef60cb6880bdb99", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a2d43e6a8040852", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2AtAGlance.tsx:32"}, "properties": {"repobilityId": "3273652f87139da7", "scanner": "scanner-primary", "fingerprint": "0a2d43e6a8040852", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a9fc001de612795", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/wall-v2/WallV2UpcomingCard.tsx:34"}, "properties": {"repobilityId": "e0d8312844e38fa5", "scanner": "scanner-primary", "fingerprint": "6a9fc001de612795", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd577fe24eeb66c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/NoteModal.tsx:206"}, "properties": {"repobilityId": "8a60cf357c7019eb", "scanner": "scanner-primary", "fingerprint": "bd577fe24eeb66c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9416317a2e440973", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/NotePicker.tsx:155"}, "properties": {"repobilityId": "e5693695f0b0e475", "scanner": "scanner-primary", "fingerprint": "9416317a2e440973", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53801d04954b45f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/notes/EntityLinkPicker.tsx:218"}, "properties": {"repobilityId": "edb197a85227f48c", "scanner": "scanner-primary", "fingerprint": "53801d04954b45f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-33fbf93d295f62bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/history/CompletedTasksView.tsx:258"}, "properties": {"repobilityId": "0f053cac4e46e3dd", "scanner": "scanner-primary", "fingerprint": "33fbf93d295f62bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f05a7f06c30ff73", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/directions/AddStopInput.tsx:140"}, "properties": {"repobilityId": "f464eabe9cfdf17c", "scanner": "scanner-primary", "fingerprint": "1f05a7f06c30ff73", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff30c1bf168b814c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/directions/StopItem.tsx:64"}, "properties": {"repobilityId": "40ae52cdfa61b224", "scanner": "scanner-primary", "fingerprint": "ff30c1bf168b814c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce7f75caacd3c523", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/attachments/AttachmentList.tsx:114"}, "properties": {"repobilityId": "d497610cdbe19b75", "scanner": "scanner-primary", "fingerprint": "ce7f75caacd3c523", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aab1162f6fd0dedf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/PlanningColumn.tsx:315"}, "properties": {"repobilityId": "20a0116322f18c36", "scanner": "scanner-primary", "fingerprint": "aab1162f6fd0dedf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6519a59ab26745cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/daily/PlanTodaySession.tsx:119"}, "properties": {"repobilityId": "800c3596846cd5fc", "scanner": "scanner-primary", "fingerprint": "6519a59ab26745cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-251c28da8d411931", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/planning/cadence/CadenceSession.tsx:128"}, "properties": {"repobilityId": "0df5a2be2bd794e7", "scanner": "scanner-primary", "fingerprint": "251c28da8d411931", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8a33ed58484c055", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/pins/PinnedItem.tsx:71"}, "properties": {"repobilityId": "1f6b8bbc5f7b8c65", "scanner": "scanner-primary", "fingerprint": "e8a33ed58484c055", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1d585c8822241443", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/calendar/CalendarListDiscovery.tsx:94"}, "properties": {"repobilityId": "7dc6632800c8ff5b", "scanner": "scanner-primary", "fingerprint": "1d585c8822241443", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04d0ab0babd438ae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/calendar/CalendarDomainAssignment.tsx:153"}, "properties": {"repobilityId": "69513508511d223e", "scanner": "scanner-primary", "fingerprint": "04d0ab0babd438ae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7dc4b24a849e5e73", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/recipe/RecipeSection.tsx:94"}, "properties": {"repobilityId": "a8c778a68a8fed5b", "scanner": "scanner-primary", "fingerprint": "7dc4b24a849e5e73", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-679011fdc84b70c4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/recipe/RecipeViewer.tsx:244"}, "properties": {"repobilityId": "c465dcd217cbda61", "scanner": "scanner-primary", "fingerprint": "679011fdc84b70c4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-571057efcdce59a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectsListRedesign.tsx:152"}, "properties": {"repobilityId": "e1319f58019a1681", "scanner": "scanner-primary", "fingerprint": "571057efcdce59a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-16262e8e6b8d6147", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectViewRedesign.tsx:667"}, "properties": {"repobilityId": "24b161d94ea5341b", "scanner": "scanner-primary", "fingerprint": "16262e8e6b8d6147", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b8bdb87f194e865", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/project/ProjectControl.tsx:59"}, "properties": {"repobilityId": "f52fbc2f1ee22390", "scanner": "scanner-primary", "fingerprint": "5b8bdb87f194e865", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-31b4459d98ce307d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/meals/chat/AskSymphonyRail.tsx:42"}, "properties": {"repobilityId": "ab5dfdee336806a0", "scanner": "scanner-primary", "fingerprint": "31b4459d98ce307d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f9cfa45a57a7da2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/meals/groceries-v2/SendToGroceriesModalV2.tsx:106"}, "properties": {"repobilityId": "e613f378b1d22827", "scanner": "scanner-primary", "fingerprint": "5f9cfa45a57a7da2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-61d10512d7466d6a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/meals/tonight/MobileTabBar.tsx:19"}, "properties": {"repobilityId": "447022aca34f7ea5", "scanner": "scanner-primary", "fingerprint": "61d10512d7466d6a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-969420abcdb81a84", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/meals/tonight/TonightPage.tsx:55"}, "properties": {"repobilityId": "2cb1618747cee6af", "scanner": "scanner-primary", "fingerprint": "969420abcdb81a84", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c64857e8339e89e9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/logger.ts:5"}, "properties": {"repobilityId": "d91dbb6e420e1181", "scanner": "scanner-primary", "fingerprint": "c64857e8339e89e9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22de094750679b89", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/useMealPlan.test.ts:50"}, "properties": {"repobilityId": "3b24ad1ba0d64446", "scanner": "scanner-primary", "fingerprint": "22de094750679b89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3d4ae519b1bf2c05", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/hooks/useGroceryStatus.test.ts:34"}, "properties": {"repobilityId": "229a1fa71b33ab21", "scanner": "scanner-primary", "fingerprint": "3d4ae519b1bf2c05", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8ba8b0d1a02d29fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useWeather.ts:162"}, "properties": {"repobilityId": "2702a8e9adbc72a8", "scanner": "scanner-primary", "fingerprint": "8ba8b0d1a02d29fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a1e79acba02f6d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useApplyMealSuggestion.ts:35"}, "properties": {"repobilityId": "1f2801d52bb88a00", "scanner": "scanner-primary", "fingerprint": "4a1e79acba02f6d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-53e4f545b1376fb8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/hooks/useKioskCards.ts:72"}, "properties": {"repobilityId": "d6b965cfe577ab34", "scanner": "scanner-primary", "fingerprint": "53e4f545b1376fb8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-371497229cd172c6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/shell/LegacyDetailPanelHost.tsx:51"}, "properties": {"repobilityId": "3eb912b529349765", "scanner": "scanner-primary", "fingerprint": "371497229cd172c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ad399c24542c8c83", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/shell/providers/MealEventsProvider.tsx:16"}, "properties": {"repobilityId": "6029179017a59376", "scanner": "scanner-primary", "fingerprint": "ad399c24542c8c83", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-933369bd1d233cfe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 e2e/p4-smoke.spec.ts:54"}, "properties": {"repobilityId": "8bcd6d1d7cd15c91", "scanner": "scanner-primary", "fingerprint": "933369bd1d233cfe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a32ac60613087ac", "level": "error", "message": {"text": "Runtime dotenv file present in repo: .env.production"}, "properties": {"repobilityId": "da3016501941bee3", "scanner": "scanner-primary", "fingerprint": "5a32ac60613087ac", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".env.production"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d3edd3c18a0a964b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in launch-dashboard.html:533"}, "properties": {"repobilityId": "909f245fdd4550b6", "scanner": "scanner-primary", "fingerprint": "d3edd3c18a0a964b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "launch-dashboard.html"}, "region": {"startLine": 533}}}]}, {"ruleId": "scanner-ccb404108dcddb4b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/ask-symphony-meal/index.ts:19"}, "properties": {"repobilityId": "e3f3160467f31d8b", "scanner": "scanner-primary", "fingerprint": "ccb404108dcddb4b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/ask-symphony-meal/index.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-0443bacccfe24bde", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/recipe-discover/index.ts:14"}, "properties": {"repobilityId": "7fe4f987452dcd8a", "scanner": "scanner-primary", "fingerprint": "0443bacccfe24bde", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/recipe-discover/index.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-6de6838fce7aabc5", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/places-proxy/index.ts:11"}, "properties": {"repobilityId": "64009d02b209ab39", "scanner": "scanner-primary", "fingerprint": "6de6838fce7aabc5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/places-proxy/index.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-fc66fe4b3b1cfcb8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/kiosk-agent/index.ts:4"}, "properties": {"repobilityId": "bae0121aa5f27e20", "scanner": "scanner-primary", "fingerprint": "fc66fe4b3b1cfcb8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/kiosk-agent/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-552f10b6b9213731", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/extract-capture/index.ts:12"}, "properties": {"repobilityId": "4d7fd8a361196234", "scanner": "scanner-primary", "fingerprint": "552f10b6b9213731", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/extract-capture/index.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-a89260492745f80d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/capture-to-inbox/index.ts:16"}, "properties": {"repobilityId": "a27cf36fe5c2673d", "scanner": "scanner-primary", "fingerprint": "a89260492745f80d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/capture-to-inbox/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-0594947ad37dae75", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-create-event/index.ts:5"}, "properties": {"repobilityId": "dcd0c84c0448f6a1", "scanner": "scanner-primary", "fingerprint": "0594947ad37dae75", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/google-calendar-create-event/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-157e16bd10095221", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-event-threads/index.ts:4"}, "properties": {"repobilityId": "d109a7e7b622d253", "scanner": "scanner-primary", "fingerprint": "157e16bd10095221", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/gmail-event-threads/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-3a5d21be1f1f067f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-weather/index.ts:5"}, "properties": {"repobilityId": "74107673a0de8d31", "scanner": "scanner-primary", "fingerprint": "3a5d21be1f1f067f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/fetch-weather/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-374bbb44b8f3f588", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/email-scanner/index.ts:4"}, "properties": {"repobilityId": "0f8943ce1e208838", "scanner": "scanner-primary", "fingerprint": "374bbb44b8f3f588", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/email-scanner/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-3300b1b79bbb6677", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-events/index.ts:5"}, "properties": {"repobilityId": "a1b5d1be864efe57", "scanner": "scanner-primary", "fingerprint": "3300b1b79bbb6677", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/google-calendar-events/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-c7def7977f836111", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-move-event/index.ts:5"}, "properties": {"repobilityId": "03b6388299df5b2e", "scanner": "scanner-primary", "fingerprint": "c7def7977f836111", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/google-calendar-move-event/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-0a61144f0739132b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/meal-plan-undo/index.ts:4"}, "properties": {"repobilityId": "ec100d57e6f4067b", "scanner": "scanner-primary", "fingerprint": "0a61144f0739132b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/meal-plan-undo/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-9764c2703fc4182e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/fetch-recipe/index.ts:5"}, "properties": {"repobilityId": "a858dab2b1a0002d", "scanner": "scanner-primary", "fingerprint": "9764c2703fc4182e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/fetch-recipe/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-ed65d778d1cec7c4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-update-location/index.ts:5"}, "properties": {"repobilityId": "07a44793e6d6b314", "scanner": "scanner-primary", "fingerprint": "ed65d778d1cec7c4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/google-calendar-update-location/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-5b8401775d20e11e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/action-queue/index.ts:4"}, "properties": {"repobilityId": "fc8176cd88f1da2c", "scanner": "scanner-primary", "fingerprint": "5b8401775d20e11e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/action-queue/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-b082cceabbfe6ccb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/rhythms-parse/index.ts:6"}, "properties": {"repobilityId": "d075426430a9c81d", "scanner": "scanner-primary", "fingerprint": "b082cceabbfe6ccb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/rhythms-parse/index.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-963fd4ea9a18b76c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/semantic-search/index.ts:4"}, "properties": {"repobilityId": "1aeed119d53baf11", "scanner": "scanner-primary", "fingerprint": "963fd4ea9a18b76c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/semantic-search/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-8ff15108abd3236e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-check/index.ts:4"}, "properties": {"repobilityId": "5723ed716c06b48a", "scanner": "scanner-primary", "fingerprint": "8ff15108abd3236e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/gmail-check/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-0df2d6ac5ce17a9f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/meal-plan-generate/index.ts:6"}, "properties": {"repobilityId": "8e1c9b71ba530abd", "scanner": "scanner-primary", "fingerprint": "0df2d6ac5ce17a9f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/meal-plan-generate/index.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-d1ca60a1228dc61e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/waitlist-signup-notify/index.ts:2"}, "properties": {"repobilityId": "90f5256c03afbf48", "scanner": "scanner-primary", "fingerprint": "d1ca60a1228dc61e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/waitlist-signup-notify/index.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-4b71c359d9c3b395", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-callback/index.ts:5"}, "properties": {"repobilityId": "3d565f4d18fd19be", "scanner": "scanner-primary", "fingerprint": "4b71c359d9c3b395", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/google-calendar-callback/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-6691e00757e94890", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/symphony-agent/index.ts:16"}, "properties": {"repobilityId": "98bb1425fe1f6f1a", "scanner": "scanner-primary", "fingerprint": "6691e00757e94890", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/symphony-agent/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-c8c3e9be6cccb24f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gmail-send/index.ts:4"}, "properties": {"repobilityId": "dd0f2fce9c7d0f35", "scanner": "scanner-primary", "fingerprint": "c8c3e9be6cccb24f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/gmail-send/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-45bcbdd599483233", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/proactive-engine/index.ts:4"}, "properties": {"repobilityId": "f3f9179b74ad6d78", "scanner": "scanner-primary", "fingerprint": "45bcbdd599483233", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/proactive-engine/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-3bd23bc6d57d68b6", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vault-sync/index.ts:4"}, "properties": {"repobilityId": "72ff0412a85e5e06", "scanner": "scanner-primary", "fingerprint": "3bd23bc6d57d68b6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vault-sync/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-0d4695265008e740", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/goal-planning-chat/index.ts:4"}, "properties": {"repobilityId": "7bc3ec97d39d289c", "scanner": "scanner-primary", "fingerprint": "0d4695265008e740", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/goal-planning-chat/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-23c24136f1df19cb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/vault-write/index.ts:4"}, "properties": {"repobilityId": "1d2b9a118971c7bf", "scanner": "scanner-primary", "fingerprint": "23c24136f1df19cb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/vault-write/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-b09ffb514ca8ce21", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/note-match/index.ts:9"}, "properties": {"repobilityId": "042f7833d5988387", "scanner": "scanner-primary", "fingerprint": "b09ffb514ca8ce21", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/note-match/index.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-4a3eb8f8dd86d210", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gcal-location-update/index.ts:5"}, "properties": {"repobilityId": "44d8b966476965f4", "scanner": "scanner-primary", "fingerprint": "4a3eb8f8dd86d210", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/gcal-location-update/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-baf2161b1d0dd688", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-delete-event/index.ts:5"}, "properties": {"repobilityId": "cbd485ba6faa28c1", "scanner": "scanner-primary", "fingerprint": "baf2161b1d0dd688", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/google-calendar-delete-event/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-7b0f2e3c557b9f66", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-list/index.ts:5"}, "properties": {"repobilityId": "874710b797d75932", "scanner": "scanner-primary", "fingerprint": "7b0f2e3c557b9f66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/google-calendar-list/index.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-95b73eede76fa501", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/google-calendar-auth-url/index.ts:4"}, "properties": {"repobilityId": "ae4731804f14803e", "scanner": "scanner-primary", "fingerprint": "95b73eede76fa501", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/google-calendar-auth-url/index.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-6d446d1350f47e2f", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in raycast-extension/src/lib/supabase.ts:31"}, "properties": {"repobilityId": "8a745e669eff33de", "scanner": "scanner-primary", "fingerprint": "6d446d1350f47e2f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "raycast-extension/src/lib/supabase.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-99025e61c894634b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/apps/tasks/TaskDetailPanel.test.tsx:14"}, "properties": {"repobilityId": "4a3f4e183cc9121e", "scanner": "scanner-primary", "fingerprint": "99025e61c894634b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/apps/tasks/TaskDetailPanel.test.tsx"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-6cddce3a28ab917c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/components/JoinHousehold.tsx:73"}, "properties": {"repobilityId": "11b6f6a14e719a3d", "scanner": "scanner-primary", "fingerprint": "6cddce3a28ab917c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/JoinHousehold.tsx"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-cb2f0a80f126b0a6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/PuppyEasterEgg.tsx:113"}, "properties": {"repobilityId": "e9133eec653833c9", "scanner": "scanner-primary", "fingerprint": "cb2f0a80f126b0a6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/PuppyEasterEgg.tsx"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-be3d90faac72f8e9", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/surface/sections/PanelWhy.tsx:147"}, "properties": {"repobilityId": "4c595b610d3aac30", "scanner": "scanner-primary", "fingerprint": "be3d90faac72f8e9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/surface/sections/PanelWhy.tsx"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-c1047cf81b9c5b59", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/wall/WallRecipeViewer.tsx:283"}, "properties": {"repobilityId": "9ea1ee79e13ad7b3", "scanner": "scanner-primary", "fingerprint": "c1047cf81b9c5b59", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/wall/WallRecipeViewer.tsx"}, "region": {"startLine": 283}}}]}, {"ruleId": "scanner-c05071e4e96bf9ef", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/wall/contexts/DinnerFlowView.tsx:194"}, "properties": {"repobilityId": "37b27c2137939c4f", "scanner": "scanner-primary", "fingerprint": "c05071e4e96bf9ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/wall/contexts/DinnerFlowView.tsx"}, "region": {"startLine": 194}}}]}, {"ruleId": "scanner-1ef4061707e62e26", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/recipe/RecipeViewer.tsx:244"}, "properties": {"repobilityId": "80c72ed7bc628d24", "scanner": "scanner-primary", "fingerprint": "1ef4061707e62e26", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/recipe/RecipeViewer.tsx"}, "region": {"startLine": 244}}}]}, {"ruleId": "scanner-e3e775dc29091350", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/lib/htmlUtils.ts:8"}, "properties": {"repobilityId": "dbf7824f4b1eaf81", "scanner": "scanner-primary", "fingerprint": "e3e775dc29091350", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/htmlUtils.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca8e4c42ddaccd26", "level": "note", "message": {"text": "Very large file: docs/design_handoff_onboarding_flow/artboards/PlannerV3.jsx (1546 lines)"}, "properties": {"repobilityId": "8b1508aa8d187b27", "scanner": "scanner-primary", "fingerprint": "ca8e4c42ddaccd26", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0e89a54c60e19f59", "level": "note", "message": {"text": "Very large file: src/components/detail/DetailPanelRedesign.tsx (3498 lines)"}, "properties": {"repobilityId": "b041c43c7354996a", "scanner": "scanner-primary", "fingerprint": "0e89a54c60e19f59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5a6e7d4c178c9e5d", "level": "note", "message": {"text": "Very large file: src/components/task/TaskViewRedesign.tsx (1049 lines)"}, "properties": {"repobilityId": "eccc10cb5d0d146a", "scanner": "scanner-primary", "fingerprint": "5a6e7d4c178c9e5d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "554167f37fa3f03d", "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": "20f89a43ba4073c7", "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": "000cdbb69aef792f", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "262540d33fac42e8", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "52ce522265d0721a", "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": "9233cb1c3bad18a2", "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": "1c5b1492395bb8cf", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-96340c74622049d4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/screen.md"}, "properties": {"repobilityId": "53c8aa464811f215", "scanner": "scanner-primary", "fingerprint": "96340c74622049d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/screen.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2a75245b9268d1ac", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/commands/deploy.md"}, "properties": {"repobilityId": "8bf9f8e3f766cc34", "scanner": "scanner-primary", "fingerprint": "2a75245b9268d1ac", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/deploy.md"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-4a4bda4ff6765d34", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/deploy.md"}, "properties": {"repobilityId": "e6b73cd19928b108", "scanner": "scanner-primary", "fingerprint": "4a4bda4ff6765d34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/deploy.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0107242bde6f4ca1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/apply.md"}, "properties": {"repobilityId": "81224d065a97725f", "scanner": "scanner-primary", "fingerprint": "0107242bde6f4ca1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/apply.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-edfa743149131833", "level": "none", "message": {"text": "Commented-code block (6 lines) in docs/design_handoff_onboarding_flow/design-canvas.jsx:2"}, "properties": {"repobilityId": "062b23c4e7a00e10", "scanner": "scanner-primary", "fingerprint": "edfa743149131833", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6289c7903f7b27bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 docs/design_handoff_onboarding_flow/design-canvas.jsx:63"}, "properties": {"repobilityId": "399cd7ccd68f162f", "scanner": "scanner-primary", "fingerprint": "6289c7903f7b27bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-88236f30f42292ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in docs/design_handoff_onboarding_flow/artboards/PlannerV3.jsx:314"}, "properties": {"repobilityId": "e707be351cfd6226", "scanner": "scanner-primary", "fingerprint": "88236f30f42292ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39e57307fb9a7196", "level": "none", "message": {"text": "Commented-code block (6 lines) in vite/yaml-engine.ts:5"}, "properties": {"repobilityId": "c2acd59e9c25dbbb", "scanner": "scanner-primary", "fingerprint": "39e57307fb9a7196", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b72c585c4f2d8116", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/places-proxy/index.ts:1"}, "properties": {"repobilityId": "266f2c7f807953f1", "scanner": "scanner-primary", "fingerprint": "b72c585c4f2d8116", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c57d49a7f6b50ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/places-proxy/index.ts:44"}, "properties": {"repobilityId": "64e5d4d6b43cd5e3", "scanner": "scanner-primary", "fingerprint": "1c57d49a7f6b50ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0983834e25e9a4fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/kiosk-agent/index.ts:336"}, "properties": {"repobilityId": "a20e65e74e9ab36a", "scanner": "scanner-primary", "fingerprint": "0983834e25e9a4fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-412f57353bd9bbec", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/extract-capture/index.ts:51"}, "properties": {"repobilityId": "578d831ca62ba16c", "scanner": "scanner-primary", "fingerprint": "412f57353bd9bbec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f250ef02e937981c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/extract-capture/index.ts:20"}, "properties": {"repobilityId": "3a5aac549ea5169f", "scanner": "scanner-primary", "fingerprint": "f250ef02e937981c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b31c63313271ef43", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/extract-capture/lib/whatsapp.ts:7"}, "properties": {"repobilityId": "9033ca720673744b", "scanner": "scanner-primary", "fingerprint": "b31c63313271ef43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5cfa6b45b155f86b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-create-event/index.ts:25"}, "properties": {"repobilityId": "3d1e5ecddd1c5cdd", "scanner": "scanner-primary", "fingerprint": "5cfa6b45b155f86b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b17636ca91ad050", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-event-threads/index.ts:116"}, "properties": {"repobilityId": "07c04eef29f5f375", "scanner": "scanner-primary", "fingerprint": "8b17636ca91ad050", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-70ffea5d38a0271f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/fetch-weather/index.ts:26"}, "properties": {"repobilityId": "85b4142e3ec3e706", "scanner": "scanner-primary", "fingerprint": "70ffea5d38a0271f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b101ad73632c898", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/email-scanner/index.ts:98"}, "properties": {"repobilityId": "a4de62ec47065a53", "scanner": "scanner-primary", "fingerprint": "0b101ad73632c898", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-320166cbe4b72be9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-events/index.ts:25"}, "properties": {"repobilityId": "16f0516f4a690629", "scanner": "scanner-primary", "fingerprint": "320166cbe4b72be9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f855393dca27b5f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-move-event/index.ts:24"}, "properties": {"repobilityId": "65b49a9186bab860", "scanner": "scanner-primary", "fingerprint": "2f855393dca27b5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cbfadad68b7e8794", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-update-location/index.ts:26"}, "properties": {"repobilityId": "28d528b0dcf3eeab", "scanner": "scanner-primary", "fingerprint": "cbfadad68b7e8794", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-043315b4da58ccff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/action-queue/index.ts:361"}, "properties": {"repobilityId": "4759a5b1b448c789", "scanner": "scanner-primary", "fingerprint": "043315b4da58ccff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f885233f47dec4a5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/rhythms-parse/index.ts:110"}, "properties": {"repobilityId": "3ea2cff247b84630", "scanner": "scanner-primary", "fingerprint": "f885233f47dec4a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c8a71569be79be71", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/semantic-search/index.ts:48"}, "properties": {"repobilityId": "8e10061489bbfd25", "scanner": "scanner-primary", "fingerprint": "c8a71569be79be71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae9df8c0cc55a85e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-check/index.ts:123"}, "properties": {"repobilityId": "593bf0c5c8a3d828", "scanner": "scanner-primary", "fingerprint": "ae9df8c0cc55a85e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-92c0a5b3c0a246e6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/meal-plan-generate/index.ts:391"}, "properties": {"repobilityId": "7cfe50f979b07975", "scanner": "scanner-primary", "fingerprint": "92c0a5b3c0a246e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac301d62baa8987f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/waitlist-signup-notify/index.ts:57"}, "properties": {"repobilityId": "b1c719fb4655d99a", "scanner": "scanner-primary", "fingerprint": "ac301d62baa8987f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f77b37ade1b33982", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-callback/index.ts:42"}, "properties": {"repobilityId": "acea4e63f612f274", "scanner": "scanner-primary", "fingerprint": "f77b37ade1b33982", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-765d4bd40386d87b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/symphony-agent/index.ts:339"}, "properties": {"repobilityId": "070653f29a0a5600", "scanner": "scanner-primary", "fingerprint": "765d4bd40386d87b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-027e420402323087", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gmail-send/index.ts:33"}, "properties": {"repobilityId": "f681522d0961ae0c", "scanner": "scanner-primary", "fingerprint": "027e420402323087", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9cb3eed8287c3a2d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/proactive-engine/index.ts:436"}, "properties": {"repobilityId": "2f2f93267451ddd8", "scanner": "scanner-primary", "fingerprint": "9cb3eed8287c3a2d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b4361c78318a31e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vault-sync/index.ts:272"}, "properties": {"repobilityId": "7f4d7ffcabc05569", "scanner": "scanner-primary", "fingerprint": "b4361c78318a31e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b9c17e740ff23e9e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/goal-planning-chat/index.ts:91"}, "properties": {"repobilityId": "dae2b5de25def8d2", "scanner": "scanner-primary", "fingerprint": "b9c17e740ff23e9e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db7136959a2b7362", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/vault-write/index.ts:65"}, "properties": {"repobilityId": "9bedd5157c6145fa", "scanner": "scanner-primary", "fingerprint": "db7136959a2b7362", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-42802cd1585233a6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/gcal-location-update/index.ts:26"}, "properties": {"repobilityId": "7d9bf3b57110328a", "scanner": "scanner-primary", "fingerprint": "42802cd1585233a6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-469d7b2d793aa4b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-delete-event/index.ts:24"}, "properties": {"repobilityId": "3cf30226e1af931f", "scanner": "scanner-primary", "fingerprint": "469d7b2d793aa4b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4eef56397a76d179", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/google-calendar-list/index.ts:25"}, "properties": {"repobilityId": "86f402d5c8ca4381", "scanner": "scanner-primary", "fingerprint": "4eef56397a76d179", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d747f0614ff7958", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/main.tsx:88"}, "properties": {"repobilityId": "968cd4401bac97ad", "scanner": "scanner-primary", "fingerprint": "1d747f0614ff7958", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1326100603ca271", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/apps/tasks/TasksApp.tsx:13"}, "properties": {"repobilityId": "845095e3a2eef99d", "scanner": "scanner-primary", "fingerprint": "d1326100603ca271", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9dfb009b52a548ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/apps/tasks/HomeViewContainer.tsx:3"}, "properties": {"repobilityId": "8ad12116f3a03260", "scanner": "scanner-primary", "fingerprint": "9dfb009b52a548ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d440352347653c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/apps/tasks/HorizonView.tsx:5"}, "properties": {"repobilityId": "e1602eb98d06d2ad", "scanner": "scanner-primary", "fingerprint": "2d440352347653c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc850dc0b8c86f8a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/apps/tasks/index.ts:8"}, "properties": {"repobilityId": "b1617340e217c16c", "scanner": "scanner-primary", "fingerprint": "bc850dc0b8c86f8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb1814750707997c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/apps/tasks/TaskDetailPanel.tsx:59"}, "properties": {"repobilityId": "4f55783d8a9f006d", "scanner": "scanner-primary", "fingerprint": "fb1814750707997c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ea6c70ac909767c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/apps/meals/MealsApp.tsx:13"}, "properties": {"repobilityId": "60486a68254db9eb", "scanner": "scanner-primary", "fingerprint": "9ea6c70ac909767c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32c75f313537761f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/layout/QuickCapture.tsx:295"}, "properties": {"repobilityId": "23101db357a6624d", "scanner": "scanner-primary", "fingerprint": "32c75f313537761f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3534f6111c3118c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/schedule/InboxView.tsx:320"}, "properties": {"repobilityId": "5792ca923cffe573", "scanner": "scanner-primary", "fingerprint": "3534f6111c3118c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-221656ce2fcdf09f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/schedule/ScheduleItem.tsx:828"}, "properties": {"repobilityId": "b6acac7bc1da6331", "scanner": "scanner-primary", "fingerprint": "221656ce2fcdf09f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-303e3a6240490bd4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/schedule/TodayView.tsx:247"}, "properties": {"repobilityId": "5e695ed1e406a5ab", "scanner": "scanner-primary", "fingerprint": "303e3a6240490bd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd81c845837137aa", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/schedule/TimelineQuickInput.tsx:20"}, "properties": {"repobilityId": "7597dfe6f851c4fd", "scanner": "scanner-primary", "fingerprint": "dd81c845837137aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d0132815ae74b0f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/schedule/MobileTypeTile.tsx:7"}, "properties": {"repobilityId": "976fc6725162263a", "scanner": "scanner-primary", "fingerprint": "0d0132815ae74b0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68ac5cf8f2cc2a2d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/schedule/TodayView.test.tsx:286"}, "properties": {"repobilityId": "162f6113720ca1d2", "scanner": "scanner-primary", "fingerprint": "68ac5cf8f2cc2a2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e6a00b849386566", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/detail/DetailPanelRedesign.tsx:1116"}, "properties": {"repobilityId": "6aaa4cfec4cfdeeb", "scanner": "scanner-primary", "fingerprint": "3e6a00b849386566", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38dba2b30747857a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/wall/WallCameraView.tsx:3"}, "properties": {"repobilityId": "2d42f32460acc863", "scanner": "scanner-primary", "fingerprint": "38dba2b30747857a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-520325c3627c0395", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/wall/today/todayItem.ts:33"}, "properties": {"repobilityId": "96d53cbcb73c2912", "scanner": "scanner-primary", "fingerprint": "520325c3627c0395", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b81b48ba05e397ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/wall/contexts/useContextEngine.ts:83"}, "properties": {"repobilityId": "3ae21feb7a208892", "scanner": "scanner-primary", "fingerprint": "b81b48ba05e397ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a469b2f7bcc49b92", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/home/HomeView.tsx:86"}, "properties": {"repobilityId": "9033d43e975d34c4", "scanner": "scanner-primary", "fingerprint": "a469b2f7bcc49b92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c777ec9b1a3fa8a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/home/week/WeekViewV2.tsx:241"}, "properties": {"repobilityId": "4fe937ecfe245454", "scanner": "scanner-primary", "fingerprint": "2c777ec9b1a3fa8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0ea2b34dd07fae2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/home/week/WeekViewMobile.tsx:83"}, "properties": {"repobilityId": "c443258f19fdf6c0", "scanner": "scanner-primary", "fingerprint": "d0ea2b34dd07fae2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e290cf22715dd0d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/home/week/WeekEventBlock.tsx:7"}, "properties": {"repobilityId": "5716b462a20d9924", "scanner": "scanner-primary", "fingerprint": "e290cf22715dd0d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69c19b92be9c9757", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/routine/RoutineScheduleEditor.tsx:3"}, "properties": {"repobilityId": "125a26185e6fa0f4", "scanner": "scanner-primary", "fingerprint": "69c19b92be9c9757", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c91c1f88c1547ad0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/wall-v2/wallV2Adapter.ts:3"}, "properties": {"repobilityId": "fac5ed0219695bd0", "scanner": "scanner-primary", "fingerprint": "c91c1f88c1547ad0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bee5a58f36357cd", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/wall-v2/tints.ts:3"}, "properties": {"repobilityId": "eb8be17ecdf5ba15", "scanner": "scanner-primary", "fingerprint": "6bee5a58f36357cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c8af8755030da0d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/wall-v2/WallV2Shell.tsx:6"}, "properties": {"repobilityId": "5b085994fee736a4", "scanner": "scanner-primary", "fingerprint": "1c8af8755030da0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a79f7f7aaabad53b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/wall-v2/WallV2EventCard.tsx:43"}, "properties": {"repobilityId": "ca8b28ef2687cf66", "scanner": "scanner-primary", "fingerprint": "a79f7f7aaabad53b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c13d25d464f3e152", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/notes/TiptapEditor.tsx:112"}, "properties": {"repobilityId": "1bb74cfd538d8fa8", "scanner": "scanner-primary", "fingerprint": "c13d25d464f3e152", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0351a00451c3d475", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/planning/daily/PlanTodaySession.tsx:3"}, "properties": {"repobilityId": "d9394c112a92b03f", "scanner": "scanner-primary", "fingerprint": "0351a00451c3d475", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79b967a6e718b498", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/planning/cadence/CadenceSession.tsx:3"}, "properties": {"repobilityId": "5dfb174e18809e97", "scanner": "scanner-primary", "fingerprint": "79b967a6e718b498", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8c790f1d9b101a1", "level": "note", "message": {"text": "Legacy-named symbol `irisLegacy` in src/components/meals/day-detail/DayDetailPage.tsx:286"}, "properties": {"repobilityId": "5906c35bc65564a1", "scanner": "scanner-primary", "fingerprint": "f8c790f1d9b101a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1ab5664a2d7a3720", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/meals/plan/SlotSection.tsx:126"}, "properties": {"repobilityId": "8546f6b9dce82dbd", "scanner": "scanner-primary", "fingerprint": "1ab5664a2d7a3720", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-309aab1f0737db0f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/quickInputParser.ts:28"}, "properties": {"repobilityId": "4d8979051d7d27f5", "scanner": "scanner-primary", "fingerprint": "309aab1f0737db0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e94f59851200bd4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/lazyWithRetry.ts:50"}, "properties": {"repobilityId": "2c84cb45954964ba", "scanner": "scanner-primary", "fingerprint": "4e94f59851200bd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcc95d4904d33ffa", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/mealsVisibility.ts:4"}, "properties": {"repobilityId": "e754287f2d8f8487", "scanner": "scanner-primary", "fingerprint": "fcc95d4904d33ffa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-381fefc9c0cc777c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/agentStream.ts:59"}, "properties": {"repobilityId": "4b83c79865aa257d", "scanner": "scanner-primary", "fingerprint": "381fefc9c0cc777c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08fe31088b7622e6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/googleMaps.ts:142"}, "properties": {"repobilityId": "e53ad3a26ec49e74", "scanner": "scanner-primary", "fingerprint": "08fe31088b7622e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c5ae83e842a5062", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/placesRest.ts:6"}, "properties": {"repobilityId": "cbcd6d456a52cebd", "scanner": "scanner-primary", "fingerprint": "3c5ae83e842a5062", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4c9d247a30cb7eff", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/quietHours.ts:3"}, "properties": {"repobilityId": "9d4fd1ef949d752f", "scanner": "scanner-primary", "fingerprint": "4c9d247a30cb7eff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1dde06b1d0fe3de2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/triage/applyWhen.ts:3"}, "properties": {"repobilityId": "4d86cfce1c29df87", "scanner": "scanner-primary", "fingerprint": "1dde06b1d0fe3de2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44f37eb4875899ad", "level": "note", "message": {"text": "Legacy-named symbol `doneOld` in src/lib/today/taskPools.test.ts:26"}, "properties": {"repobilityId": "11ae1ff2c51dda63", "scanner": "scanner-primary", "fingerprint": "44f37eb4875899ad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-319c37db64f2932d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/today/grouping.ts:91"}, "properties": {"repobilityId": "17f3c5a361139738", "scanner": "scanner-primary", "fingerprint": "319c37db64f2932d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32bde3d71ee2634c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/today/groupTasks.ts:24"}, "properties": {"repobilityId": "210044d51a4fb377", "scanner": "scanner-primary", "fingerprint": "32bde3d71ee2634c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4b0dd5d08aaf0773", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/cadence/config.ts:3"}, "properties": {"repobilityId": "7ccd4a2c33c091f1", "scanner": "scanner-primary", "fingerprint": "4b0dd5d08aaf0773", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc528e68d5a8c606", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/CalendarCallback.tsx:38"}, "properties": {"repobilityId": "95989da362fd0083", "scanner": "scanner-primary", "fingerprint": "fc528e68d5a8c606", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-955eff1d06cb1587", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useDirections.ts:197"}, "properties": {"repobilityId": "e656a0b671fb0d58", "scanner": "scanner-primary", "fingerprint": "955eff1d06cb1587", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe5f9e92f2cc35ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useEventDiscussionFlags.ts:38"}, "properties": {"repobilityId": "146c4d4de80eeef1", "scanner": "scanner-primary", "fingerprint": "fe5f9e92f2cc35ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6b02e311d8a8702b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useHiddenCalendarEvents.ts:29"}, "properties": {"repobilityId": "6661b5933e0cacd0", "scanner": "scanner-primary", "fingerprint": "6b02e311d8a8702b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1971b81390885195", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useWeather.ts:120"}, "properties": {"repobilityId": "3a17e43a41caeb55", "scanner": "scanner-primary", "fingerprint": "1971b81390885195", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-984c34044c05cef1", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useBuildAutoReload.ts:5"}, "properties": {"repobilityId": "2143e72ea194be16", "scanner": "scanner-primary", "fingerprint": "984c34044c05cef1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce6584a022ee9478", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useProjectSync.ts:113"}, "properties": {"repobilityId": "17bd60ba0b3d3a2a", "scanner": "scanner-primary", "fingerprint": "ce6584a022ee9478", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a74f218652c23b77", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useSupabaseTasks.ts:90"}, "properties": {"repobilityId": "8a86a1ddec111475", "scanner": "scanner-primary", "fingerprint": "a74f218652c23b77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04f690a1dde95ca8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useSystemHealth.ts:122"}, "properties": {"repobilityId": "5eb6324baa6e3a06", "scanner": "scanner-primary", "fingerprint": "04f690a1dde95ca8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b4b747da3b7b7cc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useDragScroll.ts:5"}, "properties": {"repobilityId": "c489c44575086db0", "scanner": "scanner-primary", "fingerprint": "8b4b747da3b7b7cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c949bfd26038f86", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/hooks/useDetailPanelState.ts:110"}, "properties": {"repobilityId": "e67551dbbb88bb02", "scanner": "scanner-primary", "fingerprint": "0c949bfd26038f86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b4bbe92687817e6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/hooks/useAskSymphony.ts:93"}, "properties": {"repobilityId": "2671e2381bb8d49e", "scanner": "scanner-primary", "fingerprint": "2b4bbe92687817e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a006c87f0a46652f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/shell/ShellRoutes.tsx:12"}, "properties": {"repobilityId": "ad1a02cef7ad18e5", "scanner": "scanner-primary", "fingerprint": "a006c87f0a46652f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f58f3d9aa42dfda9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/shell/LegacyDetailPanelHost.tsx:10"}, "properties": {"repobilityId": "c15b54d360ab0f95", "scanner": "scanner-primary", "fingerprint": "f58f3d9aa42dfda9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca88ad5e1c8ec974", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/shell/useShellChrome.ts:3"}, "properties": {"repobilityId": "c0fa593e772869a2", "scanner": "scanner-primary", "fingerprint": "ca88ad5e1c8ec974", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2f8b4c9eb544a31", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/shell/providers/MealEventsProvider.tsx:3"}, "properties": {"repobilityId": "7b91f693f848f430", "scanner": "scanner-primary", "fingerprint": "d2f8b4c9eb544a31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e648db5e87212f47", "level": "none", "message": {"text": "Commented-code block (7 lines) in e2e/app.spec.ts:38"}, "properties": {"repobilityId": "3e435ae04dce504e", "scanner": "scanner-primary", "fingerprint": "e648db5e87212f47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-022e6399d1ef2beb", "level": "note", "message": {"text": "12 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "7bf4178327da75a2", "scanner": "scanner-primary", "fingerprint": "022e6399d1ef2beb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-c52913fadfe2f7d3", "level": "warning", "message": {"text": "Frontend route `/goals/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "30497ae2405aa576", "scanner": "scanner-primary", "fingerprint": "c52913fadfe2f7d3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ecfce249e9cbcba0", "level": "warning", "message": {"text": "Frontend route `/projects/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "00ca21b63aae64f0", "scanner": "scanner-primary", "fingerprint": "ecfce249e9cbcba0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0d067c9a468ed6fb", "level": "warning", "message": {"text": "Frontend route `/routines/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "25f0d18542ead772", "scanner": "scanner-primary", "fingerprint": "0d067c9a468ed6fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-fe2b7221e6efa4a1", "level": "warning", "message": {"text": "Frontend route `/contacts/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "63aaa30e175c4485", "scanner": "scanner-primary", "fingerprint": "fe2b7221e6efa4a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-56a0609eafb8a0b8", "level": "warning", "message": {"text": "Frontend route `/family/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "c52f4b0bb8d509f3", "scanner": "scanner-primary", "fingerprint": "56a0609eafb8a0b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9f9d0f36fb73571d", "level": "warning", "message": {"text": "Frontend route `/agent/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "51fd0a9736679c1b", "scanner": "scanner-primary", "fingerprint": "9f9d0f36fb73571d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-31b14ebdd40235d1", "level": "warning", "message": {"text": "Frontend route `/wall/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "9aba9d58d8b44f47", "scanner": "scanner-primary", "fingerprint": "31b14ebdd40235d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b1d5adf10957cba8", "level": "warning", "message": {"text": "Frontend route `/wall-v2/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "802f30d70e02c746", "scanner": "scanner-primary", "fingerprint": "b1d5adf10957cba8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6d0b976e8fa6be5b", "level": "warning", "message": {"text": "Frontend route `/jobs/*` has no Link/navigate to it \u2014 src/shell/providers/SelectionProvider.test.tsx"}, "properties": {"repobilityId": "2885a4f8e0ba1fa7", "scanner": "scanner-primary", "fingerprint": "6d0b976e8fa6be5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f9e11441678bcd09", "level": "warning", "message": {"text": "Frontend route `/tasks-new/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "d94f78a807e7f826", "scanner": "scanner-primary", "fingerprint": "f9e11441678bcd09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a66ed39fdb694cb7", "level": "warning", "message": {"text": "Frontend route `/morning/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "28741603b1353fb0", "scanner": "scanner-primary", "fingerprint": "a66ed39fdb694cb7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ea3f155c8ad9776c", "level": "warning", "message": {"text": "Frontend route `/bedtime/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "531255fd60b33109", "scanner": "scanner-primary", "fingerprint": "ea3f155c8ad9776c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-1300d5d30e7f75d1", "level": "warning", "message": {"text": "Frontend route `/meals/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "f0f815ed0870614d", "scanner": "scanner-primary", "fingerprint": "1300d5d30e7f75d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-78610a678e9b1007", "level": "warning", "message": {"text": "Frontend route `/home/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "4c131a4cc8612bcd", "scanner": "scanner-primary", "fingerprint": "78610a678e9b1007", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9b809ceee7b066d8", "level": "warning", "message": {"text": "Frontend route `/settings/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "2936ef191ae0e31e", "scanner": "scanner-primary", "fingerprint": "9b809ceee7b066d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e37e1f27874379d9", "level": "warning", "message": {"text": "Frontend route `/history/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "e397ec7e23b4fcef", "scanner": "scanner-primary", "fingerprint": "e37e1f27874379d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-97f6c0030b5cf589", "level": "warning", "message": {"text": "Frontend route `/lists/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "21163103e6c91731", "scanner": "scanner-primary", "fingerprint": "97f6c0030b5cf589", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e63753c205b8a663", "level": "warning", "message": {"text": "Frontend route `/join/:token` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "4b0b6bf8e32074b1", "scanner": "scanner-primary", "fingerprint": "e63753c205b8a663", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8da4b52b4a02b601", "level": "warning", "message": {"text": "Frontend route `/calendar-callback` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "4d4b48264b6e2b19", "scanner": "scanner-primary", "fingerprint": "8da4b52b4a02b601", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ad078e660d287c66", "level": "warning", "message": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 src/shell/ShellRoutes.tsx"}, "properties": {"repobilityId": "1d43f65ed2738c2c", "scanner": "scanner-primary", "fingerprint": "ad078e660d287c66", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-298beb3dca890949", "level": "warning", "message": {"text": "Frontend route `:goalId` has no Link/navigate to it \u2014 src/apps/goals/GoalsApp.tsx"}, "properties": {"repobilityId": "449d3d2fdab804cf", "scanner": "scanner-primary", "fingerprint": "298beb3dca890949", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d4b10aecc83dc958", "level": "warning", "message": {"text": "Frontend route `:projectId` has no Link/navigate to it \u2014 src/apps/projects/ProjectsApp.tsx"}, "properties": {"repobilityId": "355a0bae2d430886", "scanner": "scanner-primary", "fingerprint": "d4b10aecc83dc958", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cae678fdda823c34", "level": "warning", "message": {"text": "Frontend route `new` has no Link/navigate to it \u2014 src/apps/routines/RoutinesApp.tsx"}, "properties": {"repobilityId": "9f50ca28e9df1aae", "scanner": "scanner-primary", "fingerprint": "cae678fdda823c34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-032dc9daa40f3ff3", "level": "warning", "message": {"text": "Frontend route `:routineId` has no Link/navigate to it \u2014 src/apps/routines/RoutinesApp.tsx"}, "properties": {"repobilityId": "19a32c57881a59f4", "scanner": "scanner-primary", "fingerprint": "032dc9daa40f3ff3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-6347138cfd979e49", "level": "warning", "message": {"text": "Frontend route `today` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx"}, "properties": {"repobilityId": "f3d2303a3f5885e7", "scanner": "scanner-primary", "fingerprint": "6347138cfd979e49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9dbc54e9765ae491", "level": "warning", "message": {"text": "Frontend route `inbox` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx"}, "properties": {"repobilityId": "128c76fc3e0487b4", "scanner": "scanner-primary", "fingerprint": "9dbc54e9765ae491", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d5e2f8b55db4ba6c", "level": "warning", "message": {"text": "Frontend route `task/:taskId` has no Link/navigate to it \u2014 src/shell/cutoverRouting.test.tsx"}, "properties": {"repobilityId": "4a2ae16670122d71", "scanner": "scanner-primary", "fingerprint": "d5e2f8b55db4ba6c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-23a5a41f5af60a68", "level": "warning", "message": {"text": "Frontend route `week` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "ad8cd5e7a0cb5a17", "scanner": "scanner-primary", "fingerprint": "23a5a41f5af60a68", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ef5acc3f5bbcef04", "level": "warning", "message": {"text": "Frontend route `month` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "349dfe0f48072d0a", "scanner": "scanner-primary", "fingerprint": "ef5acc3f5bbcef04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-12d3b1a6019e4e08", "level": "warning", "message": {"text": "Frontend route `season` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "4711e0ac6a277b4e", "scanner": "scanner-primary", "fingerprint": "12d3b1a6019e4e08", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-19d1dd2bcf879f75", "level": "warning", "message": {"text": "Frontend route `year` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "c224f95962a26c4b", "scanner": "scanner-primary", "fingerprint": "19d1dd2bcf879f75", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a8ab3ea80b6a6cfe", "level": "warning", "message": {"text": "Frontend route `someday` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "5de0fd48a44fc185", "scanner": "scanner-primary", "fingerprint": "a8ab3ea80b6a6cfe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b7eb178e94db1505", "level": "warning", "message": {"text": "Frontend route `tasks-new` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "3f1b9aa80faad4cc", "scanner": "scanner-primary", "fingerprint": "b7eb178e94db1505", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-909a03c2fda0c260", "level": "warning", "message": {"text": "Frontend route `tasks-new/today` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "f52a782f7b546835", "scanner": "scanner-primary", "fingerprint": "909a03c2fda0c260", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-53986f2eca5f45e7", "level": "warning", "message": {"text": "Frontend route `tasks-new/inbox` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "2a72e8031e2598bd", "scanner": "scanner-primary", "fingerprint": "53986f2eca5f45e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4e92810d9d0ff055", "level": "warning", "message": {"text": "Frontend route `tasks-new/task/:taskId` has no Link/navigate to it \u2014 src/apps/tasks/TasksApp.tsx"}, "properties": {"repobilityId": "17509b1189413177", "scanner": "scanner-primary", "fingerprint": "4e92810d9d0ff055", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cfa3032ba3d3d66d", "level": "warning", "message": {"text": "Frontend route `/home/space/:id` has no Link/navigate to it \u2014 src/apps/home/SpaceView.test.tsx"}, "properties": {"repobilityId": "11e8883fe1b9444a", "scanner": "scanner-primary", "fingerprint": "cfa3032ba3d3d66d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2bd3821959ae2e50", "level": "warning", "message": {"text": "Frontend route `/home/asset/:id` has no Link/navigate to it \u2014 src/apps/home/AssetView.test.tsx"}, "properties": {"repobilityId": "4a5e09932730c62d", "scanner": "scanner-primary", "fingerprint": "2bd3821959ae2e50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-5f12bc404d8190bd", "level": "warning", "message": {"text": "Frontend route `space/:id/session` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx"}, "properties": {"repobilityId": "787c9dcb8d5b8741", "scanner": "scanner-primary", "fingerprint": "5f12bc404d8190bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3f70fd43b495b030", "level": "warning", "message": {"text": "Frontend route `space/:id` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx"}, "properties": {"repobilityId": "a2f94ba694bafdca", "scanner": "scanner-primary", "fingerprint": "3f70fd43b495b030", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-8ac79bad320fdcbe", "level": "warning", "message": {"text": "Frontend route `asset/new` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx"}, "properties": {"repobilityId": "2129d720746e4628", "scanner": "scanner-primary", "fingerprint": "8ac79bad320fdcbe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f589baa42477f2c6", "level": "warning", "message": {"text": "Frontend route `asset/:id` has no Link/navigate to it \u2014 src/apps/home/HomeApp.tsx"}, "properties": {"repobilityId": "b608a677658bb375", "scanner": "scanner-primary", "fingerprint": "f589baa42477f2c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-10c9175d74963e92", "level": "warning", "message": {"text": "Frontend route `/home/space/:id/session` has no Link/navigate to it \u2014 src/apps/home/capture/RoomSessionMode.test.tsx"}, "properties": {"repobilityId": "84980ee5baea5a91", "scanner": "scanner-primary", "fingerprint": "10c9175d74963e92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-3c15159642b3c43d", "level": "warning", "message": {"text": "Frontend route `:contactId` has no Link/navigate to it \u2014 src/apps/contacts/ContactsApp.tsx"}, "properties": {"repobilityId": "1519aeb0884734a7", "scanner": "scanner-primary", "fingerprint": "3c15159642b3c43d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-49e698cc855283fd", "level": "warning", "message": {"text": "Frontend route `:memberId` has no Link/navigate to it \u2014 src/apps/family/FamilyApp.tsx"}, "properties": {"repobilityId": "759d48a52b81853f", "scanner": "scanner-primary", "fingerprint": "49e698cc855283fd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-dae41848ecd1c6cf", "level": "warning", "message": {"text": "Frontend route `shelf` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "properties": {"repobilityId": "486d994383211664", "scanner": "scanner-primary", "fingerprint": "dae41848ecd1c6cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e5f39c032986ce3a", "level": "warning", "message": {"text": "Frontend route `habits` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "properties": {"repobilityId": "96ee3421a3c1c8c4", "scanner": "scanner-primary", "fingerprint": "e5f39c032986ce3a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cab5d91e302a211a", "level": "warning", "message": {"text": "Frontend route `grams` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "properties": {"repobilityId": "6a50b69b76d1689e", "scanner": "scanner-primary", "fingerprint": "cab5d91e302a211a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-410cb2eb4ff29113", "level": "warning", "message": {"text": "Frontend route `tonight` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "properties": {"repobilityId": "278900e6ca9f4ce5", "scanner": "scanner-primary", "fingerprint": "410cb2eb4ff29113", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ff4a7c43a560c049", "level": "warning", "message": {"text": "Frontend route `day/:date` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "properties": {"repobilityId": "69b6e94c15501723", "scanner": "scanner-primary", "fingerprint": "ff4a7c43a560c049", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-30324b952cd68816", "level": "warning", "message": {"text": "Frontend route `cook/:recipeId` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "properties": {"repobilityId": "e2b00d7d2ea34214", "scanner": "scanner-primary", "fingerprint": "30324b952cd68816", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-49ee11921e6209f9", "level": "warning", "message": {"text": "Frontend route `brief` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "properties": {"repobilityId": "705da8d20c2f012d", "scanner": "scanner-primary", "fingerprint": "49ee11921e6209f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0901bc1b712a9be2", "level": "warning", "message": {"text": "Frontend route `plan` has no Link/navigate to it \u2014 src/apps/meals/MealsApp.tsx"}, "properties": {"repobilityId": "7719274aef749bea", "scanner": "scanner-primary", "fingerprint": "0901bc1b712a9be2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-674172fc3d06c475", "level": "warning", "message": {"text": "Frontend route `/chromed/*` has no Link/navigate to it \u2014 src/shell/Shell.test.tsx"}, "properties": {"repobilityId": "780600ad79115df8", "scanner": "scanner-primary", "fingerprint": "674172fc3d06c475", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4f76d4d425a053a2", "level": "warning", "message": {"text": "Frontend route `/chromeless/*` has no Link/navigate to it \u2014 src/shell/Shell.test.tsx"}, "properties": {"repobilityId": "82e83d9b59e050b1", "scanner": "scanner-primary", "fingerprint": "4f76d4d425a053a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-d4e823741e93bce8", "level": "warning", "message": {"text": "Frontend route `/today/*` has no Link/navigate to it \u2014 src/shell/providers/SelectionProvider.test.tsx"}, "properties": {"repobilityId": "a0268a532ff01228", "scanner": "scanner-primary", "fingerprint": "d4e823741e93bce8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}