{"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: SimonNg0225/ntk-platform", "shortDescription": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#9\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#9\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#9\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 9\nGraph consistency label: weak_supervision_needs_review\nNodes: 13\nEdges: 17\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit':"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: SimonNg0225/ntk-platform", "shortDescription": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#9\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: SimonNg0225/ntk-platform#9\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-04993936f836336d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\":"}, "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: SimonNg0225/ntk-platform", "shortDescription": {"text": "Foundry mined test ci gap after feedback: SimonNg0225/ntk-platform"}, "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#9\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#9\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 9\nGraph consistency label: weak_supervision_needs_review\nNodes: 13\nEdges: 17\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 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: SimonNg0225/ntk-platform", "shortDescription": {"text": "Foundry mined schema ui api mismatch: SimonNg0225/ntk-platform"}, "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: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#32\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 32\nGraph consistency label: supported_by_high_confidence_link\nNodes: 48\nEdges: 89\nNode types: {'pr_file': 32, 'commit': 4, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': "}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: SimonNg0225/ntk-platform", "shortDescription": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform#5\nRepo: SimonNg0225/ntk-platform\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: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b408400931d1c37d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"h"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_auth_guardrail_gap", "name": "Foundry mined security auth guardrail gaps: SimonNg0225/ntk-platform", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: SimonNg0225/ntk-platform"}, "fullDescription": {"text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#32\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 32\nGraph consistency label: supported_by_high_confidence_link\nNodes: 48\nEdges: 89\nNode types: {'pr_file': 32, 'commit': 4, 'link_quality': 4, 'comment': 2, 'c"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform", "shortDescription": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "fullDescription": {"text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#37\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#37\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#37\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 37\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 26\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "scanner-7e12dce21186866a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/AccountBox.tsx:19", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AccountBox.tsx:19"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65f9a8deace3b1eb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/SupportButton.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SupportButton.tsx:146"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c7d689a492d98fe8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/Sidebar.tsx:594", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Sidebar.tsx:594"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc19b93bf0f38c29", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/MobileTopBar.tsx:32", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/MobileTopBar.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-4e0002cfe77afd66", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/AdminSupportCard.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AdminSupportCard.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a6392ff269549bd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/marketing/Landing.tsx:508", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/marketing/Landing.tsx:508"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-00443f9d928f646b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Admin.tsx:581", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Admin.tsx:581"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-caecfb504428beb7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings.tsx:402", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings.tsx:402"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d489807c1c584af9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home.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-288842ad629a8304", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/forum/BoardList.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/forum/BoardList.tsx:31"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b76a9427c661d10", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/forum/ThreadList.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/forum/ThreadList.tsx:76"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25b1e9ec2bfa19ec", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Calendar.tsx:312", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Calendar.tsx:312"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-43d03c05926f3069", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/GlobalSearch.tsx:724", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/GlobalSearch.tsx:724"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a97c292b73cb9e6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/AIAssistant.tsx:918", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/AIAssistant.tsx:918"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cfb9869b38665c6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Inbox.tsx:716", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Inbox.tsx:716"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a050747fe95db2c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Countdown.tsx:491", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Countdown.tsx:491"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c072d97f402d1a3a", "name": "\"active\" state uses light bg in a dark theme \u2014 src/features/shared/Countdown.tsx:280", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/shared/Countdown.tsx:280"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae7ee86677c93015", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/AskData.tsx:540", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/AskData.tsx:540"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a19470180e891f7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/charts.tsx:145", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/charts.tsx:145"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6af3642e301ceb80", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/SetupView.tsx:396", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/SetupView.tsx:396"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d7ba2b1c36d20bc", "name": "\"active\" state uses light bg in a dark theme \u2014 src/features/shared/quiz/SetupView.tsx:516", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/shared/quiz/SetupView.tsx:516"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-941facb7ab56286e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/ResultView.tsx:190", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/ResultView.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-878ea8408be3a21b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/MonthView.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/MonthView.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b7304b8b28b6035", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/TimeGridView.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/TimeGridView.tsx:242"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad00a2b1baa7ff5f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/EventEditor.tsx:599", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/EventEditor.tsx:599"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c61fdd30652973f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/LearningDashboard.tsx:432", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/LearningDashboard.tsx:432"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cc9b9dd9bb065a3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/HealthTracker.tsx:735", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/HealthTracker.tsx:735"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-351eca56a314922e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/Journal.tsx:430", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/Journal.tsx:430"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc47a91136364d8a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/Flashcards.tsx:366", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/Flashcards.tsx:366"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56567225501a5d83", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/HabitTracker.tsx:503", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/HabitTracker.tsx:503"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f237d44bbcb39612", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/CardGenerator.tsx:1333", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/CardGenerator.tsx:1333"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-235278a825dc0d7b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/ReadingList.tsx:373", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/ReadingList.tsx:373"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-770ddec019c4e7d6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/NotesWidget.tsx:599", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/NotesWidget.tsx:599"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65fcc82f8837f9fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/GoalsWidget.tsx:663", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/GoalsWidget.tsx:663"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1d1deabd42a1b77", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/reading/BookModal.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/reading/BookModal.tsx:189"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ff626f9870c4862", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/reading/Charts.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/reading/Charts.tsx:93"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-681d32f51a5b26ba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/goals/GoalEditor.tsx:249", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/goals/GoalEditor.tsx:249"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0a4992856777144", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/goals/Charts.tsx:253", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/goals/Charts.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-c4e7b4a58b37151e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitRow.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitRow.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-fa00785417a064a5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/StatsView.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/StatsView.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-1ccbae8a0f5535f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitDetail.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitDetail.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89be2fe2aabf4351", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitEditor.tsx:230", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitEditor.tsx:230"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f46f9d27486f1be6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/dashboard/widgets.tsx:287", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/dashboard/widgets.tsx:287"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-520e8ec135ac523f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/dashboard/BentoOverview.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/dashboard/BentoOverview.tsx:83"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2884e20b4d25de3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/library/LibraryView.tsx:415", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/library/LibraryView.tsx:415"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cbd15ab558e3fa45", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/coach/PlanGen.tsx:514", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/coach/PlanGen.tsx:514"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db0ad6a89c5b3e9d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/body/BodyView.tsx:149", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/body/BodyView.tsx:149"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1405ce9bb6520c0c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/nutrition/NutritionView.tsx:843", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/nutrition/NutritionView.tsx:843"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10bd2dc47c165d97", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/training/Charts.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/training/Charts.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-403c1b545521d65e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/training/TrainingView.tsx:155", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/training/TrainingView.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-b91eb60f4b454009", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/notes/Editor.tsx:667", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/notes/Editor.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-03312e3d95c942f8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/notes/Charts.tsx:159", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/notes/Charts.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f4b57ca1f3f63f6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/flashcards/BrowseView.tsx:442", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/flashcards/BrowseView.tsx:442"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9423bb9452acbe44", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/ProjectsView.tsx:196", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/ProjectsView.tsx:196"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d9efdbef9b2ead03", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/charts.tsx:261", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/charts.tsx:261"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1748cc3f80e0cad9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/HistoryView.tsx:334", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/HistoryView.tsx:334"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9642c71476198ed4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/StatsView.tsx:224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/StatsView.tsx:224"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a56210e5f0d3f5b8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/BudgetTracker.tsx:613", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/BudgetTracker.tsx:613"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65e2566e95fe1a23", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/WorkDashboard.tsx:214", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/WorkDashboard.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-0744643ce1eb18d3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/LessonPlanner.tsx:893", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/LessonPlanner.tsx:893"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f55b1d5d97afeff", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/CurriculumProgress.tsx:263", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/CurriculumProgress.tsx:263"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a834334f9c1b446", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ResourceLibrary.tsx:223", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ResourceLibrary.tsx:223"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa57a8165453eac6", "name": "\"active\" state uses light bg in a dark theme \u2014 src/features/work/ResourceLibrary.tsx:978", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/work/ResourceLibrary.tsx:978"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b77690a8c70ed68", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Gradebook.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Gradebook.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71b97d53b961c909", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ClassesWidget.tsx:391", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ClassesWidget.tsx:391"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ede2c8cd00910501", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Attendance.tsx:243", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Attendance.tsx:243"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bcfdf35aa83fd17e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/QuestionBank.tsx:257", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/QuestionBank.tsx:257"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edf46659d5f6ee81", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Team.tsx:328", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Team.tsx:328"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1af3ff52918f7f7b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Timetable.tsx:599", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Timetable.tsx:599"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec21883144cff689", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Grading.tsx:457", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Grading.tsx:457"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3b6286cc8e1d5da", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/TodoWidget.tsx:181", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/TodoWidget.tsx:181"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0956cbfccc9492b", "name": "\"active\" state uses light bg in a dark theme \u2014 src/features/work/TodoWidget.tsx:1411", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/work/TodoWidget.tsx:1411"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc11714a3337a6f4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ParentComms.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ParentComms.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20f8fa590274b563", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/MeetingNotes.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/MeetingNotes.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-6b74dd874e0616ce", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/questionbank/Charts.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/questionbank/Charts.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2abc7c93d2f7fdb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/meetingNotes/NoteEditor.tsx:317", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/meetingNotes/NoteEditor.tsx:317"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f134febad55fb9d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/lessonPlanner/CoverageChart.tsx:49", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/lessonPlanner/CoverageChart.tsx:49"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11bc24953429715d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/lessonPlanner/PlanEditor.tsx:299", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/lessonPlanner/PlanEditor.tsx:299"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f40efb7e9f9d9c7b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/timetable/WorkloadView.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/timetable/WorkloadView.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-56af328ec9852845", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/rubric/RubricGen.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/rubric/RubricGen.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c98aefc7a9b146b0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/budget/Charts.tsx:142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/budget/Charts.tsx:142"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8aceef225445cd0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/docDigest/DocDigest.tsx:266", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/docDigest/DocDigest.tsx:266"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a8624edc81fa825", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/StudentImport.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/StudentImport.tsx:211"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92e0528a5fb41b9a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/charts.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/charts.tsx:191"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fd281925ef285b7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/StudentProfile.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/StudentProfile.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-c01c0fb38fc11ddb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/teachGuide/TeachGuide.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/teachGuide/TeachGuide.tsx:240"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e8b1cfd1e77a846", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/ProfileTab.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/ProfileTab.tsx:174"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b70e81c8cfb72331", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/MyShares.tsx:95", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/MyShares.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-c04e0a1be568ef30", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/Community.tsx:312", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/Community.tsx:312"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6fa029c53c128b41", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/PublishForm.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/PublishForm.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3b34658b0c252cee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/attendance/RegisterGrid.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/attendance/RegisterGrid.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e163b86ca66cd741", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/charts.tsx:156", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/charts.tsx:156"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e81f1f22b85b32b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/parts.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/parts.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df051dc48d2311d2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/drive/DriveView.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/drive/DriveView.tsx:240"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-599b06a43ed2ca0f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/transcribe/Transcribe.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/transcribe/Transcribe.tsx:183"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0a85c9032265b02", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/TemplatePreview.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/TemplatePreview.tsx:359"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13913dd2a7dc4285", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/PdfTemplatePreview.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/PdfTemplatePreview.tsx:279"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-839cca07f64f3fb0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/AdminDocs.tsx:145", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/AdminDocs.tsx:145"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fda88055f64cc24", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/TemplateUpload.tsx:381", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/TemplateUpload.tsx:381"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59316eadafbc91ba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/curriculum/Charts.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/curriculum/Charts.tsx:279"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ddb2d23d0fae7d0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classTools/ClassTools.tsx:293", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classTools/ClassTools.tsx:293"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a0307f3cf19876a9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/slides/SlideGen.tsx:479", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/slides/SlideGen.tsx:479"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a0054a762808bcd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/gradebook/StudentReport.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/gradebook/StudentReport.tsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61dbe38225773449", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/dse/DseDrill.tsx:230", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/dse/DseDrill.tsx:230"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d26b9a39c555647", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/todo/charts.tsx:297", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/todo/charts.tsx:297"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14645aa487a454cc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/todo/TaskEditor.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/todo/TaskEditor.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-d032d1af1dcdeb14", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/forum/index.ts:16", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/forum/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-8fccf20edfad6ee7", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/team-billing/index.ts:31", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/team-billing/index.ts:31"}, "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-656c821c05b562eb", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/admin/index.ts:46", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin/index.ts:46"}, "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-96610ce5e3f585e0", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/support-admin/index.ts:23", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/support-admin/index.ts:23"}, "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-e3afcc665746e164", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-billing/index.ts:32", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-billing/index.ts:32"}, "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-529032e7bba2c118", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/gemini/index.ts:47", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gemini/index.ts:47"}, "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-ea5a00f5c4cbb28b", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/support/index.ts:20", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/support/index.ts:20"}, "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-f58121cf29286f5b", "name": "Insecure pattern 'document_write' in src/lib/export/print.ts:56", "shortDescription": {"text": "Insecure pattern 'document_write' in src/lib/export/print.ts:56"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5b7c1fabf39501e7", "name": "Insecure pattern 'document_write' in src/features/work/questionbank/util.ts:727", "shortDescription": {"text": "Insecure pattern 'document_write' in src/features/work/questionbank/util.ts:727"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f6a1580b13395a3", "name": "Insecure pattern 'document_write' in src/features/work/meetingNotes/util.ts:663", "shortDescription": {"text": "Insecure pattern 'document_write' in src/features/work/meetingNotes/util.ts:663"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb71c4a4d152b862", "name": "Insecure pattern 'document_write' in src/features/work/lessonPlanner/util.ts:359", "shortDescription": {"text": "Insecure pattern 'document_write' in src/features/work/lessonPlanner/util.ts:359"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f77adcebb059e191", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/highlight.ts:159", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/highlight.ts:159"}, "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-ecf14d871be19bb8", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/pdfPreview.ts:61", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/pdfPreview.ts:61"}, "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-4c27914d7a032821", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/FillForm.tsx:91", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/FillForm.tsx:91"}, "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-79c15b77e66e99d2", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/highlight.test.ts:33", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/highlight.test.ts:33"}, "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-0518f66b5ceef459", "name": "Insecure pattern 'document_write' in src/features/work/gradebook/StudentReport.tsx:113", "shortDescription": {"text": "Insecure pattern 'document_write' in src/features/work/gradebook/StudentReport.tsx:113"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-712b979c59eb3bc6", "name": "Very large file: src/lib/export/pptxPacks.ts (2237 lines)", "shortDescription": {"text": "Very large file: src/lib/export/pptxPacks.ts (2237 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-1460773e2e15f5e1", "name": "Very large file: src/lib/export/pptxPacksGallery1.ts (1350 lines)", "shortDescription": {"text": "Very large file: src/lib/export/pptxPacksGallery1.ts (1350 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-e5bffd2b3f977957", "name": "Very large file: src/lib/export/pptxPacksGallery2.ts (1303 lines)", "shortDescription": {"text": "Very large file: src/lib/export/pptxPacksGallery2.ts (1303 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-c79b21c30e3fd31e", "name": "Very large file: src/features/shared/GlobalSearch.tsx (1407 lines)", "shortDescription": {"text": "Very large file: src/features/shared/GlobalSearch.tsx (1407 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-d1e869a2bd669c90", "name": "Very large file: src/features/shared/AIAssistant.tsx (2380 lines)", "shortDescription": {"text": "Very large file: src/features/shared/AIAssistant.tsx (2380 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-18ca41c9762abc46", "name": "Very large file: src/features/shared/Inbox.tsx (1470 lines)", "shortDescription": {"text": "Very large file: src/features/shared/Inbox.tsx (1470 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-61042c4ccbb6735a", "name": "Very large file: src/features/learning/CardGenerator.tsx (1468 lines)", "shortDescription": {"text": "Very large file: src/features/learning/CardGenerator.tsx (1468 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-32885b37d9491db7", "name": "Very large file: src/features/learning/ReadingList.tsx (1396 lines)", "shortDescription": {"text": "Very large file: src/features/learning/ReadingList.tsx (1396 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-d7e6ecdaa3df9b5d", "name": "Very large file: src/features/learning/NotesWidget.tsx (1455 lines)", "shortDescription": {"text": "Very large file: src/features/learning/NotesWidget.tsx (1455 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-b8899d08585693cf", "name": "Very large file: src/features/learning/fitness/nutrition/NutritionView.tsx (1375 lines)", "shortDescription": {"text": "Very large file: src/features/learning/fitness/nutrition/NutritionView.tsx (1375 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-8c1d92c8d307cb35", "name": "Very large file: src/features/learning/fitness/training/TrainingView.tsx (1470 lines)", "shortDescription": {"text": "Very large file: src/features/learning/fitness/training/TrainingView.tsx (1470 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-7d8f0a7b9d202885", "name": "Very large file: src/features/work/BudgetTracker.tsx (2442 lines)", "shortDescription": {"text": "Very large file: src/features/work/BudgetTracker.tsx (2442 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-3d57c80035612a72", "name": "Very large file: src/features/work/WorkDashboard.tsx (1715 lines)", "shortDescription": {"text": "Very large file: src/features/work/WorkDashboard.tsx (1715 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-298cf891aa8c993d", "name": "Very large file: src/features/work/LessonPlanner.tsx (1441 lines)", "shortDescription": {"text": "Very large file: src/features/work/LessonPlanner.tsx (1441 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-f21921b0f76f2e6d", "name": "Very large file: src/features/work/CurriculumProgress.tsx (1448 lines)", "shortDescription": {"text": "Very large file: src/features/work/CurriculumProgress.tsx (1448 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-28fcbe9f02c38277", "name": "Very large file: src/features/work/ResourceLibrary.tsx (1753 lines)", "shortDescription": {"text": "Very large file: src/features/work/ResourceLibrary.tsx (1753 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-7e0fcf8c9150c429", "name": "Very large file: src/features/work/Gradebook.tsx (2377 lines)", "shortDescription": {"text": "Very large file: src/features/work/Gradebook.tsx (2377 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-6ba36acf6763b217", "name": "Very large file: src/features/work/ClassesWidget.tsx (1634 lines)", "shortDescription": {"text": "Very large file: src/features/work/ClassesWidget.tsx (1634 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-9e7a1ddf7c1859e4", "name": "Very large file: src/features/work/Attendance.tsx (2262 lines)", "shortDescription": {"text": "Very large file: src/features/work/Attendance.tsx (2262 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-c89cad732616b1a5", "name": "Very large file: src/features/work/QuestionBank.tsx (2271 lines)", "shortDescription": {"text": "Very large file: src/features/work/QuestionBank.tsx (2271 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-46cb33f8cdc6a842", "name": "Very large file: src/features/work/TodoWidget.tsx (1863 lines)", "shortDescription": {"text": "Very large file: src/features/work/TodoWidget.tsx (1863 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-aeadb3b1690dde45", "name": "Very large file: src/features/work/ParentComms.tsx (1992 lines)", "shortDescription": {"text": "Very large file: src/features/work/ParentComms.tsx (1992 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-55af21d9179d406d", "name": "Very large file: src/features/work/MeetingNotes.tsx (1554 lines)", "shortDescription": {"text": "Very large file: src/features/work/MeetingNotes.tsx (1554 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 17 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 330 placeholder/mock markers across 96 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-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9f75412a3437d19", "name": "Commented-code block (7 lines) in playwright.config.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in playwright.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-18ec085236dfaa19", "name": "Commented-code block (8 lines) in scripts/art-manifest.mjs:1", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/art-manifest.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de8e1fc2debf66c7", "name": "Commented-code block (7 lines) in scripts/verify-docaligner.mjs:1", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/verify-docaligner.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c83dfe94b1875d1", "name": "Commented-code block (6 lines) in scripts/gen-personas.mjs:1", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/gen-personas.mjs:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64de6db25f5548cb", "name": "Commented-code block (9 lines) in scripts/generate-art.mjs:2", "shortDescription": {"text": "Commented-code block (9 lines) in scripts/generate-art.mjs: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-59d8c3ab43a6c935", "name": "Commented-code block (6 lines) in scripts/scriptable/ntk-timetable-widget.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/scriptable/ntk-timetable-widget.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a581fd42ab3d122", "name": "Legacy-named symbol `journal_v2` in scripts/scriptable/ntk-widget.js:135", "shortDescription": {"text": "Legacy-named symbol `journal_v2` in scripts/scriptable/ntk-widget.js:135"}, "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-c7d4b2c292b5cd05", "name": "Commented-code block (5 lines) in scripts/scriptable/ntk-widget.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/scriptable/ntk-widget.js:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28dd8603373436f9", "name": "Commented-code block (6 lines) in supabase/functions/forum/index.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/forum/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-f915e3cf866dd87e", "name": "Commented-code block (9 lines) in supabase/functions/team-billing/index.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/team-billing/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-4289e83025d81829", "name": "Commented-code block (8 lines) in supabase/functions/stripe-webhook/index.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/stripe-webhook/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-ddba61cdeca43af9", "name": "Commented-code block (8 lines) in supabase/functions/admin/index.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in supabase/functions/admin/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-39206fe6ab4909a4", "name": "Commented-code block (5 lines) in supabase/functions/support-admin/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/support-admin/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-1a91e738916e28e4", "name": "Commented-code block (10 lines) in supabase/functions/stripe-billing/index.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/stripe-billing/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-d180926ce00a21f1", "name": "Commented-code block (7 lines) in supabase/functions/gemini/index.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/gemini/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-1e4b256315d287a6", "name": "Commented-code block (5 lines) in supabase/functions/support/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/support/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-912c138fdf6de667", "name": "Commented-code block (6 lines) in supabase/functions/calendar-feed/index.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/calendar-feed/index.ts: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-b92271d697a2439a", "name": "Commented-code block (9 lines) in supabase/functions/_shared/email.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in supabase/functions/_shared/email.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-544257c83c35e65c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/email.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/email.ts:35"}, "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-dd8cc1fddb002012", "name": "Commented-code block (7 lines) in src/i18n/index.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/i18n/index.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-60714a2d9f13ebb6", "name": "Commented-code block (6 lines) in src/i18n/appEn.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/i18n/appEn.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-ddd1fdc9adb76430", "name": "Commented-code block (5 lines) in src/ui/index.tsx:20", "shortDescription": {"text": "Commented-code block (5 lines) in src/ui/index.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-f89a9ca4e0cab43f", "name": "Commented-code block (8 lines) in src/components/PwaUpdater.tsx:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/PwaUpdater.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-6cc15a9f4a58cd12", "name": "Commented-code block (6 lines) in src/components/BottomNav.tsx:15", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/BottomNav.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-026559873a704f19", "name": "Commented-code block (6 lines) in src/components/SupportButton.tsx:15", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/SupportButton.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a792ec56b09a2037", "name": "Commented-code block (7 lines) in src/components/ErrorBoundary.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/ErrorBoundary.tsx: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-e1b676c240574b80", "name": "Commented-code block (7 lines) in src/components/CookieConsent.tsx:13", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/CookieConsent.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-deb845c9b9d8479b", "name": "Commented-code block (5 lines) in src/components/OnboardingModal.tsx:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/OnboardingModal.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-def1698806cd5d91", "name": "Commented-code block (7 lines) in src/components/Illustration.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/Illustration.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-6e3772c5a99a6a8b", "name": "Commented-code block (8 lines) in src/components/PlanBadge.tsx:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/PlanBadge.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-958043f219aec7ee", "name": "Commented-code block (6 lines) in src/components/commandPalette/util.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/commandPalette/util.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-ab707a57a72dffda", "name": "Commented-code block (11 lines) in src/components/commandPalette/util.test.ts:9", "shortDescription": {"text": "Commented-code block (11 lines) in src/components/commandPalette/util.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd811c780da68435", "name": "Commented-code block (6 lines) in src/components/sidebar/pins.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/sidebar/pins.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-86cf371bc7d50f14", "name": "Commented-code block (6 lines) in src/modes/modes.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/modes/modes.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-2d1c135355b1f9de", "name": "Commented-code block (8 lines) in src/lib/support.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/support.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-5973555b6ba7aeda", "name": "Commented-code block (14 lines) in src/lib/aiJson.ts:1", "shortDescription": {"text": "Commented-code block (14 lines) in src/lib/aiJson.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-958e3ce8006d1d19", "name": "Commented-code block (9 lines) in src/lib/googleDrive.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/googleDrive.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-db24d07c9bdc50dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/googleDrive.ts:195", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/googleDrive.ts:195"}, "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-17e37700ecf857d9", "name": "Commented-code block (10 lines) in src/lib/observability.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/observability.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-b795c21cce572a59", "name": "Commented-code block (10 lines) in src/lib/billing.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/billing.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-02dde44681d0eaa3", "name": "Legacy-named symbol `onboarded_v1` in src/lib/demoData.ts:42", "shortDescription": {"text": "Legacy-named symbol `onboarded_v1` in src/lib/demoData.ts:42"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-206e56c73d4450db", "name": "Commented-code block (9 lines) in src/lib/demoData.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/demoData.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-cc2c4c04f68db145", "name": "Commented-code block (6 lines) in src/lib/team.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/team.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-172ddcb75b3d00e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/team.ts:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/team.ts:124"}, "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-0ba8ba3f6d96e617", "name": "Commented-code block (9 lines) in src/lib/aiJson.test.ts:9", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/aiJson.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6f794e8bb2933bc", "name": "Commented-code block (7 lines) in src/lib/store.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/store.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-c6e8668d808b11f1", "name": "Commented-code block (8 lines) in src/lib/profile.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/profile.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-be88a0e68254300b", "name": "Commented-code block (7 lines) in src/lib/personas.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/personas.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-ad1a48cf82819df7", "name": "Commented-code block (6 lines) in src/lib/community.ts:16", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/community.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2beba855ebea8242", "name": "Commented-code block (10 lines) in src/lib/supabaseStorage.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/supabaseStorage.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-5c59ce7c0a2d760a", "name": "Commented-code block (5 lines) in src/lib/store.test.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/store.test.ts: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-e9526949976c5638", "name": "Commented-code block (10 lines) in src/lib/sync.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/sync.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-4d0dd1f4f50bff12", "name": "Commented-code block (6 lines) in src/lib/supabase.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/supabase.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-84eb565bebcab877", "name": "Commented-code block (5 lines) in src/lib/srs.test.ts:147", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/srs.test.ts:147"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a9eecddc17db35f", "name": "Commented-code block (7 lines) in src/lib/testPro.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/testPro.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-ce12e5945ac5c75d", "name": "Commented-code block (7 lines) in src/lib/admin.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/admin.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-d2aae5ffbf202102", "name": "Commented-code block (6 lines) in src/lib/devAuth.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/devAuth.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-ea11e55fde4cc454", "name": "Commented-code block (8 lines) in src/lib/aiClient.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/aiClient.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-accc0903c8600f02", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/aiClient.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/aiClient.ts:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-377b65b306abe164", "name": "Commented-code block (6 lines) in src/lib/announcements.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/announcements.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-a308f658abc7e9b6", "name": "Commented-code block (7 lines) in src/lib/resourceThumb.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/resourceThumb.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-ab3786f40f168c2f", "name": "Commented-code block (12 lines) in src/lib/export/pptxPacksGallery6.ts:1", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/export/pptxPacksGallery6.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-f3d2466ca9a8b36e", "name": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery5.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery5.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-c736f99f150e6b69", "name": "Commented-code block (11 lines) in src/lib/export/pptxPacks.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/export/pptxPacks.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-b17245adfe33b510", "name": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery1.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery1.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-9cf1db7df8a65e7a", "name": "Commented-code block (10 lines) in src/lib/export/stock.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/export/stock.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-4f494fead2c7d2c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/export/stock.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/export/stock.ts:67"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-087a041b08c28003", "name": "Commented-code block (9 lines) in src/lib/export/pptxGradients.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/export/pptxGradients.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-1bab70b393951ef8", "name": "Commented-code block (8 lines) in src/lib/export/slideTextures.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/lib/export/slideTextures.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-042d30a862b79e80", "name": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery4.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery4.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-1fc6dc89c1cca44b", "name": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery7.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery7.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-8104a088fd3ed070", "name": "Commented-code block (10 lines) in src/lib/export/slideTitleFont.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/export/slideTitleFont.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-fbdf56aa6dde1a1f", "name": "Commented-code block (10 lines) in src/lib/export/pptx.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/export/pptx.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-e776e279294603f1", "name": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery3.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery3.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-b82d6fbce1aa3672", "name": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery2.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery2.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-b3e3110852a7d558", "name": "Commented-code block (6 lines) in src/lib/export/types.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/export/types.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-92fa53ec7a0d4f14", "name": "Commented-code block (10 lines) in src/lib/export/pptxText.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/export/pptxText.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-7813afd72433cd2e", "name": "Commented-code block (12 lines) in src/lib/export/pptxLayouts.ts:1", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/export/pptxLayouts.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-8e17f7a0703f8811", "name": "Commented-code block (6 lines) in src/marketing/Pricing.tsx:23", "shortDescription": {"text": "Commented-code block (6 lines) in src/marketing/Pricing.tsx:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4756b01d29f8b201", "name": "Commented-code block (9 lines) in src/marketing/Landing.tsx:26", "shortDescription": {"text": "Commented-code block (9 lines) in src/marketing/Landing.tsx:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b24006782fb65eb", "name": "Commented-code block (6 lines) in src/pages/Admin.tsx:69", "shortDescription": {"text": "Commented-code block (6 lines) in src/pages/Admin.tsx:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e61f2d5eb133d988", "name": "Commented-code block (6 lines) in src/hooks/useLocalStorage.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useLocalStorage.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-b80aebccdd437c09", "name": "Commented-code block (7 lines) in src/hooks/useSubscription.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/hooks/useSubscription.ts: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-b50f1826b348621a", "name": "Commented-code block (6 lines) in src/hooks/useFeatureFlag.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/hooks/useFeatureFlag.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-c2fd54426830835e", "name": "Commented-code block (7 lines) in src/context/ModeContext.tsx:17", "shortDescription": {"text": "Commented-code block (7 lines) in src/context/ModeContext.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c3ebaf0734116cb", "name": "Commented-code block (6 lines) in src/context/AuthContext.tsx:23", "shortDescription": {"text": "Commented-code block (6 lines) in src/context/AuthContext.tsx:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd07f7ad140b8b74", "name": "Commented-code block (6 lines) in src/context/ConfirmContext.tsx:12", "shortDescription": {"text": "Commented-code block (6 lines) in src/context/ConfirmContext.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-de67a4250df68dde", "name": "Commented-code block (6 lines) in src/features/featureIcons.tsx:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/featureIcons.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-dc72074fa3bc15ee", "name": "Commented-code block (6 lines) in src/features/types.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/types.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-84cb20078a51a04d", "name": "Commented-code block (6 lines) in src/features/settings/appearancePrefs.test.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/settings/appearancePrefs.test.ts: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-38a7e0f1868a917e", "name": "Legacy-named symbol `journal_v2` in src/features/settings/dataOverview.ts:44", "shortDescription": {"text": "Legacy-named symbol `journal_v2` in src/features/settings/dataOverview.ts:44"}, "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-a6fd15a3a06bd44c", "name": "Commented-code block (12 lines) in src/features/settings/dataOverview.ts:1", "shortDescription": {"text": "Commented-code block (12 lines) in src/features/settings/dataOverview.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-aaa7f0d066f359fa", "name": "Commented-code block (13 lines) in src/features/settings/appearancePrefs.ts:1", "shortDescription": {"text": "Commented-code block (13 lines) in src/features/settings/appearancePrefs.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-3f0bcb87d3cab7c2", "name": "Commented-code block (8 lines) in src/features/settings/dataOverview.test.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/settings/dataOverview.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0306852051aed84", "name": "Commented-code block (10 lines) in src/features/shared/GlobalSearch.tsx:115", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/shared/GlobalSearch.tsx:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fabfe986edebcb7", "name": "Commented-code block (12 lines) in src/features/shared/QuizMode.tsx:13", "shortDescription": {"text": "Commented-code block (12 lines) in src/features/shared/QuizMode.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-dcb187e2fcefde8e", "name": "Legacy-named symbol `notes_rich_v2` in src/features/shared/AIAssistant.tsx:535", "shortDescription": {"text": "Legacy-named symbol `notes_rich_v2` in src/features/shared/AIAssistant.tsx:535"}, "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-597d45c4fceb7fcf", "name": "Commented-code block (15 lines) in src/features/shared/AIAssistant.tsx:120", "shortDescription": {"text": "Commented-code block (15 lines) in src/features/shared/AIAssistant.tsx:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93611094d2babff6", "name": "Legacy-named symbol `notes_rich_v2` in src/features/shared/Inbox.tsx:45", "shortDescription": {"text": "Legacy-named symbol `notes_rich_v2` in src/features/shared/Inbox.tsx:45"}, "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-7cdd1457132fe9ac", "name": "Commented-code block (8 lines) in src/features/shared/Inbox.tsx:109", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/shared/Inbox.tsx:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe96484be32c2f6e", "name": "Commented-code block (9 lines) in src/features/shared/AskData.tsx:35", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/shared/AskData.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7544592ece9eaaa4", "name": "Commented-code block (6 lines) in src/features/shared/quiz/SetupView.tsx:53", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/shared/quiz/SetupView.tsx:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39333ebed02ecc2d", "name": "Commented-code block (6 lines) in src/features/shared/quiz/util.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/shared/quiz/util.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-a0dd5f8099429e3f", "name": "Commented-code block (10 lines) in src/features/shared/quiz/streak-and-mistakes.test.ts:10", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/shared/quiz/streak-and-mistakes.test.ts: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-7c8171a0d0a07cb8", "name": "Commented-code block (7 lines) in src/features/shared/globalSearch/util.ts:177", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/shared/globalSearch/util.ts:177"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2cb13dafcf849e40", "name": "Commented-code block (11 lines) in src/features/shared/globalSearch/util.test.ts:23", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/shared/globalSearch/util.test.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-424f40c086c5e750", "name": "Commented-code block (9 lines) in src/features/shared/quickAdd/QuickAddButton.tsx:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/shared/quickAdd/QuickAddButton.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-0b58be09c9947078", "name": "Commented-code block (8 lines) in src/features/shared/quickAdd/QuickAddModal.tsx:38", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/shared/quickAdd/QuickAddModal.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-41c5aba52d8ea3fe", "name": "Commented-code block (14 lines) in src/features/shared/quickAdd/parse.test.ts:4", "shortDescription": {"text": "Commented-code block (14 lines) in src/features/shared/quickAdd/parse.test.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-fffb45378ba40cd9", "name": "Commented-code block (8 lines) in src/features/shared/quickAdd/parse.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/shared/quickAdd/parse.ts: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-9181c3bee377b088", "name": "Commented-code block (7 lines) in src/features/shared/countdown/grouping.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/shared/countdown/grouping.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-814fe9602efefaf6", "name": "Commented-code block (7 lines) in src/features/shared/countdown/grouping.test.ts:12", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/shared/countdown/grouping.test.ts: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-aed0ca070dd7d2d8", "name": "Commented-code block (6 lines) in src/features/shared/inbox/ai.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/shared/inbox/ai.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-ea852dd310b984d0", "name": "Legacy-named symbol `inbox_meta_v2` in src/features/shared/inbox/store.ts:12", "shortDescription": {"text": "Legacy-named symbol `inbox_meta_v2` in src/features/shared/inbox/store.ts:12"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8e72386fd0b03e0", "name": "Commented-code block (6 lines) in src/features/shared/inbox/store.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/shared/inbox/store.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-1642cf59069b2b25", "name": "Legacy-named symbol `pinnedOld` in src/features/shared/inbox/util.test.ts:208", "shortDescription": {"text": "Legacy-named symbol `pinnedOld` in src/features/shared/inbox/util.test.ts:208"}, "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-5d9f6112c8ab7cf8", "name": "Commented-code block (14 lines) in src/features/shared/inbox/ai.test.ts:1", "shortDescription": {"text": "Commented-code block (14 lines) in src/features/shared/inbox/ai.test.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-62441cb0f9681d32", "name": "Commented-code block (8 lines) in src/features/shared/inbox/types.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/shared/inbox/types.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-bea4bd734eb4dae6", "name": "Commented-code block (6 lines) in src/features/shared/shortcuts/util.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/shared/shortcuts/util.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-04878a07e99e2eb9", "name": "Commented-code block (8 lines) in src/features/shared/shortcuts/util.test.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/shared/shortcuts/util.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee7d1db17baf8f42", "name": "Commented-code block (5 lines) in src/features/shared/shortcuts/ShortcutsModal.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/shared/shortcuts/ShortcutsModal.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-2b89be201ec1a5da", "name": "Commented-code block (7 lines) in src/features/shared/aiAssistant/markdown.tsx:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/shared/aiAssistant/markdown.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-628937219ce7c23b", "name": "Legacy-named symbol `ai_thread_meta_v1` in src/features/shared/aiAssistant/store.ts:9", "shortDescription": {"text": "Legacy-named symbol `ai_thread_meta_v1` in src/features/shared/aiAssistant/store.ts:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f9eed2b06d2e723", "name": "Legacy-named symbol `tooOld` in src/features/shared/aiAssistant/util.test.ts:308", "shortDescription": {"text": "Legacy-named symbol `tooOld` in src/features/shared/aiAssistant/util.test.ts:308"}, "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-31eac928cc2ce80c", "name": "Commented-code block (5 lines) in src/features/shared/aiAssistant/util.test.ts:188", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/shared/aiAssistant/util.test.ts:188"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a568d8e1804a1ee", "name": "Commented-code block (5 lines) in src/features/shared/aiAssistant/templates.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/shared/aiAssistant/templates.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-81d5290f67173aa7", "name": "Commented-code block (9 lines) in src/features/shared/aiAssistant/i18n.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/shared/aiAssistant/i18n.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-c7a48cb196208656", "name": "Commented-code block (7 lines) in src/features/shared/aiAssistant/types.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/shared/aiAssistant/types.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-832dceee7a2134d2", "name": "Commented-code block (9 lines) in src/features/shared/calendar/CalendarSubscribe.tsx:27", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/shared/calendar/CalendarSubscribe.tsx:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de3dc7c8de53c017", "name": "Commented-code block (6 lines) in src/features/shared/calendar/ics.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/shared/calendar/ics.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86c47fda7de7f7a1", "name": "Commented-code block (5 lines) in src/features/shared/calendar/IcsExportModal.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/shared/calendar/IcsExportModal.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-e422114e5669f631", "name": "Commented-code block (11 lines) in src/features/shared/calendar/calendarFeed.ts:3", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/shared/calendar/calendarFeed.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-abeba71b77fa8845", "name": "Commented-code block (6 lines) in src/features/shared/calendar/EventEditor.test.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/shared/calendar/EventEditor.test.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-c91d7afd7c231203", "name": "Commented-code block (5 lines) in src/features/shared/calendar/EventEditor.tsx:259", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/shared/calendar/EventEditor.tsx:259"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c82342f0dbba6bf", "name": "Commented-code block (10 lines) in src/features/learning/LearningDashboard.tsx:73", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/learning/LearningDashboard.tsx:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03d8ced6366740c0", "name": "Legacy-named symbol `journal_v2` in src/features/learning/Journal.tsx:96", "shortDescription": {"text": "Legacy-named symbol `journal_v2` in src/features/learning/Journal.tsx:96"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3213cdf127764dd", "name": "Commented-code block (12 lines) in src/features/learning/Journal.tsx:86", "shortDescription": {"text": "Commented-code block (12 lines) in src/features/learning/Journal.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-ec2002e338ce0ce9", "name": "Commented-code block (8 lines) in src/features/learning/Flashcards.tsx:66", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/Flashcards.tsx:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be08c8acb2da2a57", "name": "Commented-code block (7 lines) in src/features/learning/HabitTracker.tsx:55", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/HabitTracker.tsx:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ff96c7239ec3ff7", "name": "Commented-code block (18 lines) in src/features/learning/CardGenerator.tsx:91", "shortDescription": {"text": "Commented-code block (18 lines) in src/features/learning/CardGenerator.tsx: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-93ab51e57d75fb76", "name": "Commented-code block (7 lines) in src/features/learning/Fitness.tsx:10", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/Fitness.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-fe38d5cafe946614", "name": "Commented-code block (8 lines) in src/features/learning/ReadingList.tsx:936", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/ReadingList.tsx:936"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04cba704b481b472", "name": "Commented-code block (9 lines) in src/features/learning/NotesWidget.tsx:91", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/learning/NotesWidget.tsx: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-3266002fa27e5588", "name": "Commented-code block (10 lines) in src/features/learning/reading/extra.test.ts:12", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/learning/reading/extra.test.ts: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-1213d3facdeb1a4c", "name": "Commented-code block (8 lines) in src/features/learning/reading/readingPace.test.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/reading/readingPace.test.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-b48b46e306424fc7", "name": "Legacy-named symbol `reading_books_v2` in src/features/learning/reading/demo.ts:26", "shortDescription": {"text": "Legacy-named symbol `reading_books_v2` in src/features/learning/reading/demo.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-37cfa12e7701afb5", "name": "Commented-code block (8 lines) in src/features/learning/reading/demo.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/reading/demo.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-e874162f474803c8", "name": "Commented-code block (7 lines) in src/features/learning/reading/Charts.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/reading/Charts.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-e958770f03df6d2e", "name": "Commented-code block (7 lines) in src/features/learning/reading/challenge.test.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/reading/challenge.test.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-922212688d5ee493", "name": "Legacy-named symbol `reading_books_v2` in src/features/learning/reading/types.ts:67", "shortDescription": {"text": "Legacy-named symbol `reading_books_v2` in src/features/learning/reading/types.ts:67"}, "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-64f1195fc1e1b146", "name": "Commented-code block (7 lines) in src/features/learning/reading/types.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/reading/types.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-5581128236338f83", "name": "Commented-code block (5 lines) in src/features/learning/goals/util.time.test.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/goals/util.time.test.ts: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-d60f9c4e3e9a5513", "name": "Commented-code block (8 lines) in src/features/learning/goals/demo.test.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/goals/demo.test.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-50a30c98fc9dd728", "name": "Commented-code block (5 lines) in src/features/learning/goals/demo.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/goals/demo.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-3f3b9cfa6141be17", "name": "Commented-code block (9 lines) in src/features/learning/goals/Charts.tsx:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/learning/goals/Charts.tsx: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-07cc303f0a9b7bf7", "name": "Commented-code block (8 lines) in src/features/learning/goals/types.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/goals/types.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-e59750aff3dbba35", "name": "Legacy-named symbol `habits_v2` in src/features/learning/habits/migrate.test.ts:209", "shortDescription": {"text": "Legacy-named symbol `habits_v2` in src/features/learning/habits/migrate.test.ts:209"}, "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-b22b738947cedfb0", "name": "Commented-code block (10 lines) in src/features/learning/habits/migrate.test.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/learning/habits/migrate.test.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-d3872a06790d55b4", "name": "Commented-code block (6 lines) in src/features/learning/habits/util.ts:75", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/habits/util.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-261eb6a3967839e9", "name": "Commented-code block (7 lines) in src/features/learning/habits/HabitRow.tsx:13", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/habits/HabitRow.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-80bb5d7c6561d600", "name": "Commented-code block (7 lines) in src/features/learning/habits/StatsView.tsx:19", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/habits/StatsView.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48f29d8f30f1d74d", "name": "Commented-code block (8 lines) in src/features/learning/habits/stats.test.ts:13", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/habits/stats.test.ts: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-b80ce091ce100e10", "name": "Commented-code block (7 lines) in src/features/learning/habits/HabitDetail.tsx:36", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/habits/HabitDetail.tsx:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ef053c89a299e04", "name": "Commented-code block (5 lines) in src/features/learning/habits/demo.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/habits/demo.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-abd307a58d451f43", "name": "Commented-code block (7 lines) in src/features/learning/habits/HabitEditor.tsx:36", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/habits/HabitEditor.tsx:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-976b93a4451342e0", "name": "Legacy-named symbol `habits_v2` in src/features/learning/habits/types.ts:218", "shortDescription": {"text": "Legacy-named symbol `habits_v2` in src/features/learning/habits/types.ts:218"}, "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-4f1075176353ed1a", "name": "Commented-code block (7 lines) in src/features/learning/habits/types.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/habits/types.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-5f5893cab97eead8", "name": "Commented-code block (7 lines) in src/features/learning/journal/util.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/journal/util.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-512ce91cb9f8b49d", "name": "Legacy-named symbol `journal_v2` in src/features/learning/journal/store.ts:7", "shortDescription": {"text": "Legacy-named symbol `journal_v2` in src/features/learning/journal/store.ts:7"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-96193755a55b5502", "name": "Commented-code block (9 lines) in src/features/learning/journal/store.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/learning/journal/store.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-f928aa481690eb93", "name": "Commented-code block (7 lines) in src/features/learning/journal/stats.test.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/journal/stats.test.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b0a3db3aa4ce4af", "name": "Legacy-named symbol `journal_v2` in src/features/learning/journal/demo.ts:11", "shortDescription": {"text": "Legacy-named symbol `journal_v2` in src/features/learning/journal/demo.ts:11"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-614bbf8d17fde102", "name": "Commented-code block (5 lines) in src/features/learning/journal/demo.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/journal/demo.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-c1e5cf550f1c40db", "name": "Commented-code block (7 lines) in src/features/learning/journal/review.test.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/journal/review.test.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-5fbf92ba5faa0523", "name": "Commented-code block (9 lines) in src/features/learning/journal/edge.test.ts:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/learning/journal/edge.test.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-6470078d353554eb", "name": "Legacy-named symbol `health_logs_v1` in src/features/learning/health/store.ts:6", "shortDescription": {"text": "Legacy-named symbol `health_logs_v1` in src/features/learning/health/store.ts:6"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae5ab24368806450", "name": "Commented-code block (7 lines) in src/features/learning/health/demo.test.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/health/demo.test.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-4f3854673f2d781d", "name": "Commented-code block (6 lines) in src/features/learning/health/demo.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/health/demo.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-0676af9a2acf5933", "name": "Commented-code block (8 lines) in src/features/learning/health/types.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/health/types.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-9411b1b07c0af268", "name": "Commented-code block (6 lines) in src/features/learning/dashboard/util.kpis.test.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/dashboard/util.kpis.test.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-33656c95437f4233", "name": "Legacy-named symbol `learning_dashboard_prefs_v1` in src/features/learning/dashboard/util.ts:528", "shortDescription": {"text": "Legacy-named symbol `learning_dashboard_prefs_v1` in src/features/learning/dashboard/util.ts:528"}, "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-682336e74e234cab", "name": "Commented-code block (5 lines) in src/features/learning/dashboard/util.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/dashboard/util.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-a7118a0aa78bb158", "name": "Commented-code block (8 lines) in src/features/learning/dashboard/util.test.ts:177", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/dashboard/util.test.ts:177"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6eece2838e0c01cd", "name": "Commented-code block (6 lines) in src/features/learning/dashboard/BentoOverview.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/dashboard/BentoOverview.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b49c062b515d843", "name": "Commented-code block (6 lines) in src/features/learning/cardgen/prompts.test.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/cardgen/prompts.test.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-8909ee0c7c51b92d", "name": "Commented-code block (7 lines) in src/features/learning/cardgen/normFront.test.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/cardgen/normFront.test.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-8a77bbdd486a4a30", "name": "Commented-code block (8 lines) in src/features/learning/cardgen/prompts.ts:16", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/cardgen/prompts.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9fbecf467a9455db", "name": "Commented-code block (12 lines) in src/features/learning/cardgen/swapAndDedup.test.ts:5", "shortDescription": {"text": "Commented-code block (12 lines) in src/features/learning/cardgen/swapAndDedup.test.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-53bd70b1ddc9b257", "name": "Commented-code block (8 lines) in src/features/learning/cardgen/store.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/cardgen/store.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-275310b3f6bc17f9", "name": "Commented-code block (7 lines) in src/features/learning/cardgen/store.test.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/cardgen/store.test.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-77840d7c4272f852", "name": "Commented-code block (5 lines) in src/features/learning/cardgen/Charts.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/cardgen/Charts.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-193d8ef3046d94f0", "name": "Commented-code block (7 lines) in src/features/learning/cardgen/dupFlag.test.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/cardgen/dupFlag.test.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-47205ee57a7ef771", "name": "Commented-code block (8 lines) in src/features/learning/cardgen/types.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/cardgen/types.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-dbfe2319179c5565", "name": "Commented-code block (7 lines) in src/features/learning/fitness/common.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/common.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-dab003ddc1355742", "name": "Commented-code block (6 lines) in src/features/learning/fitness/library/MuscleMap.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/library/MuscleMap.tsx: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-c72c082a59ccc9c7", "name": "Commented-code block (6 lines) in src/features/learning/fitness/library/util.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/library/util.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-fb8b98540e48fa1e", "name": "Legacy-named symbol `fitness_library_favs_v1` in src/features/learning/fitness/library/LibraryView.tsx:46", "shortDescription": {"text": "Legacy-named symbol `fitness_library_favs_v1` in src/features/learning/fitness/library/LibraryView.tsx:46"}, "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-10d29d7b5931db5d", "name": "Commented-code block (7 lines) in src/features/learning/fitness/library/data.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/library/data.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-cce172ba76ae47d7", "name": "Commented-code block (6 lines) in src/features/learning/fitness/coach/PlanGen.tsx:29", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/coach/PlanGen.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-69a189022e685f79", "name": "Commented-code block (7 lines) in src/features/learning/fitness/coach/FormQA.tsx:14", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/coach/FormQA.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1fc0157479f917e", "name": "Commented-code block (7 lines) in src/features/learning/fitness/coach/Assess.tsx:16", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/coach/Assess.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce363ddfe18398a2", "name": "Commented-code block (10 lines) in src/features/learning/fitness/coach/CoachView.tsx:10", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/learning/fitness/coach/CoachView.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-57c18b0d8229c01e", "name": "Legacy-named symbol `fitness_coach_plans_v1` in src/features/learning/fitness/coach/store.ts:43", "shortDescription": {"text": "Legacy-named symbol `fitness_coach_plans_v1` in src/features/learning/fitness/coach/store.ts:43"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-476c330ceb984af6", "name": "Commented-code block (8 lines) in src/features/learning/fitness/coach/store.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/coach/store.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-21f0e119b01cbc8b", "name": "Commented-code block (7 lines) in src/features/learning/fitness/body/BodyView.tsx:55", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/BodyView.tsx:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e1db12f59935192", "name": "Commented-code block (7 lines) in src/features/learning/fitness/body/util.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/util.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-4c5a84c0db3b1884", "name": "Legacy-named symbol `fitness_body_entries_v1` in src/features/learning/fitness/body/store.ts:9", "shortDescription": {"text": "Legacy-named symbol `fitness_body_entries_v1` in src/features/learning/fitness/body/store.ts:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8c2a41b471017f8", "name": "Commented-code block (7 lines) in src/features/learning/fitness/body/store.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/store.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-b2c742fabde44f8c", "name": "Commented-code block (7 lines) in src/features/learning/fitness/body/demo.test.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/demo.test.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-8acae144947b6ede", "name": "Commented-code block (7 lines) in src/features/learning/fitness/body/demo.ts:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/demo.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-24b5dcc43f82f426", "name": "Commented-code block (6 lines) in src/features/learning/fitness/body/Charts.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/body/Charts.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-5dad020331cf8f89", "name": "Commented-code block (6 lines) in src/features/learning/fitness/body/types.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/body/types.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-7c53d06116d1c91c", "name": "Commented-code block (6 lines) in src/features/learning/fitness/nutrition/util.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/nutrition/util.ts: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-edd063602dfdedfb", "name": "Legacy-named symbol `fitness_nutrition_v1` in src/features/learning/fitness/nutrition/store.ts:9", "shortDescription": {"text": "Legacy-named symbol `fitness_nutrition_v1` in src/features/learning/fitness/nutrition/store.ts:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9d887da8cdb0467", "name": "Commented-code block (8 lines) in src/features/learning/fitness/nutrition/store.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/nutrition/store.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-614c18eae0698d8b", "name": "Commented-code block (7 lines) in src/features/learning/fitness/nutrition/demo.test.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/nutrition/demo.test.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-4805a72baff723b3", "name": "Commented-code block (6 lines) in src/features/learning/fitness/nutrition/util.test.ts:455", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/nutrition/util.test.ts:455"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-048d2d7e8a444b06", "name": "Commented-code block (8 lines) in src/features/learning/fitness/nutrition/demo.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/nutrition/demo.ts: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-d786693dd34670de", "name": "Commented-code block (7 lines) in src/features/learning/fitness/nutrition/types.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/nutrition/types.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-84ea860ce05abbbb", "name": "Commented-code block (16 lines) in src/features/learning/fitness/nutrition/NutritionView.tsx:85", "shortDescription": {"text": "Commented-code block (16 lines) in src/features/learning/fitness/nutrition/NutritionView.tsx:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3ebf642596fc977", "name": "Commented-code block (8 lines) in src/features/learning/fitness/training/util.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/training/util.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-d9e65f6fe64c8ba6", "name": "Legacy-named symbol `fitness_training_v1` in src/features/learning/fitness/training/store.ts:12", "shortDescription": {"text": "Legacy-named symbol `fitness_training_v1` in src/features/learning/fitness/training/store.ts:12"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-beecbe62ec3bd539", "name": "Commented-code block (7 lines) in src/features/learning/fitness/training/store.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/store.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-9a1b2b3bd80e0f7d", "name": "Commented-code block (6 lines) in src/features/learning/fitness/training/demo.test.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/training/demo.test.ts: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-1eea22c643544ca6", "name": "Commented-code block (8 lines) in src/features/learning/fitness/training/demo.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/training/demo.ts: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-768e5a76cc58e374", "name": "Commented-code block (7 lines) in src/features/learning/fitness/training/Charts.test.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/Charts.test.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-131430cdb4712cb4", "name": "Commented-code block (7 lines) in src/features/learning/fitness/training/Charts.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/Charts.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-963f048354ebb466", "name": "Commented-code block (7 lines) in src/features/learning/fitness/training/types.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/types.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-a50a9b95565cb0c0", "name": "Commented-code block (7 lines) in src/features/learning/fitness/training/TrainingView.tsx:580", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/TrainingView.tsx:580"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2874bd1b17df59c", "name": "Commented-code block (7 lines) in src/features/learning/notes/relativeTime.test.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/notes/relativeTime.test.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-345a2df1e38e39c2", "name": "Commented-code block (8 lines) in src/features/learning/notes/computeStats.test.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/notes/computeStats.test.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-6d03c4d845da81eb", "name": "Legacy-named symbol `notes_rich_v2` in src/features/learning/notes/inboxTriage.regression.test.ts:8", "shortDescription": {"text": "Legacy-named symbol `notes_rich_v2` in src/features/learning/notes/inboxTriage.regression.test.ts:8"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ce56989bdb2b9e3", "name": "Commented-code block (13 lines) in src/features/learning/notes/inboxTriage.regression.test.ts:4", "shortDescription": {"text": "Commented-code block (13 lines) in src/features/learning/notes/inboxTriage.regression.test.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-f152ef1963009948", "name": "Legacy-named symbol `notes_notebooks_v2` in src/features/learning/notes/store.ts:70", "shortDescription": {"text": "Legacy-named symbol `notes_notebooks_v2` in src/features/learning/notes/store.ts:70"}, "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-46964d6f993c8645", "name": "Commented-code block (8 lines) in src/features/learning/notes/store.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/notes/store.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-34094e800505714d", "name": "Commented-code block (6 lines) in src/features/learning/notes/demo.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/notes/demo.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-c36c865608f71c54", "name": "Commented-code block (6 lines) in src/features/learning/notes/templates.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/notes/templates.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-cc28a2d62c3f0584", "name": "Commented-code block (6 lines) in src/features/learning/notes/Charts.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/notes/Charts.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-3c5edd975ffc88d8", "name": "Legacy-named symbol `dueOld` in src/features/learning/flashcards/srs.coverage.test.ts:115", "shortDescription": {"text": "Legacy-named symbol `dueOld` in src/features/learning/flashcards/srs.coverage.test.ts:115"}, "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-cbf093c3ad5a6597", "name": "Commented-code block (9 lines) in src/features/learning/flashcards/srs.coverage.test.ts:20", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/learning/flashcards/srs.coverage.test.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d4c1948664855e8", "name": "Commented-code block (6 lines) in src/features/learning/flashcards/srs.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/flashcards/srs.ts: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-b615fc215688a5dd", "name": "Commented-code block (8 lines) in src/features/learning/flashcards/store.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/learning/flashcards/store.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-15828b90d8862dca", "name": "Commented-code block (9 lines) in src/features/learning/flashcards/ReviewScreen.tsx:37", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/learning/flashcards/ReviewScreen.tsx:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89c715eb4c78d223", "name": "Commented-code block (10 lines) in src/features/learning/flashcards/store.test.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/learning/flashcards/store.test.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-6b048cbdecd612d4", "name": "Commented-code block (6 lines) in src/features/learning/flashcards/ImportExport.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/learning/flashcards/ImportExport.tsx:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13912d32a18aeb06", "name": "Commented-code block (5 lines) in src/features/learning/flashcards/BrowseView.tsx:53", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/flashcards/BrowseView.tsx:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19dd09eff366323f", "name": "Commented-code block (7 lines) in src/features/learning/flashcards/types.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/learning/flashcards/types.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-0304ba33673c5ee2", "name": "Commented-code block (5 lines) in src/features/learning/focus/charts.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/focus/charts.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-88abc967b6155662", "name": "Legacy-named symbol `focus_settings_v1` in src/features/learning/focus/store.ts:11", "shortDescription": {"text": "Legacy-named symbol `focus_settings_v1` in src/features/learning/focus/store.ts:11"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd0380b6ecb2b660", "name": "Commented-code block (5 lines) in src/features/learning/focus/store.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/learning/focus/store.test.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-6b5aeb7be57c63e3", "name": "Commented-code block (9 lines) in src/features/learning/focus/types.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/learning/focus/types.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-9762c021ca60ef00", "name": "Commented-code block (5 lines) in src/features/onboarding/ProfileSetupModal.tsx:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/onboarding/ProfileSetupModal.tsx:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01fe854e7454635d", "name": "Commented-code block (5 lines) in src/features/onboarding/ProfileGate.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/onboarding/ProfileGate.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-d445697ec52cbbde", "name": "Commented-code block (6 lines) in src/features/onboarding/logic.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/onboarding/logic.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-da57dd708c8e05d3", "name": "Commented-code block (13 lines) in src/features/work/trendHeat.ts:1", "shortDescription": {"text": "Commented-code block (13 lines) in src/features/work/trendHeat.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-31b2102f3fb85f43", "name": "Commented-code block (10 lines) in src/features/work/BudgetTracker.tsx:101", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/BudgetTracker.tsx:101"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da3e213289b4ff12", "name": "Commented-code block (11 lines) in src/features/work/MaterialGen.tsx:29", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/work/MaterialGen.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9f5f7f12d7e9fdf", "name": "Commented-code block (7 lines) in src/features/work/LessonPlanner.tsx:84", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/LessonPlanner.tsx:84"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d3303525f232a2d", "name": "Commented-code block (8 lines) in src/features/work/ResourceLibrary.tsx:88", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/ResourceLibrary.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-7a3d54af98083384", "name": "Commented-code block (12 lines) in src/features/work/ClassesWidget.tsx:109", "shortDescription": {"text": "Commented-code block (12 lines) in src/features/work/ClassesWidget.tsx:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4a33eaee4a69ef3", "name": "Commented-code block (6 lines) in src/features/work/Team.tsx:38", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/Team.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-c1b4d1166bc30470", "name": "Commented-code block (13 lines) in src/features/work/Timetable.tsx:66", "shortDescription": {"text": "Commented-code block (13 lines) in src/features/work/Timetable.tsx:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e5b154c073a79df", "name": "Commented-code block (9 lines) in src/features/work/Grading.tsx:57", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/Grading.tsx:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8328e19474fe69af", "name": "Commented-code block (7 lines) in src/features/work/TodoWidget.tsx:80", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/TodoWidget.tsx:80"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af70fca2a14a1eb9", "name": "Commented-code block (8 lines) in src/features/work/trendHeat.test.ts:10", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/trendHeat.test.ts: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-382d308c0b5002fa", "name": "Commented-code block (8 lines) in src/features/work/ParentComms.tsx:110", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/ParentComms.tsx:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56a8e7c499f2a518", "name": "Commented-code block (5 lines) in src/features/work/MeetingNotes.tsx:48", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/MeetingNotes.tsx:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cc9147d8b66b9a1", "name": "Commented-code block (10 lines) in src/features/work/questionbank/util.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/questionbank/util.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-f97c885185098245", "name": "Commented-code block (7 lines) in src/features/work/questionbank/Charts.tsx:12", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/questionbank/Charts.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-ca44e9c61b995d67", "name": "Commented-code block (12 lines) in src/features/work/meetingNotes/util.ts:4", "shortDescription": {"text": "Commented-code block (12 lines) in src/features/work/meetingNotes/util.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-7f8eea0a605f14e5", "name": "Commented-code block (14 lines) in src/features/work/meetingNotes/NoteEditor.tsx:42", "shortDescription": {"text": "Commented-code block (14 lines) in src/features/work/meetingNotes/NoteEditor.tsx:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b8849fb78fcef6b", "name": "Commented-code block (5 lines) in src/features/work/lessonPlanner/fmtMin.test.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/lessonPlanner/fmtMin.test.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-1d35cab9bae34276", "name": "Commented-code block (6 lines) in src/features/work/lessonPlanner/lessonAi.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/lessonPlanner/lessonAi.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-f5d184d222818f46", "name": "Commented-code block (7 lines) in src/features/work/lessonPlanner/util.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/lessonPlanner/util.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-6835e39f1598bef0", "name": "Commented-code block (5 lines) in src/features/work/lessonPlanner/GenerateModal.tsx:20", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/lessonPlanner/GenerateModal.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-ad97d29cf8e408a9", "name": "Commented-code block (7 lines) in src/features/work/lessonPlanner/subjectTemplates.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/lessonPlanner/subjectTemplates.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-4d998a7d8a425bfb", "name": "Commented-code block (6 lines) in src/features/work/lessonPlanner/CoverageChart.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/lessonPlanner/CoverageChart.tsx: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-dce2ccd08ae27c65", "name": "Commented-code block (11 lines) in src/features/work/parentComms/util.ts:4", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/work/parentComms/util.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-fd4797c566f25072", "name": "Commented-code block (8 lines) in src/features/work/parentComms/TemplateManager.tsx:26", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/parentComms/TemplateManager.tsx:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58ec1f9bbfec04c0", "name": "Commented-code block (8 lines) in src/features/work/parentComms/CommEditor.tsx:46", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/parentComms/CommEditor.tsx:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f6c4ec314bcc623", "name": "Commented-code block (11 lines) in src/features/work/parentComms/reschedule.test.ts:5", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/work/parentComms/reschedule.test.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-568984b4018a85dd", "name": "Commented-code block (11 lines) in src/features/work/parentComms/util.contactGaps.test.ts:10", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/work/parentComms/util.contactGaps.test.ts: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-6d0a606609f274c4", "name": "Commented-code block (10 lines) in src/features/work/parentComms/util.boundaries.test.ts:23", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/parentComms/util.boundaries.test.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58114cb7c739abed", "name": "Commented-code block (11 lines) in src/features/work/parentComms/monthlyTrend.test.ts:5", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/work/parentComms/monthlyTrend.test.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-81650abfe6541762", "name": "Commented-code block (8 lines) in src/features/work/timetable/WeekGrid.tsx:13", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/timetable/WeekGrid.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-8c6d69afbf45a75a", "name": "Commented-code block (10 lines) in src/features/work/timetable/SlotEditor.tsx:37", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/timetable/SlotEditor.tsx:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25350f00f966b477", "name": "Commented-code block (9 lines) in src/features/work/timetable/util.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/timetable/util.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-a148bfeabddcfd3e", "name": "Commented-code block (5 lines) in src/features/work/timetable/PrintView.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/timetable/PrintView.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-e9c86830fa44aea0", "name": "Commented-code block (6 lines) in src/features/work/timetable/workload-bugs.test.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/timetable/workload-bugs.test.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aac0e5bcf4ab6969", "name": "Commented-code block (7 lines) in src/features/work/timetable/WorkloadView.tsx:15", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/timetable/WorkloadView.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9313c0c6de6219a6", "name": "Commented-code block (10 lines) in src/features/work/shared/csv.ts:1", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/shared/csv.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-8a97cc789bf721e7", "name": "Commented-code block (6 lines) in src/features/work/rubric/rubricPrompts.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/rubric/rubricPrompts.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-af4166e9bd2945f6", "name": "Commented-code block (5 lines) in src/features/work/budget/scheduling.test.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/budget/scheduling.test.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a6ac6e3ea50cddd", "name": "Commented-code block (13 lines) in src/features/work/budget/util.ts:4", "shortDescription": {"text": "Commented-code block (13 lines) in src/features/work/budget/util.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-36bb22647accaf26", "name": "Commented-code block (10 lines) in src/features/work/budget/Charts.tsx:13", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/budget/Charts.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-5f91b4107fe53a9a", "name": "Commented-code block (7 lines) in src/features/work/dashboard/util.coverage.test.ts:14", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/dashboard/util.coverage.test.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d5dbed48ef13a20", "name": "Commented-code block (6 lines) in src/features/work/dashboard/util.ts:32", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/dashboard/util.ts:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2eea67d2d9b4f9ee", "name": "Commented-code block (11 lines) in src/features/work/dashboard/store.ts:4", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/work/dashboard/store.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-5518bd34262e07d7", "name": "Commented-code block (7 lines) in src/features/work/dashboard/i18n.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/dashboard/i18n.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-f280fa67c3009325", "name": "Commented-code block (10 lines) in src/features/work/dashboard/Charts.tsx:5", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/dashboard/Charts.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-1ec324074d2495ef", "name": "Commented-code block (6 lines) in src/features/work/dashboard/types.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/dashboard/types.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-8232994605db3bdf", "name": "Commented-code block (7 lines) in src/features/work/materialGen/QuestionGeneratorModal.tsx:31", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/materialGen/QuestionGeneratorModal.tsx:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58b9448c1fb6df29", "name": "Commented-code block (9 lines) in src/features/work/materialGen/WorksheetGenerator.tsx:47", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/materialGen/WorksheetGenerator.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-692c3107d197e879", "name": "Commented-code block (11 lines) in src/features/work/materialGen/PaperGenerator.tsx:47", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/work/materialGen/PaperGenerator.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d07307fc0f39e647", "name": "Commented-code block (7 lines) in src/features/work/materialGen/engine.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/materialGen/engine.ts: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-a0def60fd8bd5626", "name": "Commented-code block (6 lines) in src/features/work/docDigest/digestStore.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/docDigest/digestStore.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-a466987041c2856d", "name": "Commented-code block (8 lines) in src/features/work/docDigest/extract.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/docDigest/extract.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-9cf0cf952f5ca7ef", "name": "Commented-code block (6 lines) in src/features/work/classes/StudentProfile.tsx:52", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/classes/StudentProfile.tsx:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61bd3a209a5f6a4f", "name": "Commented-code block (7 lines) in src/features/work/classes/util.ts:294", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/classes/util.ts:294"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ddcac0b0cca98bd3", "name": "Commented-code block (5 lines) in src/features/work/classes/util.academics.test.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/classes/util.academics.test.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-701d22906e196fe4", "name": "Commented-code block (5 lines) in src/features/work/classes/SeatingChart.tsx:26", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/classes/SeatingChart.tsx:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bc2ba286a9aba7d", "name": "Commented-code block (5 lines) in src/features/work/classes/util.extra.test.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/classes/util.extra.test.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c585707e2dc1f9b", "name": "Commented-code block (9 lines) in src/features/work/classes/types.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/classes/types.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-b5c81eec59be6b68", "name": "Commented-code block (5 lines) in src/features/work/community/util.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/community/util.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-541e7182beeb60de", "name": "Commented-code block (6 lines) in src/features/work/community/demo.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/community/demo.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-0c065573d94b2ab4", "name": "Commented-code block (5 lines) in src/features/work/attendance/util.edge.test.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/attendance/util.edge.test.ts:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-316b467cc0b1277b", "name": "Commented-code block (9 lines) in src/features/work/attendance/util.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/attendance/util.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-3603d18dd59df546", "name": "Commented-code block (7 lines) in src/features/work/attendance/RegisterGrid.tsx:22", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/attendance/RegisterGrid.tsx:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-47689837a54afc8e", "name": "Commented-code block (7 lines) in src/features/work/attendance/TrendChart.tsx:7", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/attendance/TrendChart.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-4c18db4269a18e29", "name": "Commented-code block (7 lines) in src/features/work/attendance/util.classify.test.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/attendance/util.classify.test.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-524c5ad8d7af3fe3", "name": "Commented-code block (7 lines) in src/features/work/attendance/i18n.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/attendance/i18n.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-74a6f52c264f9016", "name": "Commented-code block (6 lines) in src/features/work/attendance/util.summary.test.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/attendance/util.summary.test.ts: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-b4d23d57e8ab9bfc", "name": "Commented-code block (5 lines) in src/features/work/resourceLibrary/DetailModal.tsx:57", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/resourceLibrary/DetailModal.tsx:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1951d39d7359781", "name": "Commented-code block (10 lines) in src/features/work/resourceLibrary/util.ts:4", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/resourceLibrary/util.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-f48345a1184cce5f", "name": "Commented-code block (8 lines) in src/features/work/resourceLibrary/trends.test.ts:13", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/resourceLibrary/trends.test.ts: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-8f4244f4e31bcc23", "name": "Commented-code block (6 lines) in src/features/work/resourceLibrary/drive/store.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/resourceLibrary/drive/store.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-82427a3e0457b229", "name": "Commented-code block (9 lines) in src/features/work/scan/scanStore.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/scan/scanStore.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-29253b7480dd18c5", "name": "Commented-code block (11 lines) in src/features/work/scan/lib/mlDetect.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in src/features/work/scan/lib/mlDetect.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-25517d797752e774", "name": "Commented-code block (9 lines) in src/features/work/scan/lib/ocr.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/scan/lib/ocr.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-029eea4f6209715e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/work/scan/lib/buildPdf.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/work/scan/lib/buildPdf.ts:19"}, "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-b6e19988a08fbe1a", "name": "Commented-code block (13 lines) in src/features/work/adminDocs/docxAi.ts:1", "shortDescription": {"text": "Commented-code block (13 lines) in src/features/work/adminDocs/docxAi.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-5503ca5efafcde5f", "name": "Commented-code block (6 lines) in src/features/work/adminDocs/TemplatePreview.tsx:19", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/adminDocs/TemplatePreview.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a397502328d3ab81", "name": "Commented-code block (8 lines) in src/features/work/adminDocs/docxTableInject.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/adminDocs/docxTableInject.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-afb6e2ac45bfbc0f", "name": "Commented-code block (5 lines) in src/features/work/adminDocs/highlight.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/adminDocs/highlight.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-382fb8786ff8610e", "name": "Commented-code block (9 lines) in src/features/work/adminDocs/adminDocStore.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/adminDocs/adminDocStore.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-e1d009505cd7eb1e", "name": "Commented-code block (7 lines) in src/features/work/adminDocs/PdfTemplatePreview.tsx:20", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/adminDocs/PdfTemplatePreview.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-b2fc923e6203d8d9", "name": "Commented-code block (5 lines) in src/features/work/adminDocs/pdfPreview.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/adminDocs/pdfPreview.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-fa09b714d277ca8e", "name": "Commented-code block (6 lines) in src/features/work/adminDocs/FillForm.tsx:19", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/adminDocs/FillForm.tsx:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-180e5dd1cb50617e", "name": "Commented-code block (7 lines) in src/features/work/adminDocs/docxEngine.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/adminDocs/docxEngine.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-25d6700e4e60dd7a", "name": "Commented-code block (5 lines) in src/features/work/adminDocs/docxTableInject.test.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/adminDocs/docxTableInject.test.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-918931a4ff5d036e", "name": "Commented-code block (7 lines) in src/features/work/adminDocs/pdfEngine.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/adminDocs/pdfEngine.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-1b9877b194447991", "name": "Commented-code block (9 lines) in src/features/work/adminDocs/AdminDocs.tsx:25", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/adminDocs/AdminDocs.tsx:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a1342823d506a15", "name": "Commented-code block (10 lines) in src/features/work/adminDocs/TemplateUpload.tsx:32", "shortDescription": {"text": "Commented-code block (10 lines) in src/features/work/adminDocs/TemplateUpload.tsx:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbaa16cf680fb0a2", "name": "Commented-code block (8 lines) in src/features/work/curriculum/util.edge.test.ts:5", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/curriculum/util.edge.test.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-77ad3adcb104ae64", "name": "Commented-code block (7 lines) in src/features/work/curriculum/util.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/curriculum/util.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-547e21a8c363a9e6", "name": "Commented-code block (6 lines) in src/features/work/curriculum/Charts.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/curriculum/Charts.tsx: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-de0babf6fb7bc6ea", "name": "Commented-code block (9 lines) in src/features/work/topicImport/reconcile.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/topicImport/reconcile.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-e8832e5f43f4164b", "name": "Commented-code block (8 lines) in src/features/work/topicImport/applyTopics.ts:42", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/topicImport/applyTopics.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffe4ecf44e406beb", "name": "Commented-code block (6 lines) in src/features/work/slides/sourceKey.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/slides/sourceKey.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-afb99a5ce6410c05", "name": "Commented-code block (8 lines) in src/features/work/slides/manualPages.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/slides/manualPages.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-dc5794cd5366dd12", "name": "Commented-code block (9 lines) in src/features/work/slides/editor/convert.ts:9", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/slides/editor/convert.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d645dd68c94517d4", "name": "Commented-code block (6 lines) in src/features/work/slides/editor/slideAi.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/slides/editor/slideAi.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-b0b87fa91d3dec1a", "name": "Commented-code block (8 lines) in src/features/work/slides/editor/SlideEditor.tsx:30", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/slides/editor/SlideEditor.tsx:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23e476310ddb246c", "name": "Commented-code block (12 lines) in src/features/work/gradebook/util.edge.test.ts:16", "shortDescription": {"text": "Commented-code block (12 lines) in src/features/work/gradebook/util.edge.test.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fcb7010dbecfc90f", "name": "Commented-code block (7 lines) in src/features/work/gradebook/util.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/gradebook/util.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-ddcd9b03fa87976d", "name": "Commented-code block (5 lines) in src/features/work/gradebook/StudentReport.tsx:30", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/gradebook/StudentReport.tsx:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-972258f22d34c5f5", "name": "Commented-code block (7 lines) in src/features/work/gradebook/i18n.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/gradebook/i18n.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-bea701e288bf9075", "name": "Commented-code block (8 lines) in src/features/work/gradebook/Charts.tsx:17", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/gradebook/Charts.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c398bd1ce9f74150", "name": "Commented-code block (8 lines) in src/features/work/grading/markingProfiles.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/grading/markingProfiles.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-609d348031c91bed", "name": "Commented-code block (8 lines) in src/features/work/grading/prompts.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/grading/prompts.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-5b42160b74406540", "name": "Commented-code block (7 lines) in src/features/work/grading/gradingStore.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/grading/gradingStore.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-e0f355c15bf287be", "name": "Commented-code block (6 lines) in src/features/work/grading/richSystem.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in src/features/work/grading/richSystem.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-58f7289793fd13d8", "name": "Commented-code block (7 lines) in src/features/work/grading/structured.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/grading/structured.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-559d29e7ab9373b8", "name": "Commented-code block (7 lines) in src/features/work/todo/trend-heat.test.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/todo/trend-heat.test.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-ed981c4fb6f2a31b", "name": "Commented-code block (7 lines) in src/features/work/todo/store.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/features/work/todo/store.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-52ffb0a2ce00d1d5", "name": "Commented-code block (5 lines) in src/features/work/todo/util.test.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/todo/util.test.ts:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c218b6be350b0895", "name": "Commented-code block (8 lines) in src/features/work/todo/TaskEditor.tsx:45", "shortDescription": {"text": "Commented-code block (8 lines) in src/features/work/todo/TaskEditor.tsx:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f55e57a0a38b5d3a", "name": "Commented-code block (5 lines) in src/features/work/todo/demo.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in src/features/work/todo/demo.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-f3c8febfbbdce9a4", "name": "Commented-code block (9 lines) in src/features/work/todo/types.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in src/features/work/todo/types.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-ff51df29eef8ad02", "name": "Commented-code block (9 lines) in e2e/a11y.spec.ts:4", "shortDescription": {"text": "Commented-code block (9 lines) in e2e/a11y.spec.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-d0b17c8c07a7421d", "name": "8 env vars used in code but missing from .env.example", "shortDescription": {"text": "8 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ART_MODEL`, `CI`, `DEV`, `GEMINI_API_KEY`, `MODE`, `TZ`, `VITE_DEV_AUTH_EMAIL`, `VITE_DEV_AUTH_NAME`. 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-ba619daf3fc6de80", "name": "Frontend route `/app/*` has no Link/navigate to it \u2014 src/main.tsx", "shortDescription": {"text": "Frontend route `/app/*` 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-80ddf2cea0d32413", "name": "Dangling fetch: POST https://api.resend.com/emails (supabase/functions/_shared/email.ts:35)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (supabase/functions/_shared/email.ts:35)"}, "fullDescription": {"text": "`supabase/functions/_shared/email.ts:35` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5cbb43242950b916", "name": "Unused endpoint: USE /dev-ai/gemini", "shortDescription": {"text": "Unused endpoint: USE /dev-ai/gemini"}, "fullDescription": {"text": "`vite.config.ts` declares `USE /dev-ai/gemini` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19693"}, "properties": {"repository": "SimonNg0225/ntk-platform", "repoUrl": "https://github.com/SimonNg0225/ntk-platform", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462904, "scanner": "foundry_dataset", "fingerprint": "742adfb22b582ce2fa4b61f41a74011df6cf0df57e9514260189347c992adc5b", "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": 1, "test_ci_gap": 1, "deployment_env_gap": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 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, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 17, "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, "comment_chain_links_commit": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#9", "issue_number": "9", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-65dd79bce259957b", "graph_gold_label": "weak_supervision_needs_review", "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#9\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#9\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#9\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 9\nGraph consistency label: weak_supervision_needs_review\nNodes: 13\nEdges: 17\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 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, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-b9e010d621756203", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462903, "scanner": "foundry_dataset", "fingerprint": "658fe5ffb49ba77b641e636e386f3e3f90bdfaf6bdbdfeb87d431f3251712b19", "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": 1, "test_ci_gap": 1, "deployment_env_gap": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 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, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 17, "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, "comment_chain_links_commit": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#8", "issue_number": "8", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-58599835cd51b079", "graph_gold_label": "weak_supervision_needs_review", "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#8\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#8\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 8\nGraph consistency label: weak_supervision_needs_review\nNodes: 13\nEdges: 17\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 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, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-f234a00cd7e4f2c0", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462902, "scanner": "foundry_dataset", "fingerprint": "d0ea1dae62f5e302576f298bac990f7b07db2f5ae4dfdaa79c266547029c8b66", "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": 2, "test_ci_gap": 1, "deployment_env_gap": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 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, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 18, "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, "comment_chain_links_commit": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#7", "issue_number": "7", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-27a9aa033a2402d9", "graph_gold_label": "weak_supervision_needs_review", "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#7\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#7\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 7\nGraph consistency label: weak_supervision_needs_review\nNodes: 14\nEdges: 18\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'commit': 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, 'comment_chain_links_commit': 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: {'claimed_resolved_unverified': 3, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-abca1d0715cc0156", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462901, "scanner": "foundry_dataset", "fingerprint": "10db724f368f9e88201f4301224b618583203c647fe26951b7ed14e4f35f7d77", "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": 1, "test_ci_gap": 1, "deployment_env_gap": 1, "verification_or_tests": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 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": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 18, "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, "comment_chain_links_commit": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#6", "issue_number": "6", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-3908753fcb43ccb6", "graph_gold_label": "supported_by_verification_signal", "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: supported_by_verification_signal\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#6\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 14\nEdges: 18\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'commit': 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, 'comment_chain_links_commit': 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: {'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'bug_fix': 1, 'verification_or_tests': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'not_resolved_or_not_observed': 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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-0544cc34143b2729", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462900, "scanner": "foundry_dataset", "fingerprint": "15f3c0f227d2581f86bb883abacd9076e3c80822de65bb4bef28e0b754a625be", "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, "deployment_env_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "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}, "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": "SimonNg0225/ntk-platform#5", "issue_number": "5", "quality_tiers": {"unresolved": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-433977fb81556fa8", "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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#5\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#5\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 5\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': 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, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-492cefab18c4978b", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462899, "scanner": "foundry_dataset", "fingerprint": "60517792c251ae7996a487b79883e7cdc2c3fc1d199b744c37440b179b82f242", "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": {"deployment_env_gap": 1, "agent_instruction_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "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}, "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": "SimonNg0225/ntk-platform#4", "issue_number": "4", "quality_tiers": {"unresolved": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-7fe70b9f53c0a7e0", "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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#4\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#4\nRepo: SimonNg0225/ntk-platform\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': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-d59fc92194e98fe4", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462898, "scanner": "foundry_dataset", "fingerprint": "05da7118b96df397588a86513fa3187f174cc866efd9bd7d40f4e3a8a9e9914b", "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, "deployment_env_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "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}, "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": "SimonNg0225/ntk-platform#3", "issue_number": "3", "quality_tiers": {"unresolved": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-b752339c25ffa293", "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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#3\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#3\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 3\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': 4, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'ui_workflow_gap': 1, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-ff0080df6ee10d83", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462897, "scanner": "foundry_dataset", "fingerprint": "86beec3306458e21a24786567b64deb8976a7dd9c213d37873456d1455609802", "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": 1, "deployment_env_gap": 1, "security_or_secrets": 2, "security_auth_secret": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 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, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 19, "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, "comment_chain_links_commit": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 15, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#2", "issue_number": "2", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-4dd55fb199b66d5c", "graph_gold_label": "weak_supervision_needs_review", "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#2\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 4, 'commit': 3, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'comment_chain_links_commit': 3, '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: {'claimed_resolved_unverified': 3, 'security_or_secrets': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-f5ec821b595b7c11", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462896, "scanner": "foundry_dataset", "fingerprint": "eeb4471f83483b38f698537d4357be1e2103d50d148ef5fce180cd6e6845afd1", "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": {"deployment_env_gap": 1, "generated_provenance": 1, "agent_instruction_gap": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"self_attested_unverified": 6, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 17, "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, "comment_chain_links_commit": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#10", "issue_number": "10", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-f35ac57a6cb2b514", "graph_gold_label": "weak_supervision_needs_review", "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#10\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#10\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 10\nGraph consistency label: weak_supervision_needs_review\nNodes: 13\nEdges: 17\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 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, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'deployment_env_gap': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'self_attested_unverified': 6, 'not_resolved_or_not_observed': 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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-80bfa2a5a86afc99", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 462895, "scanner": "foundry_dataset", "fingerprint": "e57dca0f5724e36195d0da4e79cef9993210e98603cabb5e0291e32c98438ed0", "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": {"deployment_env_gap": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "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}, "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": "SimonNg0225/ntk-platform#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-c822051435f86aa3", "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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#1\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 1\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': 4, 'deployment_env_gap': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-ea80f0fcd23621c4", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434289, "scanner": "foundry_dataset", "fingerprint": "cc53b2b2122012ea671dcf10bfa62cba451ee9d3c066ccbc71e22356a2662614", "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": "SimonNg0225/ntk-platform#9", "human_labels": ["deployment_env_gap", "test_ci_gap"], "issue_number": "9", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.601, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-8dd5497e694ee8a5", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#9\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: SimonNg0225/ntk-platform#9\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-04993936f836336d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/9\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/9\\nTitle: \u7c21\u5316\u5c0e\u822a\uff1a\u624b\u6a5f\u5e95\u90e8\u5c0e\u822a + \u5074\u6b04\u647a\u758a + \u9996\u9801\u7626\u8eab\\nBody:\\n## \u7c21\u5316\u5c0e\u822a \u00b7 \u63d0\u9ad8\u65b9\u4fbf\u6027\uff08\u624b\u6a5f / \u5e73\u677f\uff09\\n\\n\u91dd\u5c0d\u300c\u529f\u80fd\u592a\u591a\u3001\u611f\u89ba\u8907\u96dc\u300d\uff0c\u7531\u4f60\u63c0\u5605 3 \u500b\u65b9\u5411\u843d\u624b\uff1a\\n\\n### \ud83d\udcf1 \u624b\u6a5f\u5e95\u90e8\u5c0e\u822a\u5217\uff08BottomNav\uff09\\n- \u7d30\u87a2\u5e55\u56fa\u5b9a\u5e95\u90e8 4 \u500b\u5e38\u7528\uff08\u9996\u9801 / \u6279\u6539 / \u6210\u7e3e / \u884c\u4e8b\u66c6\uff09+\u300c\u9078\u55ae\u300d\u958b\u62bd\u5c5c\\n- \u624b\u6a5f\u5514\u4f7f\u6b21\u6b21\u958b\u62bd\u5c5c\u6435\u529f\u80fd\uff1b\u5ba2\u670d\u6d6e\u63a3\u624b\u6a5f\u81ea\u52d5\u5347\u9ad8\u907f\u958b\\n\\n### \ud83d\udcc2 \u5074\u6b04\u5206\u7d44\u53ef\u647a\u758a + \u6700\u8fd1\\n- \u6bcf\u500b\u5206\u7d44 header \u53ef\u647a\u758a\uff08\u72c0\u614b\u6301\u4e45\u5316\uff09\\n- \u7f6e\u9802\u300c\u6700\u8fd1\u300d\u5340\uff08\u6700\u8fd1\u958b\u904e\u5605\u529f\u80fd\uff09\\n\\n### \ud83c\udfe0 \u9996\u9801\u7626\u8eab\\n- \u52a0\u300c\u6700\u8fd1\u4f7f\u7528\u300d\u5feb\u6377\u5340\\n- \u300c\u5168\u90e8\u529f\u80fd\u300d\u53ef\u647a\u758a\uff1a**\u6709\u6700\u8fd1 \u2192 \u9810\u8a2d\u6536\u8d77**\uff08\u8fd4\u8a2a\u4e7e\u6de8\uff09\u3001**\u65b0\u7528\u6236 \u2192 \u5c55\u958b**\uff08\u63a2\u7d22\uff09\\n- \u4e2d\u592e `navigate` \u7d71\u4e00\u8a18\u4f4e\u6700\u8fd1\u4f7f\u7528\uff08\u4e4b\u524d\u53ea \u2318K \u6703\u8a18\uff09\\n\\n> \ud83d\udccc \u5148\u524d\u5df2\u9a57\u8b49\uff1a\u5bec\u8868\u683c / \u591a\u6b04\u5168\u90e8\u6709 `overflow-x-auto` + `sm:` \u65b7\u9ede\uff0c\u624b\u6a5f/\u5e73\u677f**\u5514\u6703\u7206\u7248**\uff1b\u4eca\u6b21\u4fc2\u6e1b\u8a8d\u77e5\u8ca0\u64d4\u3002\\n\\n## \u9a57\u8b49\\n- \u2705 build \u00b7 `npm test` 3728\\n- \u23f3 E2E \u7531\u672c PR \u55ba CI \u8dd1\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-a5cbdc16d2428ba3\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/9#issuecomment-4642251792\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/9#issuecomment-4642251792\\nTitle: \\nBody:\\n[vc]: #wxEYW4+t0xbTF74ydtXcugaaOsDD8ryu1LjIHZKyUXA=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC83Wk1WUFh4WmlQQ3hkNG5rSE43Q3RlY3FRcEtpIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtcmVtb3RlLWMtODdlMzQ3LXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowL\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-9970a5bda8f766b4", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434288, "scanner": "foundry_dataset", "fingerprint": "47fd1d2d175f5a7973ce71f8322d5d858da3342ce15dfccf92d7585f62c7e91c", "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": "SimonNg0225/ntk-platform#8", "human_labels": ["deployment_env_gap", "test_ci_gap"], "issue_number": "8", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.61, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-3bcf014559451bd2", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#8\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: SimonNg0225/ntk-platform#8\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6cf6cb453527bb82\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/8\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/8\\nTitle: AI \u6279\u6539 + \u6210\u7e3e\u8868\u8a55\u8a9e\u751f\u6210\\nBody:\\n## AI \u6279\u6539 + \u6210\u7e3e\u8868\u8a55\u8a9e\u751f\u6210\\n\\n\u65b0\u5de5\u4f5c\u6a21\u5f0f\u529f\u80fd **\u300cAI \u6279\u6539\u300d**\uff08\u5de5\u4f5c \u2192 AI \u7d44\uff09\uff0c\u89e3\u6c7a\u8001\u5e2b\u6700\u5927\u6642\u9593\u6bba\u624b\uff1a\u6279\u6539 + \u5beb\u8a55\u8a9e\u3002\\n\\n### \u2460 \u6279\u6539\u7b54\u6848\\n- \u8f38\u5165\uff1a\u984c\u76ee + \u6eff\u5206/\u8a55\u5206\u6e96\u5247\uff08\u9078\u586b\uff09+ \u5b78\u751f\u7b54\u6848\\n- \u7b54\u6848\u53ef**\u8cbc\u6587\u5b57**\u6216**\u4e0a\u8f09\u76f8\u7247**\uff08\u624b\u5beb / \u8a66\u5377 \u2192 Gemini Vision \u8b80\u51fa\u518d\u6279\u6539\uff09\\n- \u8f38\u51fa\uff1a**\u5206\u6578/\u7b49\u7d1a + \u9010\u9ede\u8a55\u8a9e + \u6539\u5584\u5efa\u8b70**\uff08streaming \u5373\u6642\u986f\u793a\uff09\\n\\n### \u2461 \u6210\u7e3e\u8868\u8a55\u8a9e\\n- \u8f38\u5165\u5b78\u751f\u8868\u73fe\u6458\u8981 + \u8a9e\u6c23\uff08\u9f13\u52f5 / \u4e2d\u80af / \u56b4\u8b39\uff09\u2192 **\u4e00\u6bb5\u5bb6\u9577\u7747\u5f97\u660e\u5605\u8a55\u8a9e**\\n\\n### \u5171\u901a\\n- \u6ce8\u5165**\u4efb\u6559\u79d1\u76ee**\u8a9e\u5883\uff1b**Flash / Pro** \u6a21\u578b\u5207\u63db\uff1b\u53ef\u4e2d\u9014\u505c\u6b62\uff1b\u4e00\u9375\u8907\u88fd\\n- \u7d93 `gemini` Edge Function \u2192 \u53d7 **AI \u984d\u5ea6 / Pro \u767d\u540d\u55ae**\u7ba1\u5236\uff08\u5373\u6e2c\u8a66\u78bc `NTK` + `AI_UNLIMITED_EMAILS` \u90fd\u9069\u7528\uff09\\n\\n## \u9a57\u8b49\\n- \u2705 build \u7da0 \u00b7 `npm test` 3728\uff08+8 prompt builder \u55ae\u5143\u6e2c\u8a66\uff09\\n- \u23f3 E2E \u7531\u672c PR \u55ba CI \u8dd1\\n\\n> \u5f8c\u7e8c\u53ef\u52a0\uff1a\u6210\u7e3e\u8868\u8a55\u8a9e**\u76f4\u63a5\u7531\u6210\u7e3e\u518a\u4e00\u9375\u5e36\u5165\u5b78\u751f\u8cc7\u6599**\uff08\u800c\u5bb6\u7528\u6458\u8981\u8cbc\u5165\uff09\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-61d44f00d9b58e27\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/8#issuecomment-4642017942\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/8#issuecomment-4642017942\\nTitle: \\nBody:\\n[vc]: #j6KadIxc4zOEcgplR8GI378y1Z+6LQFrY2AKWLtnRSs=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC9HMXd3UFJYYWdmVkVqTWZneFljSmZaQVdBa1NyIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtcmVtb3RlLWMtODdlMzQ3LXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6Ik\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-ff5a2abbe6deb76e", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434287, "scanner": "foundry_dataset", "fingerprint": "c0d2137f8992cba1092ff2a7957cdd6571d7ebde174383a25564da1fcff9faa6", "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": "SimonNg0225/ntk-platform#7", "human_labels": ["deployment_env_gap", "test_ci_gap"], "issue_number": "7", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.662, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-ad8bc56d8defac37", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#7\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: SimonNg0225/ntk-platform#7\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d92d4dd19f392435\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/7\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/7\\nTitle: \u5ba2\u670d\u7cfb\u7d71\u589e\u5f37\uff1a\u6211\u7684\u67e5\u8a62\u6e05\u55ae + admin \u6536\u4ef6\u7bb1\\nBody:\\n## \u5167\u5bb9\\n\\n\u63a5\u4f4f\u5df2\u843d\u5730\u5605\u81ea\u5bb6\u5ba2\u670d\u7cfb\u7d71\uff0c\u88dc\u4e0a\u5169\u500b\u9762\u5411\uff1a\\n\\n### \ud83d\udc64 \u6211\u7684\u67e5\u8a62\uff08\u7528\u6236\uff09\\n- `SupportButton` \u52a0\u300c**\u65b0\u67e5\u8a62 / \u6211\u7684\u67e5\u8a62**\u300d\u5206\u9801\\n- \u5217\u51fa\u81ea\u5df1\u63d0\u4ea4\u904e\u5605 ticket + \u72c0\u614b\uff08\u5f85\u8655\u7406 / \u5df2\u8655\u7406\uff09\uff0cRLS \u53ea\u8b80\u81ea\u5df1\\n- \u63d0\u4ea4\u6210\u529f\u5f8c\u81ea\u52d5\u8df3\u53bb\u300c\u6211\u7684\u67e5\u8a62\u300d\\n\\n### \ud83d\udee0\ufe0f \u5ba2\u670d\u6536\u4ef6\u7bb1\uff08\u7ba1\u7406\u54e1\uff09\\n- `AdminSupportCard`\uff08\u8a2d\u5b9a\u9801\u5167\uff0c**\u53ea admin \u986f\u793a**\uff09\uff1a\u5217\u51fa\u5168\u90e8\u7528\u6236\u67e5\u8a62\u3001**\u6a19\u8a18\u8655\u7406 / \u91cd\u958b**\\n- `support-admin` Edge Function\uff1a\u9a57 `ADMIN_EMAILS` \u767d\u540d\u55ae \u2192 service_role `list` / `set-status`\\n- \u524d\u7aef gate \u7528 `VITE_ADMIN_EMAILS`\uff08\u7d14\u986f\u793a\uff09\uff0c\u771f\u6b63\u6b0a\u9650\u55ba Edge Function\\n\\n## \u9a57\u8b49\\n- \u2705 `npm run build` \u7da0\\n- \u2705 `npm test` \u2014 3720 \u55ae\u5143\u6e2c\u8a66\u5168\u904e\\n- \u23f3 E2E\uff08Playwright\uff09\u7531\u672c PR \u55ba CI \u8dd1\uff08\u884c\u92b7 \u2192 \u5b9a\u50f9 \u2192 \u4ed8\u8cbb\u5165\u53e3 \u2192 \u79c1\u96b1/\u689d\u6b3e \u2192 \u9032\u5165 App\uff09\\n\\n## \u90e8\u7f72\u5099\u8a3b\\n```bash\\nsupabase functions deploy support-admin\\nsupabase secrets set ADMIN_EMAILS=you@example.com   # \u540c\u524d\u7aef VITE_ADMIN_EMAILS \u4e00\u81f4\\n```\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-a2c5ebe1f2beac92\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/7#issuecomment-4641943292\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/7#issuecomment-4641943292\\nTitle: \\nBody:\\n[vc]: #iCBRICtBps5CVSNT8B/szZkTOLuUGcL4rHzMb5Pvhgg=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC82dEVjaFppOUE3WmIzMU5zS2Z4MXVQZ3FRTlBWIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jb\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-d592c769af05e0f2", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434286, "scanner": "foundry_dataset", "fingerprint": "2f320b3342abeccbba9aad5ae8cba553aed516a2c5c9af2a4395062b8dde9bf6", "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": "SimonNg0225/ntk-platform#34", "human_labels": ["deployment_env_gap", "test_ci_gap", "ui_or_frontend"], "issue_number": "34", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.731, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-9d84a89eee01f76a", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 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": 3, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#34\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: SimonNg0225/ntk-platform#34\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-21921963523402d5\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/34\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/34\\nTitle: feat(countdown): \u540c\u6b65\u884c\u4e8b\u66c6 + \u63d0\u524d\u5230\u9054 / \u822a\u73ed\u5ef6\u8aa4\u72c0\u614b\uff08\u542b EN i18n\uff09\\nBody:\\n## \u91cd\u8981\u65e5\u5b50\u5012\u6578 \u2014 \u4e09\u500b\u6539\u9032\uff08\u767b\u6a5f\u724c\u4e3b\u984c\u5ef6\u4f38\uff09\\n\\n### 1. \u65b0\u589e\u6642\u540c\u6b65\u5230\u300c\u884c\u4e8b\u66c6\u300d\\n\u65b0\u589e\u4e00\u500b\u5012\u6578 \u2192 \u81ea\u52d5\u5efa\u7acb\u4e00\u500b**\u5168\u65e5\u6d3b\u52d5**(\u6709\u6642\u9593\u5c31\u5e36\u6642\u9593),\u6309\u76ee\u524d\u6a21\u5f0f\u5165\u5c0d\u61c9\u884c\u4e8b\u66c6(\u5de5\u4f5c\u2192cal-work\u3001\u5b78\u7fd2\u2192cal-study\u3001\u5176\u4ed6\u2192cal-personal)\u3002\\n- \u9023\u7d50 id = `cd-<countdownId>`,**\u522a\u5012\u6578\u6642\u4e00\u9f4a\u6e05\u8d70**,\u5514\u6703\u55ba\u884c\u4e8b\u66c6\u6b98\u7559\u5b64\u5152\u4e8b\u4ef6\u3002\\n- \u55ae\u5411\u540c\u6b65(\u65b0\u589e/\u522a\u9664);\u7b26\u5408\u300c\u7576\u65b0\u589e\u6642\u540c\u6b65\u300d\u5605\u8981\u6c42\u3002\\n\\n### 2.\u300c\u63d0\u524d\u5230\u9054\u300d(\u63d0\u65e9\u5b8c\u6210)\\n\u6bcf\u5f35\u5361(\u5019\u6a5f\u4e2d)\u6709\u300c**\u6a19\u8a18\u5230\u9054**\u300d\u63a3 \u2192 \u8a18\u4f4e\u5230\u9054\u6642\u9593\u3002\\n- \u5230\u9054\u65e5**\u65e9\u904e** deadline \u2192 \u986f\u793a\u300c**\u63d0\u524d\u5230\u9054**\u300d(\u7da0\u3001EARLY \u2713),\u81ea\u52d5\u79fb\u53bb\u300c\u5df2\u62b5\u9054\u300d\u9801\u3002\\n- \u64b3\u932f\u53ef\u300c\u53d6\u6d88\u5230\u9054\u300d\u9084\u539f\u3002\\n\\n### 3.\u300c\u822a\u73ed\u5ef6\u8aa4\u300d\\n\u904e\u5497 deadline \u4f46\u7528\u6236**\u5187\u64b3\u5230\u9054** \u2192 \u5361\u81ea\u52d5\u986f\u793a\u300c**\u822a\u73ed\u5ef6\u8aa4**\u300d(\u7d05\u3001DELAYED + \u903e\u671f\u65e5\u6578)\u3002\u5ef6\u8aa4\u5361\u53ef\u300c\u88dc\u767b\u5230\u9054\u300d\u3002\\n\\n### 4. \u82f1\u6587\u7248 i18n\\n\u6240\u6709\u65b0\u72c0\u614b / \u63a3 / toast \u90fd\u884c `t()` + `defaultValue`(\u7e41\u4e2d),\u4e26\u55ba `appEn.ts` \u52a0\u5497\u5c0d\u61c9\u82f1\u6587(\u9023\u57cb\u65e2\u6709\u5019\u6a5f\u72c0\u614b final call / boarding / on schedule \u4e00\u9f4a\u7ffb\u8b6f),\u82f1\u6587 UI \u5514\u6703\u518d\u593e\u96dc\u4e2d\u6587\u3002\\n\\n## \u9a57\u8b49\\n- `tsc --noEmit` \u2705\\n- `npm run build` \u2705\\n- `vitest run`\uff08countdown\uff0957 passed \u2705\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-92abf7647e7a462b\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/34#issuecomment-4688353111\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/34#issuecomment-4688353111\\nTitle: \\nBody:\\n[vc]: #Tr+IjDEvXBWwq6FGSNAehvTXs8jmDT60f5VhOT0Lqeg=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC9EZF\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-a1c0d7200ae2e6de", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434285, "scanner": "foundry_dataset", "fingerprint": "ce67eb823d9d027fa246f3aa7bf74cae47fdbcbd6c10a6e177eef4d7bd9283b5", "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": "SimonNg0225/ntk-platform#33", "human_labels": ["deployment_env_gap", "runtime_failure", "ui_or_frontend"], "issue_number": "33", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.92, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-18b4c72a7ffe38ff", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 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": 2, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#33\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#33\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 3\nLabels: {'runtime_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-15165f3e45724252\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"runtime_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/33\",\n    \"text\": \"GitHub feedback: runtime_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/33\\nTitle: fix(admin): \u9632\u767d\u756b\u9762\uff08ErrorBoundary + \u5bb9\u932f\uff09+ \u79fb\u9664\u5197\u9918 support-admin \u5361\\nBody:\\n## \u4fee\u6b63\\n- **\u5f8c\u53f0\u767d\u756b\u9762**:`/admin` \u8def\u7531\u672c\u4f86\u5187\u5305 ErrorBoundary,render \u51fa\u932f\u6703\u767d\u6210\u500b app\u3002\u800c\u5bb6\u5305\u5497 \u2192 \u53ea\u986f\u793a\u53cb\u5584\u932f\u8aa4\u8a0a\u606f + \u91cd\u8a66\u3002\\n- **\u7248\u672c\u4e0d\u4e00\u81f4\u9632\u8b77**:`usd()` / `fmtTok()` \u5bb9\u932f(undefined / \u975e\u6709\u9650\u6578 \u2192 0)\u3002\u524d\u7aef\u540c Edge Function \u90e8\u7f72\u77ed\u66ab\u5514\u540c\u6b65\u6642(\u4f8b\u5982\u624b\u52d5 deploy \u5497\u65b0 function \u4f46 Vercel \u4ef2\u4fc2\u820a\u524d\u7aef),\u5514\u6703\u518d\u56e0\u70ba\u651e\u5514\u5230\u6b04\u4f4d\u800c crash\u3002\\n- **\u79fb\u9664\u5197\u9918\u5361**:Settings \u5605\u820a `AdminSupportCard` \u547c\u53eb\u672a\u90e8\u7f72\u5605 `support-admin` \u2192 console \u4e00\u76f4 404\u3002\u529f\u80fd\u5df2\u88ab\u65b0\u5f8c\u53f0\u300c\u5167\u5bb9+\u652f\u63f4\u300d\u5206\u9801\u53d6\u4ee3,\u6545\u79fb\u9664\u3002\\n\\n## \u9a57\u8b49\\n- `tsc --noEmit` \u2705\\n- `npm run build` \u2705\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-f0ce23b8e660d216\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/33#issuecomment-4688049752\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/33#issuecomment-4688049752\\nTitle: \\nBody:\\n[vc]: #fIp7O3ICgTKS0h0O+9ndYvAIFjyz/8G2UoV+6Ho7Iro=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC84c1U2MmhaV3RWM05ZTUIzNmJrMXhpOVZQNkVBIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtcmVtb3RlLWMtODdlMzQ3LXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwib\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-94b7417f4b78726c", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434284, "scanner": "foundry_dataset", "fingerprint": "39e2adea2cf19ebf49e287a90aa1670a5441e76f9daeafb1d76b07f9bf5786d6", "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": "SimonNg0225/ntk-platform#32", "human_labels": ["deployment_env_gap", "schema_or_data", "security_auth_secret", "ui_or_frontend"], "issue_number": "32", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.92, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-c3dbab99cebfc3e8", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 32, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"schema_or_data": 3, "ui_or_frontend": 29}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#32\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 32\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 29, 'schema_or_data': 3}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-9ed88088dd60e2ff\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/32\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/32\\nTitle: feat(admin): AI \u771f\u5be6\u7528\u91cf / \u6210\u672c\u8a18\u9304\uff08per-user + per-feature\uff09\\nBody:\\n## \u554f\u984c\\n`ai_usage` \u4fc2**\u984d\u5ea6\u8a08\u6578\u5668**\u5514\u4fc2\u7528\u91cf\u65e5\u8a8c:Pro \u4e00\u822c AI \u5514\u6263\u984d \u2192 \u5514\u8a18\u9304\u3001\u767d\u540d\u55ae\u8df3\u904e\u3001\u5187 per-feature\u3002\u6240\u4ee5\u5f8c\u53f0\u7747\u5514\u5230\u4ed8\u8cbb\u7528\u6236\u771f\u5be6\u7528\u91cf,\u6210\u672c\u4f30\u7b97\u4ea6\u56b4\u91cd\u4f4e\u4f30\u3002\\n\\n## \u65b9\u6848:\u771f\u5be6 token \u8a18\u9304\\n\u65b0\u589e `ai_usage_stats` \u6708\u5ea6\u805a\u5408\u65e5\u8a8c \u2014\u2014 \u6bcf\u6b21\u6210\u529f AI \u547c\u53eb\u5f8c\u8a18\u4f4e**\u771f\u5be6 token**,**\u6240\u6709\u7528\u6236\u90fd\u8a08**(\u9023 Pro / \u767d\u540d\u55ae),\u5e36\u4f4f**\u529f\u80fd + model**\u3002\u6210\u672c = token \u00d7 model \u55ae\u50f9(\u5514\u518d\u300c\u6bcf\u6b21\u4f30\u300d)\u3002\\n\\n### \u5f8c\u7aef\\n- migration `0010`:`ai_usage_stats` \u8868 + `bump_ai_usage()` \u539f\u5b50\u7d2f\u52a0 RPC(RLS \u8ddf\u73fe\u6709\u539f\u5247:\u8b80\u81ea\u5df1 / \u5beb\u53ea\u9650 service_role)\\n- `gemini` function:\u6210\u529f\u5f8c best-effort \u8a18 `usageMetadata`(stream + \u975e stream \u90fd\u8986\u84cb),**\u5514\u963b AI \u56de\u61c9**;\u65b0\u589e `source` \u6a19\u7c64(\u529f\u80fd\u540d,\u5514\u5f71\u97ff\u984d\u5ea6)\\n- `admin` function:`usage` / `overview` \u6539\u7528\u771f\u5be6 token \u00d7 \u55ae\u50f9,\u8f38\u51fa **per-feature** + **per-user**(\u9023\u6bcf\u4f4d\u7528\u6236\u5605\u529f\u80fd\u82b1\u8cbb\u5206\u4f48)\\n\\n### \u524d\u7aef\\n- `aiClient` \u52a0 `source`;**37 \u500b AI \u547c\u53eb\u9ede**\u5404\u81ea\u6a19 source(grading / slides / material-gen / fitness\u2026)\u2192 \u5f8c\u53f0\u5206\u5230\u300c\u908a\u4f4d\u7528\u6236\u7528\u5497\u54a9\u529f\u80fd\u3001\u5e7e\u591a\u9322\u300d\\n- \u300c\u7528\u91cf+\u6210\u672c\u300d\u5206\u9801:\u7e3d\u89bd + \u6309\u529f\u80fd\u8868 + \u6bcf\u4f4d\u7528\u6236\u6210\u672c(\u64b3\u4e00\u884c\u5c55\u958b\u7747\u529f\u80fd\u5206\u4f48)\\n\\n## \u90e8\u7f72\u9700\u6c42\\n- `supabase db push`(\u5957\u7528 0010)\\n- `supabase functions deploy gemini admin`\\n- (\u9078\u7528)\u55ae\u50f9\u74b0\u5883\u8b8a\u6578:`GEMINI_FLASH_IN_USD_PER_M` / `_OUT` / `GEMINI_PRO_IN_USD_PER_M` / `_OUT`\\n\\n## \u9a57\u8b49\\n- `tsc --noEmit` \u2705\\n- `np\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7809dbae5b7004b6\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/32#issuecomment-4687908228\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/32#issuecomment-4687908228\\nTitle: \\nBody:\\n[vc]: #BGWUWkGBeXUyC7togpLbJcRFzMEkwQgiIbgKckz4HDc=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWU\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-1970d11f066c9b6a", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434283, "scanner": "foundry_dataset", "fingerprint": "0f7d7fa4aef7b3627f4164deab7f0bd1e98e1c2222ab68ace66c44cdd59ad75b", "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": "SimonNg0225/ntk-platform#31", "human_labels": ["deployment_env_gap", "schema_or_data", "security_auth_secret", "ui_or_frontend"], "issue_number": "31", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.92, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-31dc17944b98cb9e", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 8, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"schema_or_data": 2, "ui_or_frontend": 6}, "linked_commit_count": 5, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#31\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#31\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 5\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 8\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 6, 'schema_or_data': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-78d77ed9d1036b0e\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/31\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/31\\nTitle: feat(admin): EziTeach \u5f8c\u53f0\u7ba1\u7406\u7cfb\u7d71\uff084 \u6a21\u7d44\uff0c\u9023 Supabase\uff09\\nBody:\\n\u4e00\u689d `admin` Edge Function \u670d\u52d9\u56db\u5927\u5f8c\u53f0\u6a21\u7d44\uff0c\u6cbf\u7528 support-admin \u5605 `ADMIN_EMAILS` \u767d\u540d\u55ae + `service_role` gate\uff08service_role key \u53ea\u7559\u55ba\u5f8c\u7aef\uff0c\u524d\u7aef\u651e\u5514\u5230\uff09\u3002\u654f\u611f\u64cd\u4f5c\u5beb\u5165 `admin_audit` \u65e5\u8a8c\u3002\\n\\n## \u56db\u5927\u6a21\u7d44\uff08`src/pages/Admin.tsx`\uff0c5 \u5206\u9801\uff09\\n- **\u6982\u89bd**\uff1a\u7528\u6236\u6578 / \u751f\u6548 Pro / \u4f30\u7b97 MRR / \u672c\u6708 AI \u6210\u672c / \u5f85\u8655\u7406\u5ba2\u670d\u2026\u4e00\u773c\u7747\u6652\uff0c\u53ef click \u8df3\u8f49\\n- **\u7528\u6236 + \u8a02\u95b1**\uff1a\u5217 `auth.users` \u4f75\u8a02\u95b1\u72c0\u614b\u3001\u641c\u5c0b\u3001\u624b\u52d5\u6539 Free/Pro\uff08\u7dca\u6025\u88dc\u511f\uff1b\u6b63\u5e38\u4ecd\u7531 Stripe webhook \u9a45\u52d5\uff09\\n- **\u7528\u91cf + AI \u6210\u672c**\uff1a\u4e00\u822c AI\uff08\u6309\u65e5\uff09/ \u9304\u97f3\u8f49\u6587\u5b57\uff08\u6309\u6708\uff09\u6309 bucket \u805a\u5408\u3001\u6210\u672c\u4f30\u7b97\u3001Top 20\\n- **\u5b78\u6821 B2B**\uff1aorgs \u5ea7\u4f4d / \u6210\u54e1 / \u64c1\u6709\u8005 / \u4ed8\u8cbb\u72c0\u614b\\n- **\u5167\u5bb9 + \u652f\u63f4**\uff1a\u5168\u7ad9\u516c\u544a CRUD\uff08\u751f\u6548\u4e2d\u55ba\u6240\u6709\u7528\u6236\u9802\u90e8\u51fa\u6a6b\u984d\uff09+ \u5ba2\u670d\u6536\u4ef6\u7bb1\\n\\n## \u65b0\u589e\\n- migration `0009_admin`\uff08`announcements` + `admin_audit`\uff0cRLS \u8ddf\u73fe\u6709\u539f\u5247\uff09\\n- `src/lib/admin.ts`\u3001`src/lib/announcements.ts`\u3001`AnnouncementBanner`\\n- App / Sidebar \u63a5\u7dda\uff1a`__admin__` \u8def\u7531\uff0c\u5165\u53e3\u53ea admin \u986f\u793a\\n\\n## \u90e8\u7f72\uff08\u5df2\u55ba cloud project \u5b8c\u6210\uff09\\n- \u2705 `supabase db push`\uff080009 \u5df2\u5957\u7528\uff09\\n- \u2705 `supabase functions deploy admin`\\n- `ADMIN_EMAILS` secret \u5df2\u8a2d\uff1b\u524d\u7aef\u8a2d `VITE_ADMIN_EMAILS` \u505a\u540c\u4e00\u4e32\\n\\n## \u9a57\u8b49\\n- `tsc --noEmit` \u2705\\n- `npm run build` \u2705\\n\\n## \u4f30\u7b97\u8aaa\u660e\\nAI \u6210\u672c\uff08Gemini \u5514\u9010\u6b21\u56de token\uff0c\u7528\u6bcf\u6b21\u547c\u53eb\u55ae\u50f9\u4f30\uff0c\u53ef\u7531 `AI_COST_PER_CALL_USD` \u7b49\u74b0\u5883\u8b8a\u6578\u8abf\uff09\u540c MRR\"\n  },\n  {\n    \"id\": \"github-feedback-comment-62b61ba0cd6e9e00\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/31#issuecomment-4687777601\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/31#issuecomment-4687777601\\nTitle: \\nBody:\\n[vc]: #B5rrtxMw+rggVRVdkxu6Sl+6mFM4Nft0kP8oADKgHaw=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWU\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-e9f5f7132621d849", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434282, "scanner": "foundry_dataset", "fingerprint": "b4bb429745968f50a2c310f697714814f5849b7713109d2f0c0fd55fe8335179", "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": "SimonNg0225/ntk-platform#30", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "ui_or_frontend"], "issue_number": "30", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.742, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-291dfbfd4d7fb205", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 5, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 5}, "linked_commit_count": 4, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#30\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: SimonNg0225/ntk-platform#30\nRepo: SimonNg0225/ntk-platform\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: 5\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 5}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f76dfad3f64c5adf\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/30\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/30\\nTitle: feat(slides): \u9ad8\u64ec\u771f\u6a19\u984c\u64f4\u81f3\u66f4\u591a\u7e41\u9ad4 packs\uff08\u6587\u6977 + \u601d\u6e90\u5b8b\uff09\\nBody:\\n## \u5167\u5bb9\\n\u628a\u9ad8\u64ec\u771f\u6a19\u984c\uff08\u62db\u724c\u5b57\u9ad4 Canvas render\uff09\u64f4\u81f3\u66f4\u591a\u7e41\u9ad4 packs\u3002\\n\\n### \u5b57\u9ad4 map\uff08\u5168\u90e8 OFL\uff0cCDN \u8f09\u3001\u96f6\u6253\u5305\uff09\\n- **\u6587\u6977 LXGW WenKai TC**\uff08\u6977\uff0f\u6bdb\u7b46\uff09\u2192 inkwell \u00b7 ivy \u00b7 seminar \u00b7 celadon \u00b7 nocturne\uff08+ sumi \u5df2\u6709\uff09\\n- **\u601d\u6e90\u5b8b Noto Serif TC**\uff08\u660e\u9ad4\uff0c\u53e4\u5178\u6b63\u5f0f\uff09\u2192 marble \u00b7 manuscript\\n- pixel = Press Start 2P\uff08latin\uff09\u7167\u820a\\n\\n### \u63a5\u7dda\\n7 \u500b pack \u7684 `cover()` \u52a0\u53ef\u9078 `title` \u7b2c 5 \u53c3\u6578\uff1a\u6709 title \u5716\u7528\u5716\uff08\u62db\u724c\u5b57\u9ad4\u3001\u8de8\u5e73\u53f0\u4e00\u81f4\uff09\u3001\u5426\u5247\u539f\u751f\u6a19\u984c\uff1bsubtitle \u4f4d\u7f6e\u5169\u8def\u90fd\u8a08\u597d\u3002\u6309 sumi \u7bc4\u5f0f\uff0c**\u5168\u7a0b fallback-safe**\u3002\\n\\n### \u9a57\u8b49\\n- `tsc`/`build`/\u5168\u6e2c\u8a66\u7da0\\n- \u771f\u5f15\u64ce\u6838\u5be6 **8 \u5957\uff08sumi + 7 \u65b0\uff09\u6a19\u984c\u5716\u6b63\u78ba\u64fa\u4f4d\u3001\u96f6\u8ca0 `<a:ext>`\u3001\u7121 throw**\uff08\u5df2\u4ea4\u6a23\u672c\uff09\\n- \u26a0\ufe0f \u700f\u89bd\u5668\u5167 CDN \u8f09\u5b57\u9700\u5be6\u6a5f\u78ba\u8a8d\uff08\u63c0\u5c0d\u61c9 pack \u2192 \u958b\u300c\u9ad8\u64ec\u771f\u6a19\u984c\u300d\u2192 \u4e0b\u8f09\uff09\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-3e50d419a4941cf2\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/30#issuecomment-4686706656\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/30#issuecomment-4686706656\\nTitle: \\nBody:\\n[vc]: #gDFIFU8/WtJ8KnUkOeMhGJ7FalTEWVAsczOa2z51chc=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC9zRmE5RGN6OTFFMVVYcDFKVUVtbndXUVQ3dWZYIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtbW9yZS10aXQtOGRkMjk4LXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-2c6bd14f2d46259b", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434281, "scanner": "foundry_dataset", "fingerprint": "d4de8f6f301f284b8c7e4056280cb7f3b73598c29917762cee340d717f1f54eb", "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": "SimonNg0225/ntk-platform#29", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "ui_or_frontend"], "issue_number": "29", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.82, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-5c85cbfa6cc371c0", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 8, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 8}, "linked_commit_count": 4, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#29\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#29\nRepo: SimonNg0225/ntk-platform\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: 8\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 8}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-16da3539a9aa89cf\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/29\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/29\\nTitle: feat(slides): \u9ad8\u64ec\u771f\u6a19\u984c\uff08\u62db\u724c\u5b57\u9ad4 Canvas render\uff0c\u8de8\u5e73\u53f0\u4e00\u81f4\uff09\\nBody:\\n## \u5167\u5bb9\\nStage 2\uff1a**\u9ad8\u64ec\u771f\u6a19\u984c** \u2014\u2014 \u5d4c\u5165\u5b57\u9ad4\u8de8\u5e73\u53f0\u5514\u53ef\u9760\uff0c\u6539\u6210\u700f\u89bd\u5668\u7528\u62db\u724c webfont \u55ba **Canvas \u756b\u6a19\u984c \u2192 PNG \u2192 \u7576\u5716\u64fa\u843d\u5c01\u9762**\u3002\u4fc2\u5716\u7247\uff0c**Mac/\u624b\u6a5f/Google Slides/Keynote \u90fd\u4e00\u81f4**\uff1b\u6b63\u6587\u7dad\u6301\u539f\u751f\u53ef\u7de8\u8f2f\u3002\\n\\n### \u505a\u5497\\n- `slideTitleFont.ts`\uff1a`renderTitleImage`\uff08\u7528\u5148\u81f3\u5f9e **CDN jsdelivr** \u8f09 fontsource CSS\uff0cunicode-range \u53ea\u651e\u7528\u5230\u55f0\u5e7e\u96bb\u5b57 ~50KB\uff0c**\u5b57\u9ad4\u96f6\u6253\u5305**\uff1blatin \u5b57\u9ad4\u9047\u4e2d\u6587 \u2192 \u56de `null` fallback\uff09\u3002sumi=**\u6587\u6977\u6bdb\u7b46(\u7e41\u9ad4)**\u3001pixel=**Press Start 2P**\u3002\\n- `types.CoverTitle`\uff1b`PptxOptions.coverTitle`\uff1b`Pack.cover` \u52a0\u53ef\u9078 `title` \u7b2c 5 \u53c3\u6578\u3002\\n- sumi/pixel `cover()`\uff1a\u6709 title \u5716\u7528\u5716\u3001\u5426\u5247\u539f\u751f\u6a19\u984c\u3002\\n- `SlideGen`\uff1a\u300c**\u9ad8\u64ec\u771f\u6a19\u984c**\u300dtoggle\uff08sumi/pixel \u5148\u986f\uff09+ download \u6642 render \u50b3\u5165\u3002\\n- \u5168\u7a0b **browser-guarded + fallback**\uff1a\u4efb\u4f55\u5931\u6557\uff08\u7121 canvas\uff0f\u5b57\u9ad4\u8f09\u5514\u5230\uff0f\u4e2d\u6587\u9047 latin \u5b57\uff09\u2192 \u56de\u539f\u751f\u6a19\u984c\uff0c**\u6c38\u4e0d\u58de\u6a94**\u3002\\n\\n### \u9a57\u8b49\\n- `tsc`/`build`/\u5168\u6e2c\u8a66\u7da0\uff1b\u771f\u5f15\u64ce\u6838\u5be6 sumi/pixel \u9ad8\u64ec\u771f deck **\u6b63\u78ba\u64fa\u4f4d**\uff08\u5df2\u4ea4\u5716\uff09\u3002\\n- \u26a0\ufe0f **\u700f\u89bd\u5668\u5167 CDN \u8f09\u5b57 + toggle \u884c\u70ba\u9700\u5be6\u6a5f\u78ba\u8a8d**\uff08\u63c0 sumi/pixel \u2192 \u958b\u300c\u9ad8\u64ec\u771f\u6a19\u984c\u300d\u2192 \u4e0b\u8f09 \u2192 \u7747\u6a19\u984c\u4fc2\u54aa\u62db\u724c\u5b57\u9ad4\uff09\u3002\\n\\n### \u4e4b\u5f8c\\n\u78ba\u8a8d OK \u2192 \u628a\u66f4\u591a\u7e41\u9ad4 packs \u914d\u6587\u6977/\u5176\u4ed6 CJK \u5b57\u9ad4\uff08inkwell/manuscript/ivy\u2026\uff09\uff1b\u52a0\u6388\u6b0a\u6e05\u55ae\u6587\u4ef6\u3002\\n\\n\u26a0\ufe0f \u5b57\u9ad4\u6388\u6b0a\uff1aLXGW \u6587\u6977 + Press Start 2P \u90fd\u4fc2 **OFL**\uff08web OK\uff09\uff1b\u4e4b\u5f8c\u52a0\u5b57\u9ad4\u9010\u96bb\u6838\u5be6\u3002\\n\\nhttps://claude.ai/code/session_01S7siZ\"\n  },\n  {\n    \"id\": \"github-feedback-comment-573b28886ab9e3e6\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/29#issuecomment-4686654210\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/29#issuecomment-4686654210\\nTitle: \\nBody:\\n[vc]: #TF+AJGvTNy6Z0olsTgwgmGy3T7oIdl9sq5ZNMbBMfmU=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2p\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-168771e28d69c4be", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434280, "scanner": "foundry_dataset", "fingerprint": "63080edfcfbcae9b49f51155faef93e1905e54eaafa3d864c386d9001a1e6205", "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": "SimonNg0225/ntk-platform#27", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "27", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.76, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-f349dbc7fded9bcf", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 10, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "ui_or_frontend": 9}, "linked_commit_count": 4, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#27\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: SimonNg0225/ntk-platform#27\nRepo: SimonNg0225/ntk-platform\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: 10\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 9, 'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-45f54e2b0c6869e3\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/27\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/27\\nTitle: feat(slides): \u5168 34 \u5957\u62db\u724c Canvas \u7d0b\u7406\u5e95\u5716\uff08\u8de8\u5e73\u53f0\u4e00\u81f4\u3001\u6587\u5b57\u4fdd\u7559\u53ef\u7de8\u8f2f\uff09\\nBody:\\n## \u5167\u5bb9\\n\u89e3\u6c7a pptxgenjs \u505a\u5514\u5230\u771f\u6f38\u5c64\uff0f\u67d4\u908a\uff0f\u566a\u9ede\uff0f\u661f\u96f2\u5605\u9650\u5236 \u2014\u2014 \u7528**\u700f\u89bd\u5668 Canvas \u756b\u62db\u724c\u7d0b\u7406 \u2192 PNG \u2192 \u5d4c\u5165\u505a\u5c01\u9762\u5e95\u5716**\u3002\u56e0\u70ba\u4fc2\u5716\u7247\uff0c**Mac\uff0f\u624b\u6a5f\uff0fGoogle Slides\uff0fKeynote render \u90fd\u4e00\u81f4**\uff08\u5514\u4f3c\u5d4c\u5165\u5b57\u9ad4\u6703\u8d70\u6a23\uff09\u3002**\u6587\u5b57\u7dad\u6301\u539f\u751f\u53ef\u7de8\u8f2f**\u758a\u55ba\u5e95\u5716\u4e0a\u3002\\n\\n### \u505a\u5497\u54a9\\n- `slideTextures.ts`\uff1a**~15 \u500b\u53c3\u6578\u5316 generator**\uff08\u58a8\u67d3\uff0f\u661f\u96f2\uff0f\u7d19\u7e96\u7dad\uff0f\u65e5\u843d\u900f\u8996\uff0f\u767c\u5149\u6383\u63cf\uff0f\u79d1\u6280\u683c\uff0f\u534a\u8abf\uff0f\u6563\u843d\uff0f\u6d77\u6d6a\uff0f\u88c2\u7d0b\uff0f\u67d4\u7db2\uff0f\u4f4e\u9762\uff0f\u5927\u7406\u77f3\uff0f\u7bc0\u6176 bokeh\uff0f\u566a\u9ede\uff09\uff0c\u6bcf\u5957 pack \u914d generator + \u81ea\u5df1\u8272\u677f\uff08`TEX` \u767b\u8a18\u8868\uff0c**\u5168 34 \u5957**\uff09\u3002\\n- `coverTextureUri(packId)`\uff1a**browser-guarded**\uff08node/SSR \u56de `null`\uff09\u3002\\n- **8 \u500b pack \u6a94\u5605\u6240\u6709\u5c01\u9762**\u63a5\u99c1\uff1a\u7d0b\u7406\u505a\u5e95\u3001\u5187 canvas \u6642 fallback \u539f\u672c\u7d14\u8272/\u6f38\u5c64\u5e95\u3001\u6709\u76f8\u6642\u76f8\u70ba\u5e95\u3002\\n- comic \u9ed1\u6846\u6539\u7121\u586b\u8272\u7b49\u7d0b\u7406\u900f\u51fa\uff08\u4fee overdraw\uff09\u3002\\n- \u5b88\u9580\u6e2c\u8a66\uff1anode \u7121 canvas \u2192 `null`\uff08\u6c38\u4e0d throw\uff09\u3002\\n\\n### \u91cd\u8981\\n- **\u751f\u7522\u96f6\u65b0\u4f9d\u8cf4**\uff08\u700f\u89bd\u5668\u5167\u7f6e Canvas\uff1bPOC/\u9a57\u8b49\u7528\u5605 `@napi-rs/canvas` \u672a\u5165 package.json\uff09\u3002\\n- \u81ea\u9a57\uff1asandbox render 34 \u5957 contact sheet\uff08\u5149\u5e95\u6de1\u96c5\u5514\u6436\u6a19\u984c\u3001\u6df1\u5e95\u5920\u6232\uff09\u3002\\n- \u771f\u5f15\u64ce\uff08\u6a21\u64ec\u700f\u89bd\u5668 canvas\uff09\uff1a**34/34 \u5c01\u9762\u90fd\u5d4c\u5230\u7d0b\u7406\u3001\u96f6\u8ca0 `<a:ext>`\u3001\u7121 throw**\uff1b`tsc`/`build`/**3903 \u6e2c\u8a66**\u5168\u7da0\uff08fallback \u8def\u5f91\uff09\u3002\\n- \u26a0\ufe0f \u8996\u89ba/\u76f8\u5bb9\u6027\u9700 Mac \u958b\u6a94\u78ba\u8a8d\uff08\u5df2\u767c\u4ee3\u8868 12 \u5957 zip\uff09\u3002\\n\\n### \u4e4b\u5f8c\uff08Stage 2\uff09\\n\u5b57\u9ad4\u505a **Canvas \u6587\u5b57**\uff08\u53ef\u9078\u300c\u9ad8\u64ec\u771f\u300d\uff09\u2014\u2014 \u628a\u7279\u8272\u5b57\u9ad4 render \u6210\u5716\uff0c\u8de8\u5e73\u53f0\u4e00\u81f4\uff1b\u6b63\u6587\u7dad\u6301\u539f\u751f\u53ef\u7de8\u8f2f\u3002\u672c PR \u843d\u5497\u5148\u505a\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9\"\n  },\n  {\n    \"id\": \"github-feedback-comment-f437f708fed36a02\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/27#issuecomment-4686277287\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/27#issuecomment-4686277287\\nTitle: \\nBody:\\n[vc]: #Z3ky/Qu58OC+Dc+GoSfv1YBoqnvkXrRN+m4PDAR+lXs=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJl\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-9df531cf6c2a6ffd", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434279, "scanner": "foundry_dataset", "fingerprint": "67c06b7e03f53bed1e8200358daa2e6f7897f4232ef9a2c3ececa650d84c53bf", "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": "SimonNg0225/ntk-platform#25", "human_labels": ["data_schema_persistence", "deployment_env_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "25", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.912, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-c8959703e8eb01ff", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "ui_or_frontend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#25\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#25\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'data_schema_persistence': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1, 'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-210119ed0b629d13\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"data_schema_persistence\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/25\",\n    \"text\": \"GitHub feedback: data_schema_persistence\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/25\\nTitle: fix(slides): \u4fee\u6b63\u975e\u6cd5\u8ca0 &lt;a:ext&gt; \u4ee4 PowerPoint \u8b80\u5514\u5230\u6a94\uff08vapor \u7b49 6 \u5957\uff09\\nBody:\\n## \u554f\u984c\\n**\u84b8\u6c7d\u6ce2 vapor \u751f\u6210\u5605 .pptx,PowerPoint\u300c\u7121\u6cd5\u8b80\u53d6\u300d**(\u5176\u9918 33 \u5957\u958b\u5230)\u3002\\n\\n## \u6839\u56e0\\n\u659c\u7dda\uff0f\u5411\u4e0a\u7dda\u7d93 pptxgenjs \u6703\u51fa**\u8ca0 `cx`/`cy` extent**(\u4f8b\u5982 vapor \u7684 `perspGrid` \u7531\u6d88\u5931\u9ede\u5411\u5169\u908a\u756b\u900f\u8996\u659c\u7dda,\u534a\u908a `w = bx - cx` \u70ba\u8ca0)\u3002OOXML \u898f\u5b9a `<a:ext>` \u5fc5\u9808 **\u2265 0** \u2014\u2014 \u8ca0\u503c\u96d6\u7136 well-formed,\u4f46 schema \u975e\u6cd5,**PowerPoint \u76f4\u63a5\u62d2\u8b80**\u3002vapor \u4e2d\u62db\u6700\u91cd(5 \u500b\u8ca0 ext);\u6383\u63cf\u767c\u73fe**\u5171 6 \u5957**\u6709\u6b64\u6f5b\u5728 bug\u3002\\n\\n**\u540c\u6f38\u5c64\u7121\u95dc** \u2014\u2014 gradFill \u672c\u8eab\u5408\u6cd5,33 \u5957\u7167\u958b\u3002\\n\\n## \u4fee\u6cd5\\n\u51fa\u6a94\u5f8c PizZip \u968e\u6bb5(\u540c theme patch / \u6f38\u5c64\u6ce8\u5165\u540c\u5c64)\u65b0\u589e **`normalizeNegExt`**:\u5c07\u8ca0 extent \u8f49\u6b63 + \u5c0d\u61c9 `flipH`/`flipV` + \u5e73\u79fb `off`,**\u5916\u89c0\u4e0d\u8b8a**,\u4e00\u6b21\u904e\u4fee\u6652\u6240\u6709 pack\u3002\\n\\n## \u9a57\u8b49\\n- `tsc` \u2705 **3876 \u6e2c\u8a66\u5168\u7da0**(+ \u65b0\u589e\u56de\u6b78\u6e2c\u8a66:\u5168 34 \u5957\u96f6\u8ca0 ext)\u2705\\n- \u771f\u5f15\u64ce\u6838\u5be6:34 \u5957 render **\u96f6\u8ca0 `<a:ext>`\u3001XML well-formed**\u3002\\n- \u5df2\u751f\u6210\u4fee\u6b63\u5f8c\u5605 vapor\u300c\u9999\u6e2f\u7684\u71df\u5546\u74b0\u5883\u300d\u6a94\u4ea4\u7528\u6236 PowerPoint \u78ba\u8a8d\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-a64e2ac8e8643e58\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/25#issuecomment-4678931957\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/25#issuecomment-4678931957\\nTitle: \\nBody:\\n[vc]: #XiqsT2chEIPJ8EBuvoI4LJoDBf5nM/rNAEAAPNmIZdo=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9lem\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-57fb4ca75b6ac1f5", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434278, "scanner": "foundry_dataset", "fingerprint": "6102fb16afd5d529486ae804735c0e6313e4e21d58dd21282d8b446f9179fc30", "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": "SimonNg0225/ntk-platform#23", "human_labels": ["api_integration_gap", "deployment_env_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "23", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.82, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-535a8fc84dc34823", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 5, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "ui_or_frontend": 4}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#23\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#23\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 5\nLabels: {'api_integration_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 4, 'test_or_ci': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-1ccca3331f1c96ab\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/23\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/23\\nTitle: feat(slides): \u6f38\u5c64\u6ce8\u5165\u5f15\u64ce + isometric/vapor POC\uff08\u89e3\u7b2c\u4e00\u500b\u5f15\u64ce\u9650\u5236\uff09\\nBody:\\n## \u5167\u5bb9\\n\u89e3\u6c7a\u300cpptxgenjs \u53ea\u652f\u63f4 solid fill\u3001\u505a\u5514\u5230\u6f38\u5c64\u300d\u5605\u5f15\u64ce\u9650\u5236 \u2014\u2014 **\u56de\u5831\u6700\u9ad8\u3001\u98a8\u96aa\u6700\u4f4e**\u55f0\u500b\u3002\\n\\n### \u505a\u6cd5\uff08\u7e5e\u904e API \u9650\u5236\uff0c\u5514\u6539\u683c\u5f0f\uff09\\npptxgenjs API \u53ea\u6709 `'none'|'solid'` fill\uff0c\u4f46 **.pptx \u683c\u5f0f\u672c\u8eab\u652f\u63f4\u6f38\u5c64**\u3002\u6240\u4ee5\uff1a\\n1. pack \u7528 `gradLinear(angle, stops)` / `gradRadial(stops)` \u651e\u4e00\u500b **FE-sentinel \u7d14\u8272**\u7576 fill\uff08`FE` \u524d\u7db4\uff0cpack \u8abf\u8272\u76e4\u5f9e\u4e0d\u4f7f\u7528\uff09\u3002\\n2. \u51fa\u6a94\u5f8c\u55ba **PizZip \u968e\u6bb5**\uff08\u540c\u65e2\u6709 theme patch \u4e00\u9f4a\uff09\uff0c\u5c07\u8a72 sentinel \u7684 `<a:solidFill>` \u63db\u6210 OOXML `<a:gradFill>`\u3002\\n3. **\u4fdd\u6301\u5411\u91cf\u3001\u53ef\u7de8\u8f2f\u3001\u6a94\u6848\u7167\u6a23\u7d30**\uff08POC \u6bcf\u4efd ~10KB\uff09\u3002\\n\\n`injectGradients` \u5305 try/catch\uff1a\u842c\u4e00\u6ce8\u5165\u5931\u6557\u53ea\u6703 fallback\uff08\u5514 throw\u3001\u5514\u5d29\uff09\u3002\u975e reentrant\uff08`buildPptxFile` \u5167 reset\u2192\u751f\u6210\u2192inject \u9806\u5e8f\u4f7f\u7528\uff09\u3002\\n\\n### POC\uff08\u5169\u5957\u5148\u8a66\uff09\\n- **isometric** \u2014 \u7acb\u9ad4\u584a\u771f\u53d7\u5149\u6f38\u5c64\uff08\u9802\u4eae \u2192 \u9762\u8272 \u2192 \u5e95\u6697\uff09\uff0c\u7a4d\u6728\u7531\u300c\u5e73\u9762\u5047 3D\u300d\u8b8a\u300c\u6709\u53d7\u5149\u300d\u3002\\n- **vapor** \u2014 \u65e5\u843d\u771f\u6f38\u5c64\uff08\u6843\u7d05 \u2192 \u7d2b \u2192 \u9752\uff09\u53d6\u4ee3\u539f\u672c\u5047\u6a6b\u5e36\u3002\\n\\n### \u9a57\u8b49\\n- `tsc` \u2705 **3875 \u6e2c\u8a66\u5168\u7da0**\uff08+3 \u6f38\u5c64\u55ae\u5143\u6e2c\u8a66\uff09\u2705\\n- \u771f\u5f15\u64ce\u6838\u5be6\uff1aisometric / vapor \u7684 slide XML \u78ba\u6709 `<a:gradFill>`\u3001**\u96f6\u6b98\u7559 sentinel**\uff1binkwell \u5c0d\u7167\u7d44\u4e0d\u53d7\u5f71\u97ff\uff1b**\u5168 34 \u5957 render \u7121 throw**\u3002\\n- \u26a0\ufe0f **\u8996\u89ba / PowerPoint\u300c\u4fee\u5fa9\u300d\u76f8\u5bb9\u6027**\uff1a\u6211\u55ba\u74b0\u5883\u5187\u5f97 render pptx \u505a\u5716\uff0c\u9700\u4f60\u958b POC \u6a94\uff08\u5df2\u53e6\u767c zip\uff09\u55ba PowerPoint \u8089\u773c\u78ba\u8a8d\u3002\\n\\n### \u4e0b\u4e00\u6b65\uff08\u78ba\u8a8d OK \u5f8c\uff09\\n\u540c\u4e00\u6a5f\u5236\u92ea\u53bb **neon / cosmos \u771f\u767c\u5149\uff08radial\uff09**\u3001**sumi \u771f\u58a8\u97fb\"\n  },\n  {\n    \"id\": \"github-feedback-comment-a39f435b231dd423\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/23#issuecomment-4677533570\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/23#issuecomment-4677533570\\nTitle: \\nBody:\\n[vc]: #/z8BpL93/N2mxhKaKhjMH953Gq8JFjwPHtOpPmd7KsM=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-e2675aeaccc1b7e3", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434277, "scanner": "foundry_dataset", "fingerprint": "05a5b296f2c595dad49109bc1b8bee638c3cbed92e129c511191670f871dde83", "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": "SimonNg0225/ntk-platform#22", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "ui_or_frontend"], "issue_number": "22", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.812, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-c729d664f5b66bd1", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 9, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 9}, "linked_commit_count": 4, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#22\nRepo: SimonNg0225/ntk-platform\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: 9\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 9}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-de201b46d8dafafd\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/22\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/22\\nTitle: feat(slides): \u6a21\u677f\u64f4\u5145\u81f3 34 \u5957\uff08+10 \u500b\u65b0\u5947\u98a8\u683c\uff09\\nBody:\\n## \u5167\u5bb9\\n\u7c21\u5831\u6a21\u677f **24 \u2192 34 \u5957**\uff0c\u52a0 10 \u500b\u65b0\u5947\u98a8\u683c\uff08\u6db5\u84cb\u5361\u901a\uff0f\u4e2d\u4e16\u7d00\uff0f3D feel \u7b49\uff09\uff0c\u6bcf\u5957\u9023**\u62db\u724c\u7248\u5f0f override + \u9010\u7248\u6bcd\u984c deco**\uff0c\u4e26\u63a5\u5165\u65e2\u6709 pack-aware \u751f\u6210 / emphasis / \u7e2e\u5716\u9810\u89bd\u3002**\u5168\u90e8\u53ea\u7528\u57fa\u672c shape**\uff08rect/roundRect/ellipse/line/chevron/triangle\uff09\u7d44\u5408\uff0crender \u5b89\u5168\u3002\\n\\n### gallery5\\n- **comic \u6f2b\u756b** \u2014 \u7f8e\u5f0f\u6f2b\u756b\u7c97\u9ed1\u6846\uff0b\u534a\u8272\u8abf\uff1bcards = \u5206\u93e1 panel\\n- **manuscript \u624b\u6284\u672c** \u2014 \u4e2d\u4e16\u7d00\u6ce5\u91d1 drop-cap \u9996\u5b57\uff1bbullets = \u6731\u7d72\u6b04\\n- **isometric \u7acb\u9ad4** \u2014 \u7a4d\u6728 pop-out\uff08offset block \u5047 3D\uff09\uff1bstats = \u7acb\u9ad4\u584a\\n- **glitch \u6545\u969c** \u2014 \u8cfd\u535a\u9f90\u514b\u8272\u5dee\uff0b\u6383\u63cf\u7dda\uff1bcompare = RGB \u96d9\u983b\\n\\n### gallery6\\n- **vapor \u84b8\u6c7d\u6ce2** \u2014 Y2K \u900f\u8996\u5730\u5e73\u7dda\uff0b\u65e5\u843d\u8272\u5e36\uff1bstats = \u65e5\u843d tiles\\n- **bauhaus \u5305\u6d69\u65af** \u2014 \u4e09\u539f\u8272\u5713\u4e09\u89d2\u65b9\uff1bcards = \u5e7e\u4f55\u8272\u584a\\n- **cosmos \u661f\u5716** \u2014 \u661f\u7a7a\u8ecc\u9053\uff1bsteps = \u661f\u5ea7\u9023\u7dda\\n\\n### gallery7\\n- **scrapbook \u624b\u5e33** \u2014 \u7d19\u81a0\u5e36\u62fc\u8cbc\uff1bcards = \u4fbf\u5229\u8cbc\u7d19\u7247\\n- **sumi \u6c34\u58a8** \u2014 \u758a\u7070\u584a\u626e\u6f51\u58a8\uff0b\u6731\u7802\u5370\uff1bquote = \u6c34\u58a8\u5927\u5f15\u6587\\n- **brutalist \u7c97\u7377** \u2014 \u786c\u908a\u91cd\u6846\u5927\u5b57\uff1bstats = \u751f\u731b\u6578\u5b57\\n\\n### \u63a5\u7dda\\n`SlidePackId` union +10\u3001`PACK_LIST` \u8a3b\u518a `GALLERY_PACKS_5/6/7`\u3001`PACK_FAVORS` +10\u3001\u6587\u6848\u300c24 \u5957\u300d\u2192\u300c34 \u5957\u300d\uff08`SlideGen` \u7528 `SLIDE_PACKS.length` \u52d5\u614b\uff09\u3002\\n\\n### \u9a57\u8b49\\n- `tsc` \u2705 `build` \u2705 **3872 \u6e2c\u8a66\u5168\u7da0** \u2705\\n- **34 \u5957**\u771f\u5f15\u64ce render\uff08\u62db\u724c\uff0fdeco\uff0femphasis\uff09**\u7121\u4e00 throw**\u3001`SLIDE_PACKS.leng\"\n  },\n  {\n    \"id\": \"github-feedback-comment-5b6a9bf06f8beb90\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/22#issuecomment-4677454659\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/22#issuecomment-4677454659\\nTitle: \\nBody:\\n[vc]: #ywws5ji01RRFo7ym/VOZNCKJ3qLP0GlEv9y0Vz/nu9E=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsIn\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-deddeebee2a03221", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434276, "scanner": "foundry_dataset", "fingerprint": "41002f2bfe744dc3a9153898cae8e26a18ec8bf4c15bafc3fc137d8cd6f89422", "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": "SimonNg0225/ntk-platform#21", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "ui_or_frontend"], "issue_number": "21", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.795, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-aca10d6139e14854", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 9, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 9}, "linked_commit_count": 4, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#21\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: SimonNg0225/ntk-platform#21\nRepo: SimonNg0225/ntk-platform\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: 9\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 9}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-fba47e8f9f30a8d4\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/21\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/21\\nTitle: feat(slides): \u6a21\u677f\u64f4\u5145\u81f3 24 \u5957\uff08+8 \u5957\u5168\u65b0\u98a8\u683c\uff0c\u6975\u5ea6\u591a\u5143\uff09\\nBody:\\n## \u5167\u5bb9\\n\u7c21\u5831\u6a21\u677f **16 \u2192 24 \u5957**\uff0c\u7540\u7528\u6236\u66f4\u5927\u8a2d\u8a08\u9078\u64c7\u6b0a\u3002\u65b0\u589e 8 \u5957\u98a8\u683c\u540c\u73fe\u6709\u5b8c\u5168\u5514\u91cd\u758a\uff0c\u6bcf\u5957\u9023**\u62db\u724c\u7248\u5f0f override + \u9010\u7248\u6bcd\u984c deco**\uff0c\u4e26\u63a5\u5165\u65e2\u6709 pack-aware \u751f\u6210 / emphasis / \u7e2e\u5716\u9810\u89bd\u3002\\n\\n### gallery3\uff08`pptxPacksGallery3.ts`\uff09\\n- **washi \u548c\u7d19** \u2014 \u4f98\u5bc2\u7559\u767d\u3001\u67ff\u8272\uff1b\u62db\u724c quote = \u77ed\u518a tanzaku \u7d19\u689d\uff1bdeco \u5370\u7ae0\u9010\u7248\u8f49\u89d2\\n- **terminal \u7d42\u7aef** \u2014 \u7d42\u7aef\u6a5f\u8996\u7a97 chrome\u3001Consolas \u87a2\u5149\u7da0\uff1b\u62db\u724c steps = \u547d\u4ee4 log\uff1bdeco \u6253\u5b57\u6e38\u6a19\u524d\u9032\\n- **pixel \u50cf\u7d20** \u2014 8-bit \u96f6\u5713\u89d2\u3001\u8857\u6a5f\uff1b\u62db\u724c stats = score tiles\uff1bdeco \u91d1\u5e63\u9010\u7248\u905e\u589e\\n- **botanic \u6a19\u672c** \u2014 \u7530\u91ce\u7b46\u8a18\u3001\u82d4\u7da0\uff1b\u62db\u724c cards = \u6a19\u672c\u7c64\uff1bdeco \u82d4\u8449\u89d2\u98fe\\n\\n### gallery4\uff08`pptxPacksGallery4.ts`\uff09\\n- **marble \u5178\u85cf** \u2014 \u7f8e\u8853\u9928\u3001\u91d1\u96d9\u7dda Georgia\uff1b\u62db\u724c quote = \u5c55\u54c1\u8aaa\u660e\u724c\\n- **origami \u647a\u7d19** \u2014 \u4e09\u89d2\u647a\u758a\u5e7e\u4f55\uff1b\u62db\u724c steps = \u647a\u5e8f\u5716\u3001\u9010\u7248\u4e09\u89d2\u65cb\u8f49\\n- **cinema \u83f2\u6797** \u2014 \u6232\u9662\u9f52\u5b54\u5e36\uff1b\u62db\u724c steps = storyboard\u3001SC \u5834\u865f\u905e\u589e\\n- **festival \u63ee\u6625** \u2014 \u7bc0\u6176\u7d05\u91d1\u3001\u76f4\u5e61\u5c01\u9762\uff1b\u62db\u724c cards = \u5229\u662f\u5c01\\n\\n### \u63a5\u7dda\\n- `SlidePackId` union +8\u3001`PACK_LIST` \u8a3b\u518a `GALLERY_PACKS_3/4`\u3001`PACK_FAVORS` \u52a0 8 \u5957\u751f\u6210\u504f\u597d\u3002\\n- \u6587\u6848\u300c16 \u5957\u300d\u2192\u300c24 \u5957\u300d\uff08`SlideGen` \u6539\u7528 `SLIDE_PACKS.length` \u52d5\u614b\uff0c\u4ee5\u5f8c\u52a0 pack \u5514\u4f7f\u518d\u6539\uff09\uff0c\u4e2d\u82f1 i18n \u540c\u6b65\u3002\\n\\n### \u9a57\u8b49\\n- `tsc` \u2705 `build` \u2705 **3872 \u6e2c\u8a66\u5168\u7da0** \u2705\\n- **24 \u5957**\u771f\u5f15\u64ce render\uff08\u542b\u62db\u724c\uff0fdeco\uff0femphasis\uff09**\u7121\u4e00 throw**\u3001`SLIDE_PACKS.length === 24` \u2705\"\n  },\n  {\n    \"id\": \"github-feedback-comment-ad2a7337182c72d1\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/21#issuecomment-4677362278\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/21#issuecomment-4677362278\\nTitle: \\nBody:\\n[vc]: #qjyxHZY3wwU+ppHhqJQ4s6c58YvQMIgVtDOHLsEhyZU=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInBy\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-2945f84ea194ec77", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434275, "scanner": "foundry_dataset", "fingerprint": "973b55a841097c93d82124308054e48d9be3bcb4aa408792b15d0d2f53f7c239", "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": "SimonNg0225/ntk-platform#20", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "20", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.82, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-94aea3067b44bc40", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 5, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "ui_or_frontend": 4}, "linked_commit_count": 4, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#20\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#20\nRepo: SimonNg0225/ntk-platform\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: 5\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'test_or_ci': 1, 'ui_or_frontend': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ec046513a5815129\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/20\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/20\\nTitle: feat(slides): AI \u9010\u7248\u63a7\u5236\u5f37\u8abf\u7a0b\u5ea6\uff08emphasis \u91cd\u9ede\u7248 + accent L-frame\uff09\\nBody:\\n## \u5167\u5bb9\\n\u7540 AI **\u9010\u7248\u63a7\u5236\u5f37\u8abf\u7a0b\u5ea6**\uff0c\u9020\u6210\u6210\u5957\u7c21\u5831\u5605\u8f15\u91cd\u7bc0\u594f\u3002\\n\\n\u65b0\u589e `Slide.emphasis` \u6b04\u4f4d\uff1a\\n- **prompt**\uff1a\u53eb AI \u5168\u5957\u53ea\u63c0 **1-3 \u7248\u6700\u91cd\u8981\uff0f\u9ad8\u6f6e**\u5605\u7248\u6a19 `\\\"emphasis\\\": true`\uff08\u6838\u5fc3\u6982\u5ff5\u3001\u7e3d\u7d50\u91d1\u53e5\u2026\uff09\uff0c\u5514\u597d\u591a\u6a19\u3002\\n- **parser**\uff1a\u89e3\u6790 `emphasis`\uff08section \u7248\u5514\u6a19\uff09\u3002\\n- **engine**\uff1a`renderEmphasisFrame` \u2014\u2014 \u91cd\u9ede\u7248\u756b **accent L-frame\uff08\u9802\u8272\u5e36 + \u5de6\u810a\uff09**\uff1bdispatch \u55ba `deco` \u5f8c\u6309 `s.emphasis` \u756b\uff0c\u53ea\u64fa\u6700\u908a\u4f4d\uff08x0/y0\uff09\uff0c\u5514\u58d3\u5167\u5bb9\u3002\\n- \u901a\u7528\u65bc\u5168 16 pack\uff08\u7528\u5404\u81ea `pack.accent`\uff09\uff0c\u7f3a\u7701\u5187 emphasis \u5b8c\u5168\u7121\u5f71\u97ff\u3002\\n\\n### \u6548\u679c\\n\u63ed\u4e00\u4efd deck \u6642\uff0c\u91cd\u9ede\u7248\u6709 accent \u908a\u6846\u300c\u8df3\u300d\u51fa\u569f\uff0c\u666e\u901a\u7248\u514b\u5236 \u2192 \u660e\u78ba\u8f15\u91cd\u7bc0\u594f\u3002\\n\\n### \u9a57\u8b49\\n- `tsc` \u2705\u3000`build` \u2705\u3000**3872 \u6e2c\u8a66\u5168\u7da0**\uff08+ emphasis prompt/parse \u6e2c\u8a66\uff09\u2705\\n- 16 pack \u5e36 emphasis \u7248\u771f\u5f15\u64ce render **\u7121 throw** \u2705\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-8e97c8f7a0676cf2\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/20#issuecomment-4676891246\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/20#issuecomment-4676891246\\nTitle: \\nBody:\\n[vc]: #0zd4P9t4GPw5SMfwR3/iffFq4fL2sRN+NM9yVdDI99U=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC82MXJYY3lIblp5UkFHeDRTUlJlZXo4dkxwQVdDIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGU\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-efcd46153e90c70c", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434274, "scanner": "foundry_dataset", "fingerprint": "9d40e109c6e3629acd9380d317e9be9ec693f4507e0884c245c5c88b9609360a", "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": "SimonNg0225/ntk-platform#2", "human_labels": ["deployment_env_gap", "security_auth_secret"], "issue_number": "2", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.627, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-ba85dbf3df0410f3", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#2\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: SimonNg0225/ntk-platform#2\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-65a4f98b585cdb09\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/2\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/2\\nTitle: NTK Platform v0.3\uff1a23 \u500b\u529f\u80fd + \u6d77\u8ecd\u85cd\u4e3b\u984c + \u624b\u6a5f responsive + \u767b\u5165\u6846\u67b6\\nBody:\\n## \u6982\u8981\\n\u7531\u521d\u6b65\u6846\u67b6\u64f4\u5c55\u6210\u4e00\u500b\u6709 **23 \u500b\u53ef\u904b\u4f5c\u529f\u80fd**\u5605\u500b\u4eba\u5b78\u7fd2\u8207\u5de5\u4f5c\u5e73\u53f0\uff08\u70ba\u9999\u6e2f BAFS \u5546\u696d\u7ba1\u7406\u8001\u5e2b\u5ea6\u8eab\uff09\u3002\\n\\n## \u91cd\u9ede\\n- **\u96d9\u6a21\u5f0f\u5207\u63db**\uff08\ud83d\udcd8 \u5b78\u7fd2 / \ud83d\udcbc \u5de5\u4f5c\uff09\uff0c\u6d77\u8ecd\u85cd\u4e3b\u984c\uff0c\u624b\u6a5f responsive\uff0c\u5206\u7d44\u5c0e\u89bd\\n- **\u5171\u7528\u8cc7\u6599\u5c64**\uff08localStorage\uff0c\u7d50\u69cb\u5c0d\u9f4a Supabase\uff09+ \u9810\u8f09 BAFS \u5546\u696d\u7ba1\u7406\u8ab2\u984c\\n- **\u767b\u5165\u6846\u67b6**\uff08Google / Supabase\uff09\uff1a\u8a2d\u5b9a\u74b0\u5883\u8b8a\u6578\u5373\u555f\u7528\uff0c\u672a\u8a2d\u5b9a\u4ee5\u8a2a\u5ba2\u6a21\u5f0f\u904b\u4f5c\\n\\n## \u529f\u80fd\uff0823\uff09\\n- \ud83d\udcd8 \u5b78\u7fd2\uff088\uff09\uff1a\u5b78\u7fd2\u5100\u8868\u677f\u3001\u7b46\u8a18\u3001\u77e5\u8b58\u5361+\u9593\u9694\u91cd\u8907(SRS)\u3001\u95b1\u8b80\u6e05\u55ae\u3001\u76ee\u6a19\u3001\u7fd2\u6163\u8ffd\u8e64\u3001\u5c08\u6ce8\u8a08\u6642\u5668\u3001\u5b78\u7fd2\u65e5\u8a8c\\n- \ud83d\udcbc \u5de5\u4f5c\uff0812\uff09\uff1a\u5de5\u4f5c\u5100\u8868\u677f\u3001\u8ab2\u7a0b\u9032\u5ea6\u3001\u5099\u8ab2/\u6559\u6848\u3001\u6642\u9593\u8868\u3001BAFS\u984c\u5eab\u3001\u6559\u5b78\u8cc7\u6e90\u5eab\u3001\u73ed\u5225\u7ba1\u7406\u3001\u6210\u7e3e\u7ba1\u7406\u3001\u9ede\u540d\u51fa\u5e2d\u3001\u5bb6\u9577\u6e9d\u901a\u3001\u5f85\u8fa6\u6279\u6539\u3001\u6703\u8b70\u7b46\u8a18\\n- \ud83d\udd17 \u5171\u7528\uff083\uff09\uff1a\u884c\u4e8b\u66c6\u3001\u5168\u57df\u641c\u5c0b\u3001\u5feb\u901f\u64f7\u53d6 Inbox\\n\\n## \u9a57\u8b49\\n- `tsc --noEmit` \u2705 \u901a\u904e\\n- `npm run build` \u2705 \u901a\u904e\\n\\n## \u90e8\u7f72\u6ce8\u610f\\nVercel \u74b0\u5883\u8b8a\u6578\u9700\u7528 `VITE_` \u524d\u7db4\uff08\u975e `NEXT_PUBLIC_`\uff09\uff1a`VITE_SUPABASE_URL`\u3001`VITE_SUPABASE_ANON_KEY`\u3002Gemini key \u5c6c Phase 3\uff0c\u8a2d\u65bc Supabase Edge Function secret\uff0c\u5514\u597d\u653e\u524d\u7aef\u3002\\n\\nhttps://claude.ai/code/session_013knpjeFkgW6SJ9VPPhaaMs\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_013knpjeFkgW6SJ9VPPhaaMs)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7876e7ef1219ba79\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/2#issuecomment-4583300044\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/2#issuecomment-4583300044\\nTitle: \\nBody:\\n[vc]: #IoL7ODxxhTF6N9cBb0OgTxmpL8oh3d5lyNZb+qM4K6w=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJudGstcGxhdGZvcm0iLCJwcm9qZWN0SWQiOiJwcmpfTlBXS29McEdMUjVERVVENk44Qm1qcVJNaVVaSSIsInJvb3REaXJlY3RvcnkiOm51bGwsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9zaW1vbi1uZ3MtcHJvamVjdHMtNjdkNGQ2MTAvbnRrLXBsYXRmb3JtLzJmajRLaHlVeGZud\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-efbbf805a0f42b6e", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434273, "scanner": "foundry_dataset", "fingerprint": "75f02aa2571b5e6a4bf90c69bc6a86145941d7231496598277867b41f6aa62b6", "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": "SimonNg0225/ntk-platform#18", "human_labels": ["deployment_env_gap", "security_auth_secret"], "issue_number": "18", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.895, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-764485083bfa5b52", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 6, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#18\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#18\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 6\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d45baf50f450d3d9\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/18\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/18\\nTitle: feat(slides): \u7248\u9762\u7bc0\u594f + \u9010\u7248\u6bcd\u984c + \u751f\u6210\u7aef\u4ea4\u932f\uff08\u7834\u9801\u8207\u9801\u91cd\u8907\uff09\\nBody:\\n## \u5167\u5bb9\\n\u89e3\u6c7a\u300c\u540c\u4e00 template \u5167\u9801\u8207\u9801\u592a\u4f3c\u300d\uff08\u63a5\u7e8c #17\uff09\u3002\\n\\n### \u2460 \u7248\u9762\u7bc0\u594f\uff08renderBullets \u52a0 `seq`\uff09\\n\u540c\u6b3e bullets \u9023\u7e8c\u7248\u6309 `seq%3` \u8f2a\u66ff\u69cb\u5716\uff1a**\u55ae\u6b04 / \u5927\u9996\u9ede lede / \u5169\u6b04**\uff0c\u7834\u55ae\u6b04\u91cd\u8907\u611f\uff08chart\uff0f\u914d\u76f8\u7248\u7dad\u6301\u55ae\u6b04\uff09\u3002\\n\\n### \u2461 \u751f\u6210\u7aef\u4ea4\u932f\uff08prompt\uff09\\n`buildSlideSystem` base \u898f\u5247\u52a0\u300c\u5514\u597d\u9023\u7e8c 3 \u7248\u7528\u540c\u4e00\u6b3e\u3001\u5167\u5bb9\u5571\u5c31\u4e3b\u52d5\u63db stats/compare/steps/cards/quote\u300d\u3002\\n\\n### \u2462 \u9010\u7248\u6bcd\u984c\uff08\u65b0 `Pack.deco` hook\uff09\\n\u65b0\u589e `Pack.deco?(slide, ctx)` + `FrameCtx.seq`\uff08\u5167\u5bb9\u7248\u5e8f\uff09\uff1bengine \u55ba contentFrame \u5f8c\u3001\u5167\u5bb9\u524d\u547c\u53eb\u300216 pack \u5404\u4e00\u500b\u6309 seq **\u6f14\u9032**\u5605\u89d2\u843d\u7d30\u6bcd\u984c\uff1ablueprint \u5ea7\u6a19 A1\u2192B2\u3001transit\u300c\u7ad9 N\u300d\u905e\u589e\u3001ocean \u8d8a\u6f5b\u8d8a\u6df1 -10m\u2192-20m\u3001redgrid \u7530\u5b57\u683c\u9010\u683c\u3001grid \u5ea7\u6a19\u3001inkwell \u5370\u7ae0\u8f49\u89d2\u2026 \u5168\u90e8\u514b\u5236\u3001\u53ea\u64fa\u89d2\u908a\u3001\u5514\u58d3\u5167\u5bb9\u3002\\n\\n### \u9a57\u8b49\\n- `tsc` \u2705\u3000`build` \u2705\u3000**3870 \u6e2c\u8a66\u5168\u7da0** \u2705\\n- 16 pack \u771f\u5f15\u64ce render\uff08\u591a\u9023\u7e8c\u8981\u9ede\u7248\uff0c\u884c\u9f4a rhythm \u8b8a\u9ad4 + \u9010\u7248 deco\uff09**\u7121 throw** \u2705\\n\\n### \u6539\u52d5\u7bc4\u570d\\n`pptxLayouts.ts`\uff08\u2460 bullets \u8b8a\u9ad4\uff09\u3001`pptxPacks.ts`/`pptx.ts`\uff08FrameCtx.seq + deco hook + dispatch\uff09\u30013 \u500b pack \u6a94\uff08\u2462 deco\uff09\u3001`slidePrompts.ts`/test\uff08\u2461\uff09\u3002Pack token \u503c\u3001render dispatch \u4e3b\u7d50\u69cb\u4e0d\u8b8a\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-98a7f72bc818f39a\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/18#issuecomment-4676784523\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/18#issuecomment-4676784523\\nTitle: \\nBody:\\n[vc]: #FirXO6ZDgioz1Tg0cjdMwt4Vmr9W911X5G8fzkI71Ag=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSN\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-2c2adae55e611999", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434272, "scanner": "foundry_dataset", "fingerprint": "8566ad3e7fa68b798efe8af2f407749e6d57ff19e7ab761db4646a48b73a2709", "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": "SimonNg0225/ntk-platform#16", "human_labels": ["agent_instruction_gap", "deployment_env_gap"], "issue_number": "16", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.777, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-e04a9822ae609474", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 6, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#16\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: SimonNg0225/ntk-platform#16\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 6\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d18dfbb1d6f0b1cf\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/16\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/16\\nTitle: feat(slides): pack-aware \u5167\u5bb9\u751f\u6210\uff08\u6309\u6a21\u677f\u504f\u597d\u7248\u5f0f\u7d50\u69cb\uff09\\nBody:\\n## \u5167\u5bb9\\n\u6700\u6df1\u4e00\u5c64\u5dee\u7570\u5316 \u2014\u2014 **pack-aware \u5167\u5bb9\u751f\u6210**\uff1a\u6240\u9078\u6a21\u677f pack \u800c\u5bb6\u6703\u5f71\u97ff AI **\u751f\u6210\u5605\u5167\u5bb9\u7d50\u69cb**\uff0c\u5514\u6b62 render \u5c64\u3002\u6bcf\u500b pack \u5c0d\u61c9\u4f62\u5605\u5169\u6b3e\u62db\u724c layout\uff0c\u751f\u6210\u6642\u63d0\u793a AI\u300c\u5167\u5bb9\u5408\u9069\u6642\u512a\u5148\u7528\u55f0\u5572\u7248\u5f0f\u300d\uff0c\u4ee4\u751f\u6210\u51fa\u569f\u5605 deck \u81ea\u7136\u843d\u5230\u8a72 pack \u5605\u62db\u724c\u7d50\u69cb \u2014\u2014 **\u300c\u5c55\u793a\u5f62\u5f0f\u300d\u7531\u751f\u6210\u968e\u6bb5\u5c31\u6309 pack \u5206\u53c9**\u3002\\n\\n### \u505a\u6cd5\\n- `buildSlideSystem(subject, count, pack?)` \u65b0\u589e\u53ef\u9078 `pack` \u53c3\u6578\u3002\\n- `PACK_FAVORS` \u8868\uff1apack \u2192 { \u5169\u6b3e\u62db\u724c layout, \u98a8\u683c note }\uff08\u4f8b\uff1atransit\u2192\u6d41\u7a0b+\u5927\u6578\u5b57\u300c\u8def\u7dda\u65c5\u7a0b\u300d\u3001grid\u2192\u5c0d\u6bd4+\u5927\u6578\u5b57\u300c\u6578\u7406\u7cbe\u6e96\u300d\u3001press\u2192\u8981\u9ede+\u5927\u6578\u5b57\u300c\u65b0\u805e\u5831\u5c0e\u300d\u3001celadon\u2192\u5206\u985e\u5361+\u5927\u6578\u5b57\u300c\u79d1\u5b78\u81ea\u7136\u300d\u2026\uff09\u3002\\n- \u547d\u4e2d\u5c31 append \u4e00\u53e5\u7248\u5f0f\u504f\u597d\u63d0\u793a\uff08**\u53ea\u4fc2\u50be\u5411\u3001\u5514\u593e\u786c\u5806\u780c**\uff09\uff1b\u5187\u50b3 pack \u5247\u5b8c\u5168\u5514\u52a0\uff08**\u5411\u5f8c\u517c\u5bb9**\uff09\u3002\\n- `SlideGen` \u751f\u6210\u6642\u50b3\u5165\u5df2\u9078 `pack`\u3002\\n\\n### \u9a57\u8b49\\n- `tsc --noEmit` \u2705\u3000`npm run build` \u2705\\n- **3869 \u6e2c\u8a66\u5168\u7da0**\uff08\u539f 3868 + \u65b0\u589e pack-aware \u55ae\u5143\u6e2c\u8a66\uff1a\u547d\u4e2d\u6ce8\u5165\uff0f\u7f3a\u7701\u4e0d\u6ce8\u5165\uff09\u2705\\n\\n### \u6539\u52d5\u7bc4\u570d\\n\u53ea 3 \u500b slides \u6a94\uff08`slidePrompts.ts` / \u5176 test / `SlideGen.tsx`\uff09\uff1brender \u5f15\u64ce\u4e0d\u8b8a\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-1ac21137e127e72e\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/16#issuecomment-4676498753\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/16#issuecomment-4676498753\\nTitle: \\nBody:\\n[vc]: #tbEOPBGRXLVUnHOY27MBNYE1M7SSs9UIdwxAfUUrYKc=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC81NTJwSz\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-4d36b1fb0fa19c87", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434271, "scanner": "foundry_dataset", "fingerprint": "4902f5dee4dd57a5b1e44ee661dd3d3b2ecd6f0e86e048392f0f6a0adbfb8ec8", "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": "SimonNg0225/ntk-platform#15", "human_labels": ["agent_instruction_gap", "deployment_env_gap"], "issue_number": "15", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.777, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-df2f8728d55913e1", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 6, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#15\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: SimonNg0225/ntk-platform#15\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 6\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f4ef960e22b23218\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/15\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/15\\nTitle: feat(slides): \u6bcf\u500b\u6a21\u677f\u518d\u52a0\u7b2c\u4e8c\u500b\u62db\u724c\u7d50\u69cb\u7248\u5f0f\uff08\u5171 32 \u500b override\uff09\\nBody:\\n## \u5167\u5bb9\\n\u63a5\u7e8c #13 \u2014\u2014 \u7540 16 \u500b\u6a21\u677f pack **\u6bcf\u500b\u518d\u52a0\u4e00\u500b\u62db\u724c\u7d50\u69cb\u7248\u5f0f**\uff0c\u8986\u84cb\u7b2c\u4e8c\u500b layout\uff0c\u4ee4\u4e00\u4efd deck \u5167\u66f4\u591a\u7248\u90fd\u5e36 pack \u6027\u683c\u3002\u6cbf\u7528 #13 \u7684 `Pack.overrides` \u6a5f\u5236\uff0c**\u5176\u4ed6 pack\uff0f\u672a\u8986\u5beb layout \u96f6\u5f71\u97ff**\u3002\u9023\u540c #13\uff0c\u6bcf\u500b pack \u800c\u5bb6\u6709 **2 \u500b\u62db\u724c\u7248\u5f0f\uff08\u5171 32 \u500b override\uff09**\u3002\\n\\n\uff08\u53d6\u4ee3 #14\uff1a\u8a72\u5206\u652f\u7531 squash \u524d\u820a\u5206\u652f\u958b\u51fa\u7522\u751f\u5047\u885d\u7a81\uff1b\u672c PR \u7531\u73fe\u6642 main cherry-pick \u540c\u4e00 commit\uff0c\u7dda\u6027\u7121\u885d\u7a81\u3002\uff09\\n\\n### \u65b0\u589e\u7b2c\u4e8c\u62db\u724c\\ntransit \u73ed\u6b21\u724c(stats) \u00b7 chalk \u677f\u66f8\u63a8\u5c0e\u93c8(steps) \u00b7 neon \u767c\u5149\u7ba1\u9053(steps) \u00b7 blueprint \u898f\u683c\u6a19(stats) \u00b7 ocean \u6df1\u5ea6\u8a08\u6ce1\u6ce1(stats) \u00b7 celadon \u5713\u76e4(stats) \u00b7 dawn \u6c23\u7403\u5361(cards) \u00b7 nocturne \u805a\u5149\u5f15\u6587(quote) \u00b7 grid \u6a21\u7d44\u7db2\u683c\u6578\u5b57(stats) \u00b7 seminar \u5927\u5b57\u601d\u8003\u984c(quote) \u00b7 press \u982d\u689d\u6578\u5b57(stats) \u00b7 confetti \u6ce1\u6ce1\u6578\u5b57(stats) \u00b7 pastel \u67d4\u548c\u5713\u5361(cards) \u00b7 ivy \u5b78\u9662\u984c\u8a5e(quote) \u00b7 redgrid \u96dc\u8a8c\u683c\u5361(cards) \u00b7 inkwell \u518a\u9801\u5361(cards)\\n\\n### \u9a57\u8b49\\n- `tsc --noEmit` \u2705\u3000`npm run build` \u2705\u3000**3868 \u6e2c\u8a66\u5168\u7da0** \u2705\\n- 16 pack \u771f\u5f15\u64ce render\uff08\u6bcf\u500b\u884c**\u5169\u500b** override\uff09**\u7121\u4e00 throw** \u2705\\n\\n### \u6539\u52d5\u7bc4\u570d\\n\u53ea 3 \u500b pack \u6a94\uff1b\u6a5f\u5236\u8207 dispatch\uff08#13\uff09\u4e0d\u8b8a\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-f358b42f18662fb4\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/15#issuecomment-4676369181\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/15#issuecomment-4676369181\\nTitle: \\nBody:\\n[vc]: #z6wid8ELeEi90vkbuyzBdnd/KrMLRCpdEnoXg2Ra3ts=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1p\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-dfbb24200a10c28e", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434270, "scanner": "foundry_dataset", "fingerprint": "ad7debe6135163c3bd5c661a63910e6d6f2f894f8a57d2853ec79a79889b29b9", "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": "SimonNg0225/ntk-platform#14", "human_labels": ["agent_instruction_gap", "deployment_env_gap"], "issue_number": "14", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.723, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-be37896f30dff324", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#14\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: SimonNg0225/ntk-platform#14\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6bf8819b280eae12\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/14\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/14\\nTitle: feat(slides): \u6bcf\u500b\u6a21\u677f\u518d\u52a0\u7b2c\u4e8c\u500b\u62db\u724c\u7d50\u69cb\u7248\u5f0f\uff08\u5171 32 \u500b override\uff09\\nBody:\\n\u5df2\u95dc\u9589\uff1a\u6b64 branch \u7531 #13 squash \u524d\u7684\u820a\u5206\u652f\u958b\u51fa\uff0c\u8207 main \u51fa\u73fe 3-way \u885d\u7a81\uff08\u5167\u5bb9\u5be6\u969b\u76f8\u540c\uff0c\u7d14 squash \u9020\u6210\uff09\u3002\u6539\u7531\u73fe\u6642 main cherry-pick \u540c\u4e00 commit \u7684\u4e7e\u6de8\u5206\u652f `claude/pack-sig2-clean` \u91cd\u958b\uff08\u7dda\u6027\u3001\u7121\u885d\u7a81\uff09\u53d6\u4ee3\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\"\n  },\n  {\n    \"id\": \"github-feedback-comment-0fbf3f7a88dcd58d\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/14#issuecomment-4676358601\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/14#issuecomment-4676358601\\nTitle: \\nBody:\\n[vc]: #g88KJQ3DEeanI/L9pN8Z/aXstGOhSyL9a3nlmHDmk7g=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC9Hd29lR1VIa3kzdU5uQ0I0TkxSdFhkRldKanRaIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtcGFjay1zaWctOWE3ZDVmLXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtcGFjay1zaWctOWE3ZDVmLXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIn0sInJvb3REaXJlY3RvcnkiOm51bGx9XX0=\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-62e9a4265acf69c9", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434269, "scanner": "foundry_dataset", "fingerprint": "4ee8ed997507d2ba5069ff9c78fb24b3e61163e73cd1c34ceeb58f272f445cf8", "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": "SimonNg0225/ntk-platform#13", "human_labels": ["deployment_env_gap", "security_auth_secret"], "issue_number": "13", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.912, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-b089f75c2c9467f4", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 6, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#13\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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#13\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 6\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-879fee86134e06cf\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/13\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/13\\nTitle: feat(slides): 16 \u500b\u6a21\u677f\u5404\u52a0\u62db\u724c\u7d50\u69cb\u7248\u5f0f\uff08per-pack layout override\uff09\\nBody:\\n## \u5167\u5bb9\\n\u7540 16 \u500b\u7c21\u5831\u6a21\u677f pack **\u6bcf\u500b\u4e00\u500b\u62db\u724c\u7d50\u69cb\u7248\u5f0f** \u2014\u2014 \u5514\u518d\u4fc2\u300c\u540c\u4e00\u9aa8\u67b6\u63db\u8272\uff0f\u63db marker\u300d\uff0c\u800c\u4fc2\u7d50\u69cb\uff0f\u69cb\u5716\u5c64\u7d1a\u5605\u5dee\u7570\u5316\u3002\\n\\n### \u6a5f\u5236\uff08\u4e7e\u6de8\u3001\u53ef\u6f38\u9032\u3001\u96f6\u56de\u6b78\uff09\\n- `Pack` \u65b0\u589e\u53ef\u9078 `overrides?: Partial<Record<SlideLayout, LayoutRenderFn>>`\u3002\\n- dispatcher \u5148\u67e5 `pack.overrides?.[layout]`\uff0c\u6709\u5c31\u7528 pack \u81ea\u5bb6\u6e32\u67d3\uff0c\u7f3a\u7701\u7167\u884c\u5171\u7528 `renderX`\u3002**\u5187 override \u5605 layout / \u5176\u4ed6 pack \u5b8c\u5168\u5514\u53d7\u5f71\u97ff\u3002**\\n\\n### 16 \u500b\u62db\u724c\u7248\u5f0f\\n| pack | \u62db\u724c\uff08layout\uff09 | pack | \u62db\u724c\uff08layout\uff09 |\\n|---|---|---|---|\\n| transit \u6708\u53f0 | \u5730\u9435\u7dda\u8def\u5716 (steps) | seminar \u8b1b\u5802 | \u8b70\u7a0b timeline (steps) |\\n| chalk \u7c89\u7b46 | \u9ed1\u677f T-chart (compare) | press \u5831\u7ae0 | \u5831\u7d19\u591a\u6b04 (bullets) |\\n| neon \u9713\u8679 | \u74b0\u5f62 gauge (stats) | confetti \u5f69\u6591 | \u6563\u843d\u4fbf\u5229\u8cbc (cards) |\\n| blueprint \u85cd\u66ec | \u5de5\u7a0b\u6a19\u8a3b (steps) | pastel \u7c89\u5f69 | A/B \u67d4\u6ce1 (compare) |\\n| ocean \u6df1\u6d77 | \u5206\u5c64\u6f5b\u964d (steps) | ivy \u7fe0\u5eec | \u7d0b\u7ae0\u5361 (cards) |\\n| celadon \u9752\u74f7 | \u540c\u5fc3\u5713\u653e\u5c04 (cards) | redgrid \u7fd2\u5b57 | \u96dc\u8a8c\u5927\u6578\u5b57 (stats) |\\n| dawn \u66d9\u5149 | \u8df3\u77f3\u8def\u5f91 (steps) | inkwell \u58a8\u97fb | \u5370\u7ae0\u5f15\u6587 (quote) |\\n| nocturne \u591c\u8b80 | \u6d6e\u9762\u677f HUD (stats) | grid \u65b9\u683c | \u5ea7\u6a19\u8868 (compare) |\\n\\n\u6bcf\u500b override \u53ea\u7528\u8a72 pack \u81ea\u5df1\u5605 token\u3001\u5168\u90e8\u6587\u5b57\u7d93 `tx()`\u3001tints \u7528 `mix()`\u3001\u6574\u6578 fontSize\u3001\u7f3a\u6578\u64da\u65e9 return\u3002\\n\\n### \u9a57\u8b49\\n- `tsc \"\n  },\n  {\n    \"id\": \"github-feedback-comment-695ff8e895e7cec1\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/13#issuecomment-4676311850\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/13#issuecomment-4676311850\\nTitle: \\nBody:\\n[vc]: #6FlRY3uV4EzgpDMN38lVpXzUJmT1iMnlVxEle2WQSYs=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OU\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-6ed7e57a32befaf7", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 434268, "scanner": "foundry_dataset", "fingerprint": "e06eaedba2894699d76b75aba085b452ae2fec73dd4b71bc8c45c1260ea88942", "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": "SimonNg0225/ntk-platform#12", "human_labels": ["build_install_failure"], "issue_number": "12", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.877, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-f10ca0016e163b02", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#12\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_high_confidence\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#12\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'build_install_failure': 2}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-ca998b533d8f0950\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"build_install_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/12\",\n    \"text\": \"GitHub feedback: build_install_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/12\\nTitle: fix(deps): \u5c0d\u9f4a package-lock.json\uff08\u4fee npm ci EUSAGE \u5931\u6557\uff09\\nBody:\\n## \u554f\u984c\\nmain \u7684 `package-lock.json` \u8207 `package.json` \u5514\u540c\u6b65\uff1a`npm ci` \u6703\u5831 `EUSAGE`\uff08`Missing: esbuild@0.28.0 \u2026` \u7b49\u591a\u689d\uff09\uff0c\u4ee4 CI \u540c\u4efb\u4f55 `npm ci` \u5b89\u88dd\u5931\u6557\u3002\\n\\n## \u4fee\u6b63\\n\u91cd\u65b0 `npm install` \u5c0d\u9f4a lockfile\u3002**\u53ea\u6539 `package-lock.json`**\uff0c\u7121\u6539 `package.json`\u3001\u7121\u66f4\u52d5\u4f9d\u8cf4\u7248\u672c\u610f\u5716\u3002\\n\\n## \u9a57\u8b49\\n- `npm ci` \u2192 \u2705 \u901a\u904e\uff08exit 0\uff0c\u4e4b\u524d fail\uff09\\n- `npm run build` \u2192 \u2705 \u6210\u529f\\n\\n\u5efa\u8b70\u512a\u5148\u5408\u5165\uff0c\u4ee4 main \u7684 CI \u6062\u5fa9\u7da0\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-ade0958981154cf4\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"build_install_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/12#issuecomment-4676112727\",\n    \"text\": \"GitHub feedback: build_install_failure\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/12#issuecomment-4676112727\\nTitle: \\nBody:\\n[vc]: #Flzb9fVPfJCFzyodc1xvAP8wh3QaJZSPBUYzLH+hU2c=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC8zWDhGVDcxemZ4dndIajJ4Q2RIY3BCUzVpaTYzIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtZml4LWxvY2tmaWxlLXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IlBFTkRJTkciLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiZXppdGVhY2gtZ2l0LWNsYXVkZS1maXgtbG9ja2ZpbGUtc2ltb24tbmdzLXByb2plY3RzLTY3ZDRkNjEwLnZlcmNlbC5hcHAifX1dfQ==\\nThe latest updat\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-assumption_checks-58eca1986a012fde", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_test_ci_gap", "level": "error", "message": {"text": "Foundry mined test ci gap after feedback: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 457852, "scanner": "foundry_dataset", "fingerprint": "cb930045a5b99cb442f03de015b0ce9e32bfd56e53e6a228b1dada9a33984f32", "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_ci_gap": 1, "deployment_env_gap": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"claimed_resolved_unverified": 6, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 17, "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, "comment_chain_links_commit": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#9", "issue_number": "9", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-f160dfdcec806452", "graph_gold_label": "weak_supervision_needs_review", "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#9\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#9\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 9\nGraph consistency label: weak_supervision_needs_review\nNodes: 13\nEdges: 17\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 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, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-6282ac700cf3199a", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 457851, "scanner": "foundry_dataset", "fingerprint": "922e93703b8c63d882a1e88647b1971d2473d5ecc3b186f1487c45a80480c99b", "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_ci_gap": 1, "deployment_env_gap": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"claimed_resolved_unverified": 6, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 17, "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, "comment_chain_links_commit": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#8", "issue_number": "8", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-c943b6aea0c59581", "graph_gold_label": "weak_supervision_needs_review", "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#8\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#8\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#8\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 8\nGraph consistency label: weak_supervision_needs_review\nNodes: 13\nEdges: 17\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 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, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-b66ac03b6804fc1b", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 457850, "scanner": "foundry_dataset", "fingerprint": "5a88efc9b1534448d629ea699fb8ebabe8fb2eff99683663f9efec894ccd758b", "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_ci_gap": 1, "deployment_env_gap": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"claimed_resolved_unverified": 6, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 18, "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, "comment_chain_links_commit": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#7", "issue_number": "7", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-b1148b9262cb8f8a", "graph_gold_label": "weak_supervision_needs_review", "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: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#7\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#7\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#7\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 7\nGraph consistency label: weak_supervision_needs_review\nNodes: 14\nEdges: 18\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'commit': 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, 'comment_chain_links_commit': 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: {'claimed_resolved_unverified': 3, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-08b50746de2695be", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 457849, "scanner": "foundry_dataset", "fingerprint": "8c34b0d2afb1a505112740ab24f504e30e16aa2038c86a770177d6fefcb69192", "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_ci_gap": 1, "deployment_env_gap": 1, "verification_or_tests": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 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": {"not_resolved_or_not_observed": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 18, "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, "comment_chain_links_commit": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#6", "issue_number": "6", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-a5cd70416c5fd5a4", "graph_gold_label": "supported_by_verification_signal", "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: supported_by_verification_signal\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#6\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#6\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#6\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 6\nGraph consistency label: supported_by_verification_signal\nNodes: 14\nEdges: 18\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'commit': 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, 'comment_chain_links_commit': 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: {'claimed_resolved_with_verification_signal': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'bug_fix': 1, 'verification_or_tests': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-dedb693ef7e86573", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 457848, "scanner": "foundry_dataset", "fingerprint": "d6173e6035003e90a7abfe7b96c4cc4c8daf7a28b3f61826ed217859dc38c850", "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, "deployment_env_gap": 1, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "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}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "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": "SimonNg0225/ntk-platform#5", "issue_number": "5", "quality_tiers": {"unresolved": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-7167eaf504c8cfd5", "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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#5\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#5\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#5\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 5\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': 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, 'deployment_env_gap': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-5f8fde8102693363", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 457847, "scanner": "foundry_dataset", "fingerprint": "2261847d8083b142904052b8edb2eecad0d805b791525032034bbafd0a68eede", "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": 1, "test_ci_gap": 1, "api_or_backend": 1, "schema_or_data": 1, "ui_or_frontend": 12, "deployment_env_gap": 1, "verification_or_tests": 1, "claimed_resolved_unverified": 1, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 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_unverified": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 71, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 15, "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": 30, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 2, "pr_file": 15, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#39", "issue_number": "39", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-fce9b6b0e08088fd", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 5, "schema_or_data": 5, "ui_or_frontend": 60}}, "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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#39\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#39\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#39\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 39\nGraph consistency label: supported_by_verification_signal\nNodes: 30\nEdges: 71\nNode types: {'pr_file': 15, 'link_quality': 4, 'commit': 3, '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': 15, '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, '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, 'deployment_env_gap': 1, 'api_or_backend': 1, 'test_or_ci': 1, 'schema_or_data': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'human_reported_issue_then_fix_attempt': 1, 'claimed_resolved_unverified': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'claimed_resolved_unverified': 2}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-e4411530d3eb48f2", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 457846, "scanner": "foundry_dataset", "fingerprint": "9acdef27ce4d202ed35435c6441010be57354ffa3281f977128e0892dc596126", "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": 1, "test_ci_gap": 1, "api_or_backend": 1, "docs_or_claims": 2, "schema_or_data": 3, "ui_or_frontend": 12, "deployment_env_gap": 1, "verification_or_tests": 1, "claimed_resolved_unverified": 1, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 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_unverified": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "test_ci_gap_after_feedback", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 75, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 19, "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": 34, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 2, "pr_file": 19, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#35", "issue_number": "35", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-4c97039415609214", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 5, "docs_or_claims": 10, "schema_or_data": 15, "ui_or_frontend": 60}}, "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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#35\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#35\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#35\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 35\nGraph consistency label: supported_by_verification_signal\nNodes: 34\nEdges: 75\nNode types: {'pr_file': 19, 'link_quality': 4, 'commit': 3, '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': 19, '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, 'schema_or_data': 3, 'claimed_resolved_with_verification_signal': 3, 'docs_or_claims': 2, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'api_or_backend': 1, 'test_or_ci': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'human_reported_issue_then_fix_attempt': 1, 'claimed_resolved_unverified': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'claimed_resolved_unverified': 2}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-74c83d159a5fef9b", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 457845, "scanner": "foundry_dataset", "fingerprint": "fe5dcbbce564d22997fe992383d92f83ef5bdcd9f47f3142acc655efae91f3e4", "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_ci_gap": 1, "ui_or_frontend": 3, "deployment_env_gap": 1, "generated_provenance": 1, "self_attested_unverified": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "test_ci_gap_after_feedback", "outcomes": {"self_attested_unverified": 2, "claimed_resolved_unverified": 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": 2, "thread_has_comment": 2, "thread_touches_file": 3, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 2, "comment_chain_links_commit": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 17, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#34", "issue_number": "34", "quality_tiers": {"weak_supervision": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-3a641e1d3eff16c0", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"ui_or_frontend": 15}}, "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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#34\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#34\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#34\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 34\nGraph consistency label: weak_supervision_needs_review\nNodes: 17\nEdges: 31\nNode types: {'link_quality': 4, 'pr_file': 3, 'comment': 2, 'comment_chain': 2, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 6, 'chain_has_link_quality': 4, 'thread_touches_file': 3, 'comment_chain_links_commit': 3, 'issue_chain_touches_file': 3, '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': 3, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'generated_provenance': 1, 'bug_fix': 1, 'self_attested_or_generated_fix_unverified': 1, 'self_attested_unverified': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'self_attested_unverified': 2}\nQuality tiers: {'weak_supervision': 4}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-3a1ceaf8ee592438", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 452760, "scanner": "foundry_dataset", "fingerprint": "a4c0a474cb71e52e5d67523effa12c2a0498f9f502460c418cff862b8c23ea9a", "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, "schema_or_data": 3, "ui_or_frontend": 29, "deployment_env_gap": 1, "security_or_secrets": 2, "security_auth_secret": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 89, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 32, "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": 5, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 48, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 2, "pr_file": 32, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#32", "issue_number": "32", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-4bc6789d01a08d95", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"schema_or_data": 15, "ui_or_frontend": 145}}, "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_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#32\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 32\nGraph consistency label: supported_by_high_confidence_link\nNodes: 48\nEdges: 89\nNode types: {'pr_file': 32, 'commit': 4, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 32, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 5, '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': 29, 'claimed_resolved_unverified': 4, 'schema_or_data': 3, 'human_reported_issue_then_fix_attempt': 2, 'security_or_secrets': 2, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-a23cd9106c059c54", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 452759, "scanner": "foundry_dataset", "fingerprint": "4c76f607cd67a1210408a3d56cfe436426a3d527566164413590986fdc8abaa7", "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, "schema_or_data": 2, "ui_or_frontend": 6, "deployment_env_gap": 1, "security_or_secrets": 2, "security_auth_secret": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 53, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 8, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 8, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 16, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 24, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 2, "pr_file": 8, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#31", "issue_number": "31", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-dbe49eb22b6054a6", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"schema_or_data": 10, "ui_or_frontend": 30}}, "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_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#31\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#31\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#31\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 31\nGraph consistency label: supported_by_high_confidence_link\nNodes: 24\nEdges: 53\nNode types: {'pr_file': 8, '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': 16, 'thread_touches_file': 8, 'issue_chain_touches_file': 8, 'comment_chain_links_commit': 5, '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': 6, 'claimed_resolved_unverified': 4, 'schema_or_data': 2, 'human_reported_issue_then_fix_attempt': 2, 'security_or_secrets': 2, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-0a562ae10bce32a3", "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": "SimonNg0225/ntk-platform", "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: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 452758, "scanner": "foundry_dataset", "fingerprint": "39f3f207176a3c121e5ddbd97365942d298862ce163aa51c9fb5d17e087e0e63", "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, "test_or_ci": 1, "ui_or_frontend": 1, "deployment_env_gap": 1, "data_schema_persistence": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 26, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_links_commit": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 15, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#25", "issue_number": "25", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-b488c5a0fa669904", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"test_or_ci": 5, "ui_or_frontend": 5}}, "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_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#25\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: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#25\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#25\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 25\nGraph consistency label: supported_by_high_confidence_link\nNodes: 15\nEdges: 26\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_links_commit': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 4, 'human_reported_issue_then_fix_attempt': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'data_schema_persistence': 1, 'deployment_env_gap': 1, 'ui_or_frontend': 1, 'test_or_ci': 1, 'bug_fix': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\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/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-0aedca2551136c5e", "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": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441644, "scanner": "foundry_dataset", "fingerprint": "3d89edec61c39be103bc14bcadbef82a64c4df84ba98c2e535ed0e3cee6dd57a", "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": "SimonNg0225/ntk-platform#5", "human_labels": ["deployment_env_gap", "test_ci_gap"], "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": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-46ba74602e22828d", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 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": 2, "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": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform#5\nRepo: SimonNg0225/ntk-platform\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: {'test_ci_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b408400931d1c37d\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"test_ci_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/5\",\n    \"text\": \"GitHub feedback: test_ci_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/5\\nTitle: feat(notes/ai): Notion \u98a8\u7b46\u8a18\u5f37\u5316 + AI\u2192\u7b46\u8a18 + store undefined \u4fee\u6b63\\nBody:\\n## \u5167\u5bb9\\n\u7531 `feature/supabase-gemini` \u5408\u4f75\u5165 `main`\u3002\u4e00\u7cfb\u5217\u7b46\u8a18\uff08Notion \u98a8\uff09+ AI + store \u4fee\u6b63\uff0c\u5916\u52a0 iOS widget \u8173\u672c\u3002\\n\\n### \u57fa\u790e\\n- **refactor(store)**\uff1a`createCollection` add/update \u81ea\u52d5\u5277\u8d70 undefined key\uff08in-memory \u540c persist \u5f8c shape \u4e00\u81f4\uff0c\u5168 collection \u53d7\u60e0\uff09+ `store.test.ts`\u3002\\n- **feat(ai)**\uff1aAI \u52a9\u624b\u56de\u8986\u4e00\u9375\u300c\u52a0\u5165\u7b46\u8a18\u300d\u2014\u2014 \u63c0\u7b46\u8a18\u672c\u3001\u81ea\u52d5\u52a0 `#AI\u52a9\u624b` \u6a19\u7c64\u3001toast\u300c\u6aa2\u8996\u300d\u6377\u5f91\uff08`ToastContext` \u5411\u5f8c\u76f8\u5bb9\u52a0 action\uff09\u3002\\n\\n### Notion \u98a8\u7b46\u8a18\u5f37\u5316\\n- [x] **\u7b46\u8a18\u7bc4\u672c** \u2014 8 \u500b\u7bc4\u672c\uff08\u5eb7\u4e43\u723e/\u8ab2\u5802\u53cd\u601d/\u6bcf\u9031\u56de\u9867/\u6703\u8b70/\u5f85\u8fa6/SWOT/\u8b80\u66f8/\u5c08\u6848\uff09\uff0c\u982d\u90e8\u300c\u7bc4\u672c\u300d\u9078\u55ae\u4e00\u9375\u958b\u65b0\u7b46\u8a18\u3002\\n- [x] **\u96d9\u5411\u9023\u7d50 `[[\u7b46\u8a18]]`** \u2014 \u9810\u89bd\u53ef\u9ede\u9023\u7d50\u3001\u5e95\u90e8\u300c\u9023\u7d50\u5230 / \u88ab\u9023\u7d50\u300d\u9762\u677f\uff1b\u64b3\u9023\u7d50\u89e3\u6790\u73fe\u6709\u6216\u5efa\u7acb\u65b0\u7b46\u8a18\u3002\\n- [x] **`/` \u659c\u7dda\u6307\u4ee4** \u2014 \u7de8\u8f2f\u5668\u6253 `/` \u63d2\u5165\u6a19\u984c/\u5f85\u8fa6/\u5f15\u8a00/\u5206\u9694\u7dda/\u8868\u683c/\u7a0b\u5f0f\u78bc/\u65e5\u671f/\u9023\u7d50/\u6a19\u7c64\uff0c\u9375\u76e4\u53ef\u9078\u3002\\n- [x] **\u5132\u5b58\u7be9\u9078 + \u770b\u677f\u8996\u5716** \u2014 \u628a\u95dc\u9375\u5b57\uff0b\u6a19\u7c64\u5b58\u505a\u300c\u667a\u80fd\u6aa2\u8996\u300d\u5074\u6b04\u4e00\u64b3\u5373\u5957\uff1b\u770b\u677f\u6309\u5377\u518a\u5206\u6b04\u3002\\n- [x] **AI \u00d7 \u7b46\u8a18** \u2014 \u5c0d\u7576\u524d\u7b46\u8a18\uff1a\u6458\u8981 / \u5217\u91cd\u9ede / \u5efa\u8b70\u6a19\u7c64 / \u6f64\u98fe\uff0c\u7d50\u679c\u53ef\u8907\u88fd\u6216\u5957\u7528\u3002\\n- [x] **iOS Scriptable widget** \u2014 `scripts/scriptable/ntk-widget.js`\uff1a\u7531 Supabase \u986f\u793a\u9023\u7e8c\u65e5\u8a8c\u5929\u6578 / \u672a\u5b8c\u6210\u5f85\u8fa6 / \u4e0b\u500b\u5012\u6578\u3002\\n\\n### \u9a57\u8b49\\n- `npx tsc --noEmit` \u4e7e\u6de8\uff1b`npx vitest run` **3526 \u6e2c\u8a66\u5168\u7da0**\uff08\u591a\u6b21\u7a69\u5b9a\uff09\u3002\\n- \u53e6\uff1a`testTimeout` \u63d0\u9ad8\u81f3 20s\uff08`preloadAllFeatures` cold import \u5076\u723e\u8d85\u6642\uff09\u3002\\n\\n\ud83e\udd16 Generated with [Claude Code](https://c\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7f84ee352622f555\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/5#issuecomment-4604344176\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/5#issuecomment-4604344176\\nTitle: \\nBody:\\n[vc]: #DBhxNMALqvUybS5qYNwzvaWhBOstLms2Ufpbh9avn+s=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJudGstcGxhdGZvcm0iLCJwcm9qZWN0SWQiOiJwcmpfTlBXS29McEdMUjVERVVENk44Q\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-0cd9ed26ae67a50e", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441643, "scanner": "foundry_dataset", "fingerprint": "3fb3e5a199dc73c62fca8da0bcd06eec10301116f78372ed9008587d8a1fd7e4", "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": "SimonNg0225/ntk-platform#4", "human_labels": ["agent_instruction_gap", "deployment_env_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": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-d2e36a4fa6ea401d", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 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": 2, "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": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#4\nRepo: SimonNg0225/ntk-platform\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: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-94e1bf9d05c84478\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/4\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/4\\nTitle: Claude/personal platform framework e26a j\\nBody:\\n\"\n  },\n  {\n    \"id\": \"github-feedback-comment-87b45f2052a5e788\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/4#issuecomment-4585578893\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/4#issuecomment-4585578893\\nTitle: \\nBody:\\n[vc]: #nzHKC+ce26N5QlDqeW8EU0cVtpl6HIU3iinJtt/eleA=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJudGstcGxhdGZvcm0iLCJwcm9qZWN0SWQiOiJwcmpfTlBXS29McEdMUjVERVVENk44Qm1qcVJNaVVaSSIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiJudGstcGxhdGZvcm0tZ2l0LWNsYXVkZS1wZXJzLWYzYjFkMC1zaW1vbi1uZ3MtcHJvamVjdHMtNjdkNGQ2MTAudmVyY2VsLmFwcCJ9LCJpbnNwZWN0b3JVcmwiOiJodHRwczovL3ZlcmNlbC5jb20vc2ltb24tbmdzLXByb2plY3RzLTY3ZDRkNjEwL250ay1wbGF0Zm9ybS9IUWEzSlB6ZW5RN3NoaVFDRW54QjJMOFIxSDVnIiwicHJldmlld1VybCI6Im50ay1wbGF0Zm9ybS1naXQtY2xhdWRlLXBlcnMtZjNiMWQwLXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IkRFUExPWUVEIn1dfQ==\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------ | :------ |\\n| [ntk-platform](https://vercel.com/simon-ngs-projects-67d4d610/ntk-platfo\"\n  }\n]\nChanged files:\n[]\nLinked chain ids:\n[\"evidence-chain-comment_to_commit-e61df7ca6d461da1\", \"evidence-chain-comment_to_commit-b4a88219fd44e08c\"]\nSource grap\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-f4fba2bca3b417f1", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441642, "scanner": "foundry_dataset", "fingerprint": "92932d680e6a3f5633ab2047d02fa97f6d32801a69ee298748cffc403a4b2137", "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": "SimonNg0225/ntk-platform#37", "human_labels": ["api_or_backend", "deployment_env_gap", "mock_placeholder", "ui_or_frontend"], "issue_number": "37", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.742, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-9f764fcd88e30f95", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "ui_or_frontend": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#37\nOutcome: self_attested_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: SimonNg0225/ntk-platform#37\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'mock_placeholder': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'api_or_backend': 1, 'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-c53bc25198b11ce5\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/37\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/37\\nTitle: diag(resources): \u7e2e\u5716\u5931\u6557\u52a0 console.warn \u6392\u67e5\\nBody:\\n\u7e2e\u5716\u4e00\u76f4 null,\u4f46\u524d\u7aef try/catch \u541e\u5497\u932f\u8aa4,console \u898b\u5514\u5230\u771f\u5147\u3002\u52a0 `console.warn`:\\n- `thumb.ts`:`generateThumb` catch \u2192 log pdfjs/canvas \u5be6\u969b\u932f\u8aa4\\n- `api.ts`:\u7e2e\u5716\u4e0a\u8f09\u5931\u6557 / \u5187\u751f\u6210\u5230 \u2192 log\\n\\n\u5514\u6539\u884c\u70ba(\u5931\u6557\u4ecd\u51fa placeholder),\u53ea\u65b9\u4fbf\u6392\u67e5\u3002`tsc` 0\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7b224cfbcae548bb\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/37#issuecomment-4691504996\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/37#issuecomment-4691504996\\nTitle: \\nBody:\\n[vc]: #SAhkneRlX4N3lpSihWtyN9+yrwB/BXvvr25JPnjlnDk=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC9DY3ZoeWExOXBvWndoQ2diTGlFc25MN3BwdVU5IiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtcmVtb3RlLWMtODdlMzQ3LXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IlBFTkRJTkciLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiZXppdGVhY2gtZ2l0LWNsYXVkZS1yZW1vdGUtYy04N2UzNDctc2ltb24tbmdzLXByb2plY3RzLTY3ZDRkNjEwLnZlcmNlbC5hcHAifX1dfQ==\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.lin\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-55fb55cf6219301d", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441641, "scanner": "foundry_dataset", "fingerprint": "c711bf5acc6adc96b39a19922328b43e71147cc2203d7ae338f3ade0ca70f470", "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": "SimonNg0225/ntk-platform#3", "human_labels": ["deployment_env_gap", "ui_workflow_gap"], "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": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-4215b387220b3efb", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 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": 2, "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": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform#3\nRepo: SimonNg0225/ntk-platform\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, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d325fcc3f3f66ef5\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"ui_workflow_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/3\",\n    \"text\": \"GitHub feedback: ui_workflow_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/3\\nTitle: UI \u5927\u512a\u5316 v0.4\uff1a\u7d71\u4e00\u5143\u4ef6\u5eab + 23 \u500b\u529f\u80fd\u5be6\u7528\u6027\u5347\u7d1a\\nBody:\\n## \u6982\u8981\\n\u5168\u7ad9 UI \u5927\u512a\u5316\uff1a\u5efa\u7acb\u7d71\u4e00 UI \u5143\u4ef6\u5eab\uff0c23 \u500b\u529f\u80fd\u5168\u90e8\u6539\u7528\uff0c\u4e26\u53c3\u8003 Notion / Anki / Google Classroom / Todoist / Streaks \u7b49\u5e73\u53f0\u52a0\u5165\u5be6\u7528\u529f\u80fd\u3002\\n\\n## \u91cd\u9ede\\n- **\u7d71\u4e00 UI \u5143\u4ef6\u5eab**\uff08`src/ui/`\uff09\uff1aButton / Input / Select / Card / Badge / Modal / Tabs / Pills / StatCard / ProgressBar / EmptyState \u7b49\uff0c\u8996\u89ba\u8a9e\u8a00\u4e00\u81f4\u3002\\n- **23 \u500b\u529f\u80fd\u5168\u90e8\u91cd\u69cb** + \u5be6\u7528\u6027\u5347\u7d1a\uff1a\\n  - \u77e5\u8b58\u5361\uff08Anki \u5f0f\u7e3d\u89bd/\u9032\u5ea6/\u9023\u7e8c\u8f38\u5165/\u6539\u540d\uff09\\n  - \u7b46\u8a18\uff08Notion \u5f0f #\u6a19\u7c64/\u641c\u5c0b/inline \u7de8\u8f2f\uff09\\n  - \u7fd2\u6163\uff08Streaks \u5f0f 14 \u65e5\u683c/\u6700\u9577 streak\uff09\\n  - \u6210\u7e3e\uff08\u7b49\u7d1a/\u5f31\u9805\u7d05\u6a19/\u5168\u73ed\u5e73\u5747\uff09\\n  - \u984c\u5eab\uff08\u7d44\u5377 + \u8a66\u5377\u9810\u89bd\u5217\u5370/Modal/Pills\uff09\\n  - \u8ab2\u7a0b\u9032\u5ea6\uff08accordion/\u7bc4\u7587\u9032\u5ea6\uff09\\n  - \u5b78\u7fd2&\u5de5\u4f5c\u5100\u8868\u677f\uff08\u554f\u5019\u8a9e/\u53ef\u64b3\u7d71\u8a08\u5361/\u4eca\u65e5\u4efb\u52d9 checklist/\u4e0b\u4e00\u5802\u9ad8\u4eae/\u5373\u5834\u5254\u5f85\u8fa6\uff09\\n  - \u884c\u4e8b\u66c6\uff08\u985e\u578b\u984f\u8272/Modal\uff09\u3001\u5099\u8ab2\uff08\u8907\u88fd\u6559\u6848\uff09\u3001\u51fa\u5e2d\uff08\u4e00\u9375\u5168\u51fa\u5e2d\uff09\u3001\u5bb6\u9577\u6e9d\u901a\uff08channel \u5716\u793a/\u8ddf\u9032\u5207\u63db\uff09\u7b49\\n\\n## \u9a57\u8b49\\n- `tsc --noEmit` \u2705 \u901a\u904e\\n- `npm run build` \u2705 \u901a\u904e\\n\\nhttps://claude.ai/code/session_013knpjeFkgW6SJ9VPPhaaMs\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_013knpjeFkgW6SJ9VPPhaaMs)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-a7597b5ef3791015\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/3#issuecomment-4583403851\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/3#issuecomment-4583403851\\nTitle: \\nBody:\\n[vc]: #/HfNzxCiRcekWIBz+f8L+bGfooj59ngiz3iX5JOGmJY=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJudGstcGxhdGZvcm0iLCJwcm9qZWN0SWQiOiJwcmpfTlBXS29McEdMUjVERVVENk44Qm1qcVJNaVVaSSIsInJvb3REaXJlY3RvcnkiOm51bGwsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9zaW1vbi1uZ3MtcHJvamVjdHMtNjdkNGQ2MTAvbnRrLXBsYXRmb3JtLzI4M3U3dU0yZFptbkhkdVlOc3hYd0tpU0FiQXAiLCJwcmV2aWV3\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-8982c9d641670cf9", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441640, "scanner": "foundry_dataset", "fingerprint": "60d9bc209a7fee79d8f91f548a164421e488a685b7341565408cdb573c8416aa", "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": "SimonNg0225/ntk-platform#28", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "ui_or_frontend"], "issue_number": "28", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.92, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-8a95d16c4414de65", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 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": 2, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#28\nOutcome: self_attested_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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#28\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-af359d1bbba26f5f\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/28\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/28\\nTitle: polish(slides): sumi \u5e95\u677f\u91cd\u65b0\u8a2d\u8a08\u70ba\u300c\u9060\u5c71\u7559\u767d\u300d\\nBody:\\n## \u5167\u5bb9\\nsumi \u5e95\u677f\u7531\u539f\u672c\u300c\u6f51\u58a8\u300d\u91cd\u65b0\u8a2d\u8a08\u70ba**\u9060\u5c71\u7559\u767d**\uff08\u7528\u6236 feedback\uff1a\u539f\u7248\u6709\u9ede\u5047/\u5514\u7f8e\u89c0\uff09\u3002\\n\\n- \u65b0\u589e `gInkMountain`\uff1a\u5ba3\u7d19\u7559\u767d + \u5e95\u90e8\u4e09\u5c64\u9060\u5c71\u67d4\u58a8\uff08bezier soft wash\uff09+ \u4e00\u9053\u6de1\u58a8\u6a6b\u6383 + \u6731\u7802\u5370\u3002\\n- \u65b0\u589e `brushStroke`\uff08tapered \u6bdb\u7b46 helper\uff0c\u6cbf bezier \u92ea\u5713 w0\u2192w1\uff09\u3002\\n- sumi \u7531 `gInkWash` \u63db\u505a `gInkMountain`\uff1b**inkwell \u4fdd\u7559 `gInkWash` \u4e0d\u8b8a**\u3002\\n- \u6bd4\u539f\u672c\u6f51\u58a8\u66f4\u96c5\u7dfb\u3001\u7559\u767d\u8db3\u3001\u5514\u6436\u6a19\u984c\uff08\u5571\u653e\u6bdb\u7b46\u5b57\u6a19\u984c\uff09\u3002\\n\\n\u9a57\u8b49\uff1a`tsc` \u7da0\uff1bsandbox render \u81ea\u9a57\uff08\u5df2\u4ea4\u5716\u78ba\u8a8d\uff09\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-d4406fb93721e99a\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/28#issuecomment-4686558855\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/28#issuecomment-4686558855\\nTitle: \\nBody:\\n[vc]: #2E3J2tyy66cbJe3ziLJdkKjdeyTA5HfZaifRpGH2Jso=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC85V3ZBUHJtQU5KTDJtR1h2VEM2OEhtbWhXc21oIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtc3VtaS1iYXNlLXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YXR1cyI6IlBFTkRJTkciLCJsaXZlRmVlZGJhY2siOnsicmVzb2x2ZWQiOjAsInVucmVzb2x2ZWQiOjAsInRvdGFsIjowLCJsaW5rIjoiZXppdGVhY2gtZ2l0LWNsYXVkZS1zdW1pLWJhc2Utc2ltb24tbmdzLXByb2plY3RzLTY3ZDRkNjEwLnZlcmNlbC\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-7c2097b060cd90a7", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441639, "scanner": "foundry_dataset", "fingerprint": "72b768d98003b08ba51e9568b425fa79be955966b2bd5c04bea552a93e5db88f", "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": "SimonNg0225/ntk-platform#26", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "docs_or_claims"], "issue_number": "26", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.825, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-dd8d0b885c1ca80e", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"docs_or_claims": 1}, "linked_commit_count": 2, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#26\nOutcome: self_attested_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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#26\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 1\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'docs_or_claims': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-b636337d6854e568\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/26\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/26\\nTitle: docs: \u52a0 CLAUDE.md \u5de5\u4f5c\u5b88\u5247 + \u5c08\u6848\u901f\u89bd\\nBody:\\n## \u5167\u5bb9\\n\u65b0\u589e `CLAUDE.md` \u2014\u2014 \u6bcf\u500b session \u81ea\u52d5\u8b80\u5605\u5de5\u4f5c\u5b88\u5247,\u4ee4\u4ee5\u5f8c\u5514\u4f7f\u6b21\u6b21\u55ba\u5c0d\u8a71\u958b\u982d\u8cbc:\\n- **\u8a9e\u8a00\u30fb\u98a8\u683c**:\u7e41\u4e2d(\u5ee3\u6771\u8a71)\u3001\u7cbe\u7c21\u76f4\u63a5\u3001\u505a\u5f97\u5230\u5c31\u505a\u3002\\n- **\u6173 context / \u984d\u5ea6**:\u5514\u8b80\u6652\u5927\u6a94\u3001\u5514 dump \u5927 output\u3001\u9069\u5ea6\u7528 subagent\u3001\u63d0 `/clear`\u3002\\n- **\u6539\u52d5\u30fb\u9a57\u8b49\u7d00\u5f8b**:\u6539\u5b8c\u5be6\u969b\u8dd1 tsc/build/\u6e2c\u8a66\u5148\u8b1b\u300c\u505a\u597d\u300d;\u9a57\u8b49\u5514\u5230\u5605\u6a19\u300c\u672a\u6838\u5be6\u300d\u3002\\n- **Git / PR \u6d41\u7a0b**:branch \u958b\u5de5\u3001\u5514\u76f4\u63a5\u63a8 main\u3001\u5148\u958b PR/merge\u3002\\n- **\u5c08\u6848\u901f\u89bd**:\u7c21\u5831\u5f15\u64ce\u7d50\u69cb + \u9435\u5f8b(\u542b\u300c`<a:ext>` \u4e0d\u53ef\u70ba\u8ca0\u300d)\u3002\\n\\n\u7d14\u6587\u6a94,\u7121 code \u6539\u52d5\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-74e019cc4be91ebc\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/26#issuecomment-4680270050\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/26#issuecomment-4680270050\\nTitle: \\nBody:\\n[vc]: #pNq3efsLbWO/kaigK6jHQMa5R2BN41MRmM2kaBsZtq4=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC9HY3dKb3A4S2RKNlJHaFZUVm1lVUpaSzlIc0VIIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtYWRkLWNsYXVkZS1tZC1zaW1vbi1uZ3MtcHJvamVjdHMtNjdkNGQ2MTAudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiOiJQRU5ESU5HIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtYWRkLWNsYXVkZS1tZC1zaW1vbi1uZ3MtcHJvamVjdHMtNjdkNGQ2MTAudmV\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-a1aca3c21bb5d18b", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441638, "scanner": "foundry_dataset", "fingerprint": "f48683a0f7ada1bae3e17d9ba1b3e56a31f73b9249bd332a31f4078636c0a1a3", "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": "SimonNg0225/ntk-platform#24", "human_labels": ["agent_instruction_gap", "deployment_env_gap", "test_or_ci", "ui_or_frontend"], "issue_number": "24", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.82, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "gold_candidate", "confidence_tier": "high_confidence", "source_chain_id": "evidence-chain-issue_chain-0857598b73873785", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 10, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 1, "ui_or_frontend": 9}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 2, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_high_confidence", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 1, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#24\nOutcome: self_attested_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_high_confidence, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: SimonNg0225/ntk-platform#24\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 10\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'test_or_ci': 1, 'ui_or_frontend': 9}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-c4c5bf46b94149e2\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/24\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/24\\nTitle: feat(slides): \u6f38\u5c64\u5168\u9762\u92ea\u958b\uff08neon/cosmos \u771f\u767c\u5149 \u00b7 sumi \u771f\u58a8\u97fb \u00b7 34 \u5957\u5c01\u9762\u8cea\u611f\uff09\\nBody:\\n## \u5167\u5bb9\\n\u63a5\u7e8c #23 \u7684\u6f38\u5c64\u6ce8\u5165\u5f15\u64ce\uff0c\u92ea\u53bb\u66f4\u591a pack \u540c\u5168\u90e8\u5c01\u9762\u3002\\n\\n### \u5f15\u64ce\\n- `GradStop` \u52a0 `alpha`\uff08\u767c\u5149\uff0f\u6de1\u51fa\u7528\uff09\uff1b`gradXml` \u7684 `srgbClr` \u6539\u6210\u53ef\u5bb9 `<a:alpha>` \u5b50\u5143\u7d20\u3002\\n\\n### \u8cea\u611f\u5347\u7d1a\\n- **neon** \u2014 \u74b0\uff0f\u7bc0\u9ede\u5f8c\u52a0**\u771f\u653e\u5c04\u5149\u6688**\uff08\u4e2d\u5fc3\u534a\u900f \u2192 \u908a\u7de3\u5168\u900f\uff09\uff0c\u53d6\u4ee3 outer-shadow \u626e\u5149\u3002\\n- **cosmos** \u2014 \u661f\u661f**\u771f\u653e\u5c04\u5149\u6688**\u3002\\n- **sumi** \u2014 \u7b46\u89f8**\u771f\u7dda\u6027\u58a8\u97fb**\uff08\u7126\u58a8 \u2192 \u6de1\u58a8 \u2192 \u98db\u767d\uff09\uff0c\u53d6\u4ee3\u758a\u7070\u584a\u507d\u6c34\u58a8\u3002\\n- **\u5168 34 \u5957\u5c01\u9762** \u2014 \u5404\u52a0\u514b\u5236\u6f38\u5c64\uff08\u80cc\u666f\u6df1\u5ea6\uff0fhero block\uff0f\u4e3b\u984c\u8272\u5e36\uff09\uff0c**\u53ea\u6539 `cover()`**\uff0c\u5514\u90c1\u7248\u9762\u3002\\n\\n### \u9a57\u8b49\\n- `tsc` \u2705 **3875 \u6e2c\u8a66\u5168\u7da0** \u2705\\n- \u771f\u5f15\u64ce\u6838\u5be6\uff1a**34/34** slide XML \u90fd\u6709\u771f `<a:gradFill>`\u3001**\u96f6\u6b98\u7559 sentinel**\u3001**\u7121\u4e00 throw**\u3001\u6a94\u6848\u4ecd\u7d30\uff08~10KB\uff09\u3002\\n- \u26a0\ufe0f \u8996\u89ba / PowerPoint\u300c\u4fee\u5fa9\u300d\u76f8\u5bb9\u6027\u9700\u4f60\u958b\u6a94\uff08\u5df2\u53e6\u767c 34 \u5957 zip\uff09\u78ba\u8a8d\u3002\\n\\n### \u6a5f\u5236\uff08\u540c #23\uff09\\npack \u7528 `gradLinear/gradRadial` \u651e FE-sentinel \u7d14\u8272\u7576 fill\uff1b\u51fa\u6a94\u5f8c PizZip \u968e\u6bb5**\u7cbe\u78ba\u5339\u914d**\u63db\u6210 OOXML `<a:gradFill>`\uff08\u8fd1\u767d\u6f38\u5c64 stop \u5982 FEFEFF \u55ba gradFill \u5167\uff0c\u5514\u53d7\u5f71\u97ff\uff09\u3002\u4fdd\u6301\u5411\u91cf\u3001\u53ef\u7de8\u8f2f\u3001\u7d30\u6a94\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-5a0de5eccaecd01e\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/24#issuecomment-4677655595\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/24#issuecomment-4677655595\\nTitle: \\nBody:\\n[vc]: #RN9BPzz228iErODjWXlnXkmw4DMG9JoIMuGT+Mv0Tng=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-a8c0059ddb36c6c5", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "gold_candidate"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441637, "scanner": "foundry_dataset", "fingerprint": "40a61b8f53fddfd29287a3da6b6ceec846850451f856b4dd76f165503a11ad65", "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": "SimonNg0225/ntk-platform#19", "human_labels": ["agent_instruction_gap", "deployment_env_gap"], "issue_number": "19", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.712, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-268370fa820ac26b", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#19\nOutcome: self_attested_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: SimonNg0225/ntk-platform#19\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f3e486d5939cfc79\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/19\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/19\\nTitle: feat(slides): \u751f\u6210\u7aef\u52a0\u300c\u9010\u7248\u8a2d\u8a08\u300d\u6307\u5f15\uff08\u6bcf\u7248\u5404\u6709\u7279\u8272\uff0f\u66f4\u591a\u5143\u7d20\uff09\\nBody:\\n## \u5167\u5bb9\\n\u56de\u61c9\u300cAI \u751f\u6210\u6642\u70ba\u6bcf\u9801\u7540\u8a2d\u8a08\u6307\u5f15\uff0c\u4ee4\u6bcf\u9801\u5404\u6709\u7279\u8272\uff0f\u66f4\u591a\u5143\u7d20\u300d\u3002\\n\\n`buildSlideSystem` base \u898f\u5247\u52a0\u4e00\u689d**\u9010\u7248\u8a2d\u8a08\u6307\u4ee4**\uff1a\u53eb AI \u7576\u6bcf\u4e00\u7248\u90fd\u4fc2\u7368\u7acb\u8a2d\u8a08\u569f\u8ad7 \u2014\u2014 \u5148\u5b9a\u300c\u8a2d\u8a08\u91cd\u9ede\u300d\uff0c\u518d\u7528\u6700\u5571\u6b04\u4f4d\u5be6\u73fe\uff1a\\n- \u5f37\u8abf\u6578\u5b57 \u2192 `stats`\uff1b\u6b63\u53cd\u7570\u540c \u2192 `compare`\uff1b\u6d41\u7a0b\u6642\u5e8f \u2192 `steps`\uff1b\u91d1\u53e5\u5b9a\u7fa9 \u2192 `quote`\uff1b\u4e26\u5217\u5206\u985e \u2192 `cards`\\n- \u60f3\u7a81\u51fa\u4e00\u53e5 \u2192 `takeaway`\uff1b\u96d9\u8a9e\u5c0d\u7167 \u2192 `subtitle`\uff1b\u5177\u9ad4\u5834\u666f \u2192 `imageQuery`\\n\\n\u52d9\u6c42**\u6bcf\u7248\u81f3\u5c11\u4e00\u500b\u7a81\u51fa\u5143\u7d20**\uff0c\u5514\u597d\u6210\u7248\u6de8\u4fc2 5 \u500b bullet\uff1b\u4f46\u5168\u90e8\u5571\u5148\u7528\u3001\u5514\u593e\u786c\u3002\\n\\n### \u9ede\u89e3\u6709\u6548\\n\u5f15\u64ce\u5df2\u6709 **48 \u500b\u62db\u724c\u7248\u5f0f + \u9010\u7248\u6bcd\u984c\uff08deco\uff09+ \u7248\u9762\u7bc0\u594f**\uff1bAI \u4e00\u65e6\u70ba\u6bcf\u7248\u63c0\u5571\u7248\u5f0f\u540c\u52a0 rich \u5143\u7d20\uff0c\u5462\u5572\u8a2d\u8a08\u5c64\u5c31\u6703\u628a\u6bcf\u9801\u6e32\u67d3\u6210\u5404\u6709\u7279\u8272 \u2014\u2014 \u751f\u6210\u2192\u6e32\u67d3\u5605 loop \u9589\u5408\u3002\\n\\n### \u9a57\u8b49\\n- `tsc` \u2705\u3000**3870 \u6e2c\u8a66\u5168\u7da0**\uff08\u542b\u65b0\u589e\u300c\u9010\u7248\u8a2d\u8a08\u300d\u65b7\u8a00\uff09\u2705\\n- Prompt-only\uff0c\u53ea\u6539 `slidePrompts.ts` + test\uff0c\u96f6\u5f15\u64ce\u98a8\u96aa\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-f5e52819446705ef\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/19#issuecomment-4676797439\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/19#issuecomment-4676797439\\nTitle: \\nBody:\\n[vc]: #GeMe1sy0gxMgStUunt/gve3wl9lDhuNZLMfVWjgWArU=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL3NpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC9leml0ZWFjaC83OXBhc2d0YUFLMTY5eGg0d1F6Y1RZcVF0U0NKIiwicHJldmlld1VybCI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtcGVyLXNsaWQtZGE5ZTFjLXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIiwibmV4dENvbW1pdFN0YX\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-9bf056c67397a3d8", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441636, "scanner": "foundry_dataset", "fingerprint": "211887dba2c335cc64e8a5909b2553f76cbc0f1f1ba373c8e04636ce7afe6d21", "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": "SimonNg0225/ntk-platform#17", "human_labels": ["deployment_env_gap", "mock_placeholder"], "issue_number": "17", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.795, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-99d5e0f8a7e507f1", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 3, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#17\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: SimonNg0225/ntk-platform#17\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 3\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'mock_placeholder': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6518e3486d1c0516\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/17\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/17\\nTitle: feat(slides): \u7b2c\u4e09\u62db\u724c\u7248\u5f0f + pack-aware \u9032\u968e + \u63c0 pack \u9810\u89bd\u7e2e\u5716\\nBody:\\n## \u5167\u5bb9\\n\u4e00\u6b21\u904e\u63a8\u4e09\u689d\u65b9\u5411\uff0c\u6df1\u5316\u6a21\u677f\u5dee\u7570\u5316\uff08\u63a5\u7e8c #13/#15/#16\uff09\u3002\\n\\n### 1. \u7b2c\u4e09\u62db\u724c\u7d50\u69cb\u7248\u5f0f\uff08\u6bcf pack 3 \u500b\u62db\u724c\uff0c\u5171 48 override\uff09\\n\u589e\u7d50\u69cb\u8986\u84cb\u7387\uff0c\u4ee4\u4e00\u4efd deck \u5167\u66f4\u591a\u7248\u90fd\u5e36 pack \u6027\u683c\uff1a\\ninkwell \u5377\u8ef8(steps) \u00b7 celadon \u5713\u5f27\u5c0d\u7167(compare) \u00b7 dawn \u7a4d\u6728\u6578\u5b57(stats) \u00b7 nocturne \u71d9\u91d1\u6642\u9593\u7dda(steps) \u00b7 grid \u5ea7\u6a19\u6d41\u7a0b(steps) \u00b7 seminar \u6b63\u53cd\u8faf(compare) \u00b7 chalk \u91d8\u5361(cards) \u00b7 press \u5c08\u6b04\u5361(cards) \u00b7 neon HUD\u5c0d\u6c7a(compare) \u00b7 confetti \u8df3\u683c\u8def\u5f91(steps) \u00b7 pastel \u67d4\u548c\u5927\u6578\u5b57(stats) \u00b7 blueprint \u898f\u683c\u5c0d\u7167(compare) \u00b7 ivy \u5b78\u9662\u5e74\u8868(steps) \u00b7 redgrid \u96dc\u8a8c\u5c0d\u958b(compare) \u00b7 transit \u5c0d\u9762\u6708\u53f0(compare) \u00b7 ocean \u5206\u5c64\u751f\u614b\u5361(cards)\\n\\n### 2. pack-aware \u751f\u6210\u9032\u968e\uff08\u5b57\u6578\u5bc6\u5ea6\uff0f\u7ae0\u7bc0\u7bc0\u594f\uff0f\u96d9\u8a9e\u6bd4\u4f8b\uff09\\n`buildSlideSystem` \u6309 pack \u518d\u8abf\u5167\u5bb9\uff1a\\n- **dawn**\uff1a\u6bcf\u7248 2-3 \u77ed\u9ede\u3001\u6dfa\u767d\u3001\u591a\u5927\u5716\u3001\u5514\u63d2\u7ae0\u7bc0\u3001\u5168\u4e2d\u6587\uff08\u521d\u5c0f\uff09\\n- **press / grid / blueprint**\uff1a\u8f03\u5bc6\uff084-6 \u9ede\uff09\u3001\u7528\u7ae0\u7bc0\u7d44\u7e54\\n- **ivy / seminar / transit / blueprint**\uff1a\u5927\u90e8\u5206\u7248\u52a0\u82f1\u6587\u5c0d\u7167\u526f\u984c\uff08\u96d9\u8a9e\u8ab2\u5802\uff09\\n\\n### 3. \u63c0 pack \u5373\u6642\u9810\u89bd\u7e2e\u5716\\n\u65b0\u589e `<PackPreview>`\uff08token-driven inline-SVG **\u4ee3\u8868\u6027** mock \u5c01\u9762\uff0c\u975e\u771f\u5f15\u64ce render\uff09\uff0c`SLIDE_PACKS` \u52a0 `bg/ink/accent/dark/displayFont` \u4f9b\u7e2e\u5716\uff1b\u63a5\u5165\u63c0 pack UI\uff0c\u9078\u64c7\u884c\u70ba\u4e0d\u8b8a\u3002\\n\\n### \u9a57\u8b49\\n- `tsc --noEmit` \u2705\u3000`npm run build` \u2705\u3000**3870 \u6e2c\u8a66\u5168\u7da0**\uff08+ \u65b0\u589e pack-aware \u5bc6\u5ea6/\u96d9\u8a9e\u55ae\u5143\u6e2c\u8a66\uff09\u2705\\n- 16 pack \u771f\u5f15\u64ce \"\n  },\n  {\n    \"id\": \"github-feedback-comment-a34419de7f5ff8fc\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/17#issuecomment-4676630951\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/17#issuecomment-4676630951\\nTitle: \\nBody:\\n[vc]: #utlodjWZ8tTeajlabnHwR/z3NdJJt4QnPqRJ0kMdA1M=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-3eed8eb7b694fc5f", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441635, "scanner": "foundry_dataset", "fingerprint": "949e55a76ec3350fc71971be5d03a5d9347bddd4eb5e512e6504be9120c6c510", "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": "SimonNg0225/ntk-platform#10", "human_labels": ["agent_instruction_gap", "deployment_env_gap"], "issue_number": "10", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "self_attested_unverified", "source_backed": true, "max_confidence": 0.587, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-93682cb86e0c6d81", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 0, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {}, "linked_commit_count": 1, "helicopter_view_count": 4, "source_artifact_count": 2, "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": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#10\nOutcome: self_attested_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: SimonNg0225/ntk-platform#10\nRepo: SimonNg0225/ntk-platform\nThread label: thread_has_human_issue_and_fix_context\nOutcome: self_attested_unverified\nComment count: 2\nLinked commit count: 1\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 0\nLabels: {'agent_instruction_gap': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-4b1b4047e8ef8c1c\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"agent_instruction_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/10\",\n    \"text\": \"GitHub feedback: agent_instruction_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/10\\nTitle: \u529f\u80fd i18n \u00d7 2 \u6279 + PKCE \u767b\u5165\u4fee\u5fa9 + \u6559\u5b78\u7c21\u5831 4-phase\\nBody:\\n\u5df2\u95dc\u9589:\u6b64 branch \u7531\u820a `7daeb6f` \u5206\u51fa\uff0c\u8207 main \u5927\u5e45\u5206\u53c9\u4e26\u91cd\u8907\u5497 main \u5df2\u6709\u7684\u6559\u5b78\u7c21\u5831\u529f\u80fd\uff0829 \u500b\u885d\u7a81\uff09\uff0c\u4e0d\u5b9c\u6574\u9ad4\u5408\u4f75\u3002\u53ef\u4e7e\u6de8\u5408\u5165\u7684 PKCE \u4fee\u5fa9\u5df2\u62bd\u51fa\u4e26\u7d93 PR #11 \u5408\u5165 main\u3002\u672c branch \u7684 slides 4-phase + 28-feature i18n \u5168\u90e8\u4fdd\u7559\u65bc git \u6b77\u53f2\uff0c\u65e5\u5f8c\u5982\u9700\u53ef\u7531 `claude/remote-control-fiz0i` \u53d6\u56de\u3002\\n\\nhttps://claude.ai/code/session_01S7siZDE12uJhCgbDkd9bNK\"\n  },\n  {\n    \"id\": \"github-feedback-comment-d2d775b69e50f4eb\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/10#issuecomment-4675856322\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/10#issuecomment-4675856322\\nTitle: \\nBody:\\n[vc]: #dSoRQ+pdA8yhfTlphdpCKEE7aBu/rcn5rmOD5Clm5j4=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJleml0ZWFjaCIsInByb2plY3RJZCI6InByal9OUFdLb0xwR0xSNURFVUQ2TjhCbWpxUk1pVVpJIiwibGl2ZUZlZWRiYWNrIjp7InJlc29sdmVkIjowLCJ1bnJlc29sdmVkIjowLCJ0b3RhbCI6MCwibGluayI6ImV6aXRlYWNoLWdpdC1jbGF1ZGUtcmVtb3RlLWMtODdlMzQ3LXNpbW9uLW5ncy1wcm9qZWN0cy02N2Q0ZDYxMC52ZXJjZWwuYXBwIn0sImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9zaW1vbi1uZ3MtcHJvamVjdHMtNjdkNGQ2MTAvZXppdGVhY2gvRkdzaDFaUzRkdk5Gb2NrSEFOaHNpcVBVRkx0OCIsInByZXZpZXdVcmwiOiJleml0ZWFjaC1naXQtY2xhdWRlLXJlbW90ZS1jLTg3ZTM0Ny1zaW1vbi1uZ3MtcHJvamVjdHMtNjdkNGQ2MTAudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiOiJERVBMT1lFRCJ9XX0=\\nThe latest updates on your projects. Learn more about [Vercel for GitHub](https://vercel.link/github-learn-more).\\n\\n| Project | Deployment | Actions | Updated (UTC) |\\n| :--- | :----- | :------\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-9d08276743973378", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 441634, "scanner": "foundry_dataset", "fingerprint": "1fec3df465a79d8a9dbabb2f3797631d719c3fb0b3e84f2f9d474eb956daeee2", "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": "SimonNg0225/ntk-platform#1", "human_labels": ["deployment_env_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": "SimonNg0225/ntk-platform", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-d386e5a64802c797", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 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": 2, "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": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#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: SimonNg0225/ntk-platform#1\nRepo: SimonNg0225/ntk-platform\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: {'deployment_env_gap': 2}\nPolarities: {'bad': 2}\nChanged file labels: {}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-6e088ee5daa6b74c\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/1\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: SimonNg0225/ntk-platform\\nAuthor: SimonNg0225 (User)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/1\\nTitle: NTK Platform \u521d\u6b65\u6846\u67b6\uff1a\u96d9\u6a21\u5f0f\uff08\u5b78\u7fd2/\u5de5\u4f5c\uff09\u5207\u63db\u5e73\u53f0\\nBody:\\n## \u6982\u8981\\n\u5efa\u7acb NTK Platform \u5605\u521d\u6b65\u6846\u67b6 \u2014\u2014 \u4e00\u500b\u53ef\u4ee5\u96a8\u6642\u5207\u63db\u300c\ud83d\udcda \u5b78\u7fd2\u6a21\u5f0f\u300d\u540c\u300c\ud83d\udcbc \u5de5\u4f5c\u6a21\u5f0f\u300d\u5605\u500b\u4eba\u5e73\u53f0\uff0c\u76ee\u6a19\u4fc2\u63d0\u5347\u500b\u4eba\u77e5\u8b58\u589e\u9577\u540c\u5de5\u4f5c\u6548\u80fd\uff08\u70ba BAFS \u6559\u5e2b\u5ea6\u8eab\uff09\u3002\\n\\n## \u6280\u8853\u68e7\\nVite + React + TypeScript + Tailwind CSS\\n\\n## \u6838\u5fc3\\n- **\u96d9\u6a21\u5f0f\u5207\u63db**\uff1a\u4e00\u64b3\u5c31\u55ba\u5b78\u7fd2 / \u5de5\u4f5c\u4e4b\u9593\u5207\u63db\uff0c\u4e3b\u984c\u8272\uff08\u7da0 / \u85cd\uff09\u540c\u5074\u908a\u6b04\u529f\u80fd\u6703\u8ddf\u4f4f\u8b8a\\n- **\u8a18\u61b6**\uff1a\u6a21\u5f0f\u9078\u64c7\u540c\u793a\u7bc4\u8cc7\u6599\u5b58\u65bc\u700f\u89bd\u5668 localStorage\\n- **\u529f\u80fd\u8a3b\u518a\u8868**\uff08`src/features/registry.ts`\uff09\u4f5c\u70ba\u64f4\u5145\u4e2d\u5fc3 \u2014\u2014 \u52a0\u65b0\u529f\u80fd\u53ea\u9700\u767b\u8a18\u4e00\u500b\u9805\u76ee\\n\\n## \u529f\u80fd\\n| \u6a21\u5f0f | \u529f\u80fd | \u72c0\u614b |\\n| --- | --- | --- |\\n| \ud83d\udcda \u5b78\u7fd2 | \u5b78\u7fd2\u7b46\u8a18\u3001\u5b78\u7fd2\u76ee\u6a19+\u9032\u5ea6\u8ffd\u8e64 | \u2705 \u53ef\u7528 |\\n| \ud83d\udcda \u5b78\u7fd2 | \u95b1\u8b80\u6e05\u55ae\u3001\u77e5\u8b58\u5361\u7247 | \ud83d\udea7 \u9810\u7559\u4f4d |\\n| \ud83d\udcbc \u5de5\u4f5c | \u5f85\u8fa6/\u6279\u6539\u3001\u73ed\u5225\u7ba1\u7406 | \u2705 \u53ef\u7528 |\\n| \ud83d\udcbc \u5de5\u4f5c | \u5099\u8ab2/\u6559\u6848\u3001\u6559\u5b78\u8cc7\u6e90 | \ud83d\udea7 \u9810\u7559\u4f4d |\\n| \u5169\u8005\u5171\u7528 | \u884c\u4e8b\u66c6 | \ud83d\udea7 \u9810\u7559\u4f4d |\\n\\n## \u90e8\u7f72\\n\u5df2\u52a0 `vercel.json`\uff08Vite \u9810\u8a2d + SPA fallback\uff09\uff0cmerge \u5165 `main` \u5f8c Vercel \u53ef\u5c07\u5176\u7576 Production \u90e8\u7f72\u3002\\n\\n## \u9a57\u8b49\\n- `npm run build` \u2705 \u901a\u904e\uff08tsc \u578b\u5225\u6aa2\u67e5 + vite \u6253\u5305\u6210\u529f\uff09\\n\\nhttps://claude.ai/code/session_013knpjeFkgW6SJ9VPPhaaMs\\n\\n---\\n_Generated by [Claude Code](https://claude.ai/code/session_013knpjeFkgW6SJ9VPPhaaMs)_\"\n  },\n  {\n    \"id\": \"github-feedback-comment-7094352149c81cec\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/SimonNg0225/ntk-platform/pull/1#issuecomment-4583051105\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: SimonNg0225/ntk-platform\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/SimonNg0225/ntk-platform/pull/1#issuecomment-4583051105\\nTitle: \\nBody:\\n[vc]: #4wdsdCrX8CR3nE04b+gfJYZupyFHLskWZhQjj3UhIxg=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJudGstcGxhdGZvcm0iLCJwcm9qZWN0SWQiOiJwcmpfTlBXS29McEdMUjVERVVENk44Qm1qcVJNaVVaSSIsInJvb3REaXJlY3RvcnkiOm51bGwsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9zaW1vbi1uZ3MtcHJvamVjdHMtNjdkNGQ2MTAvbnRrLXBsYXRmb3JtL0VtR001bktaR2dwblU0SE50NVM5cU5QTEpFNTMiLCJwcmV2\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "comment-chain-pattern-bad_chains-dfc0ec056fbb1b15", "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": "SimonNg0225/ntk-platform", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 454914, "scanner": "foundry_dataset", "fingerprint": "41c94cdb167e24f4aad550a34d5d6e2ec44fff285b8077ba84c879e6d65d1943", "category": "auth", "severity": "critical", "confidence": 0.78, "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": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"bug_fix": 2, "schema_or_data": 3, "ui_or_frontend": 29, "deployment_env_gap": 1, "security_or_secrets": 2, "security_auth_secret": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 89, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 32, "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": 5, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 48, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 2, "pr_file": 32, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#32", "issue_number": "32", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-22fec204ad0dc20e", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"schema_or_data": 15, "ui_or_frontend": 145}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#32\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#32\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 32\nGraph consistency label: supported_by_high_confidence_link\nNodes: 48\nEdges: 89\nNode types: {'pr_file': 32, 'commit': 4, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 32, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 5, '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': 29, 'claimed_resolved_unverified': 4, 'schema_or_data': 3, 'human_reported_issue_then_fix_attempt': 2, 'security_or_secrets': 2, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-2c21fe234a3448aa", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 454913, "scanner": "foundry_dataset", "fingerprint": "9f2a584fc2e830b26ec6d4748621fe37bbefb678739eab02971cdd9c20028257", "category": "auth", "severity": "critical", "confidence": 0.78, "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": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"bug_fix": 2, "schema_or_data": 2, "ui_or_frontend": 6, "deployment_env_gap": 1, "security_or_secrets": 2, "security_auth_secret": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 53, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 8, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 8, "thread_has_comment_chain": 2, "comment_chain_links_commit": 5, "comment_chain_touches_file": 16, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 24, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 2, "pr_file": 8, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#31", "issue_number": "31", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-b228634199836510", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"schema_or_data": 10, "ui_or_frontend": 30}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#31\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#31\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#31\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 31\nGraph consistency label: supported_by_high_confidence_link\nNodes: 24\nEdges: 53\nNode types: {'pr_file': 8, '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': 16, 'thread_touches_file': 8, 'issue_chain_touches_file': 8, 'comment_chain_links_commit': 5, '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': 6, 'claimed_resolved_unverified': 4, 'schema_or_data': 2, 'human_reported_issue_then_fix_attempt': 2, 'security_or_secrets': 2, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-2d2f2133f9735777", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 454912, "scanner": "foundry_dataset", "fingerprint": "08273673c54b494b994778bd76c0de106ca896becef52ee452d5e754097d203e", "category": "auth", "severity": "critical", "confidence": 0.78, "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": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"bug_fix": 1, "deployment_env_gap": 1, "security_or_secrets": 2, "security_auth_secret": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 6, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 19, "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, "comment_chain_links_commit": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 15, "node_types": {"repo": 1, "commit": 3, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#2", "issue_number": "2", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-0719ce76363c4960", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#2\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#2\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#2\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 2\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 19\nNode types: {'link_quality': 4, 'commit': 3, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'comment_chain_links_commit': 3, '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: {'claimed_resolved_unverified': 3, 'security_or_secrets': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-20e85e6c8f58c910", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 454911, "scanner": "foundry_dataset", "fingerprint": "64f56d6f4dcd0d8d4fc3e4bb3fd85616e417e77ea37124db3ed0e6c29903ac45", "category": "auth", "severity": "critical", "confidence": 0.78, "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": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 4, "security_or_secrets": 1, "security_auth_secret": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 22, "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, "comment_chain_links_commit": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 17, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#18", "issue_number": "18", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-3c6efcd78622b0e2", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#18\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#18\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#18\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 18\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 22\nNode types: {'commit': 5, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 6, '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: {'dependency_or_build': 4, 'claimed_resolved_unverified': 4, 'human_reported_issue_then_fix_attempt': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'security_or_secrets': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-8cfc6aa72d811ead", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 454910, "scanner": "foundry_dataset", "fingerprint": "26e2d875efc0b094d1fcf1e2d26f94a6ea85586df4e4b6f793f82b5227a3d203", "category": "auth", "severity": "critical", "confidence": 0.78, "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": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"deployment_env_gap": 1, "dependency_or_build": 3, "security_or_secrets": 2, "security_auth_secret": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 22, "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, "comment_chain_links_commit": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 17, "node_types": {"repo": 1, "commit": 5, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#13", "issue_number": "13", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-d1a8442b63b41645", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#13\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#13\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#13\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 13\nGraph consistency label: supported_by_high_confidence_link\nNodes: 17\nEdges: 22\nNode types: {'commit': 5, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_links_commit': 6, '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: {'claimed_resolved_unverified': 4, 'dependency_or_build': 3, 'human_reported_issue_then_fix_attempt': 2, 'security_or_secrets': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-652a4185e4b7f1c9", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451076, "scanner": "foundry_dataset", "fingerprint": "57ffeb38d41dc7602df61ad0bcd5cd7616908dbc2227fd7b159b3dcbd6a58f55", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"api_or_backend": 1, "ui_or_frontend": 1, "mock_placeholder": 1, "deployment_env_gap": 1, "generated_provenance": 1, "self_attested_unverified": 4, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 8}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 26, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_links_commit": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 15, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#37", "issue_number": "37", "quality_tiers": {"weak_supervision": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-4b294a0e0e8dfc53", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 5, "ui_or_frontend": 5}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#37\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#37\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#37\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 37\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 26\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_links_commit': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'self_attested_unverified': 4, 'self_attested_or_generated_fix_unverified': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'api_or_backend': 1, 'ui_or_frontend': 1, 'generated_provenance': 1}\nOutcomes: {'self_attested_unverified': 8}\nQuality tiers: {'weak_supervision': 4}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-de17e09ab60b994d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451075, "scanner": "foundry_dataset", "fingerprint": "bdea3a720ca439dfd5f27ac186c395261fddfc1d9a48b7c1bb953ba8d8f8ebf0", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"bug_fix": 2, "test_or_ci": 1, "data_schema": 1, "api_or_backend": 1, "docs_or_claims": 1, "schema_or_data": 1, "ui_or_frontend": 10, "mock_placeholder": 1, "deployment_env_gap": 1, "verification_or_tests": 1, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "comment_has_related_commit_context": 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": "mock_as_real_or_placeholder", "outcomes": {"ambiguous_needs_more_evidence": 2, "claimed_resolved_with_verification_signal": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 71, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 14, "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": 5, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 30, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 2, "pr_file": 14, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#36", "issue_number": "36", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-7c2e428c43a1cd96", "graph_gold_label": "supported_by_verification_signal", "changed_file_labels": {"test_or_ci": 5, "api_or_backend": 5, "docs_or_claims": 5, "schema_or_data": 5, "ui_or_frontend": 50}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_verification_signal\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#36\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#36\nGraph gold label: supported_by_verification_signal\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#36\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 36\nGraph consistency label: supported_by_verification_signal\nNodes: 30\nEdges: 71\nNode types: {'pr_file': 14, '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': 14, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 5, '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': 10, 'claimed_resolved_with_verification_signal': 3, 'bug_fix': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'api_or_backend': 1, 'test_or_ci': 1, 'schema_or_data': 1, 'human_reported_issue_then_verified_fix_attempt': 1, 'verification_or_tests': 1, 'data_schema': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'claimed_resolved_with_verification_signal': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-64af8a47aed47c04", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451074, "scanner": "foundry_dataset", "fingerprint": "ea6c419d819bb71063c5002dac596ee5bd0c5b6370197e2b61ceb2baa2dbebc0", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"bug_fix": 1, "test_ci_gap": 1, "ui_or_frontend": 3, "deployment_env_gap": 1, "generated_provenance": 1, "self_attested_unverified": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 2, "claimed_resolved_unverified": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 31, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 3, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 3, "thread_has_comment_chain": 2, "comment_chain_links_commit": 3, "comment_chain_touches_file": 6, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 17, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "pr_file": 3, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#34", "issue_number": "34", "quality_tiers": {"weak_supervision": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-a0c09af223ccd4f3", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"ui_or_frontend": 15}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#34\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#34\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#34\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 34\nGraph consistency label: weak_supervision_needs_review\nNodes: 17\nEdges: 31\nNode types: {'link_quality': 4, 'pr_file': 3, 'comment': 2, 'comment_chain': 2, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 6, 'chain_has_link_quality': 4, 'thread_touches_file': 3, 'comment_chain_links_commit': 3, 'issue_chain_touches_file': 3, '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': 3, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'test_ci_gap': 1, 'deployment_env_gap': 1, 'human_reported_issue_then_fix_attempt': 1, 'generated_provenance': 1, 'bug_fix': 1, 'self_attested_or_generated_fix_unverified': 1, 'self_attested_unverified': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'self_attested_unverified': 2}\nQuality tiers: {'weak_supervision': 4}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-626bb48b86cc9eca", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451073, "scanner": "foundry_dataset", "fingerprint": "906c02aad7fb76e0d834f1de9f6a9666163a33d585fb50d002eec193706578a2", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"ui_or_frontend": 1, "deployment_env_gap": 1, "generated_provenance": 1, "agent_instruction_gap": 1, "self_attested_unverified": 4, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 8}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 22, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_links_commit": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#28", "issue_number": "28", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-3738f9565534201b", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"ui_or_frontend": 5}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#28\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#28\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#28\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 28\nGraph consistency label: supported_by_high_confidence_link\nNodes: 14\nEdges: 22\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'commit': 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, 'comment_chain_links_commit': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'self_attested_unverified': 4, 'self_attested_or_generated_fix_unverified': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'deployment_env_gap': 1, 'ui_or_frontend': 1, 'generated_provenance': 1}\nOutcomes: {'self_attested_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-85797af23389ad3b", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451072, "scanner": "foundry_dataset", "fingerprint": "6910115c8c4992a77411fb3e1b6a03e8f7b6857310c4b013b232dbcd43f22f5c", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"docs_or_claims": 1, "deployment_env_gap": 1, "generated_provenance": 1, "agent_instruction_gap": 1, "self_attested_unverified": 4, "issue_or_pull_request_thread": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 8}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 22, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 1, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 1, "thread_has_comment_chain": 2, "comment_chain_links_commit": 2, "comment_chain_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#26", "issue_number": "26", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-968466e2ef9282cf", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"docs_or_claims": 5}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#26\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#26\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#26\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 26\nGraph consistency label: supported_by_high_confidence_link\nNodes: 14\nEdges: 22\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 1, 'commit': 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, 'comment_chain_links_commit': 2, 'comment_chain_touches_file': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_touches_file': 1, 'thread_has_issue_chain': 1, 'issue_chain_touches_file': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'self_attested_unverified': 4, 'self_attested_or_generated_fix_unverified': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'deployment_env_gap': 1, 'docs_or_claims': 1, 'generated_provenance': 1}\nOutcomes: {'self_attested_unverified': 8}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-97a49e8bb27ab9da", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451071, "scanner": "foundry_dataset", "fingerprint": "39f925a341150a81b0ce2feb8440e7b07b9e63add79320f7e6f1c5a702871c1e", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"test_or_ci": 1, "commit_general": 1, "ui_or_frontend": 9, "deployment_env_gap": 1, "generated_provenance": 1, "agent_instruction_gap": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 59, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 10, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 10, "thread_has_comment_chain": 2, "comment_chain_links_commit": 3, "comment_chain_touches_file": 20, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 24, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "pr_file": 10, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#24", "issue_number": "24", "quality_tiers": {"high_confidence": 3, "weak_supervision": 1}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-855284d1797a42b1", "graph_gold_label": "supported_by_high_confidence_link", "changed_file_labels": {"test_or_ci": 5, "ui_or_frontend": 45}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: supported_by_high_confidence_link\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#24\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#24\nGraph gold label: supported_by_high_confidence_link\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#24\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 24\nGraph consistency label: supported_by_high_confidence_link\nNodes: 24\nEdges: 59\nNode types: {'pr_file': 10, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 20, 'thread_touches_file': 10, 'issue_chain_touches_file': 10, 'chain_has_link_quality': 4, 'comment_chain_links_commit': 3, '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': 9, 'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'deployment_env_gap': 1, 'test_or_ci': 1, 'self_attested_or_generated_fix_unverified': 1, 'commit_general': 1, 'generated_provenance': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'self_attested_unverified': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'high_confidence': 3, 'weak_supervision': 1}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-99cf98698fe4b05d", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451070, "scanner": "foundry_dataset", "fingerprint": "068fc1692ae086afff1a293136f181f72fa252257d72ab96262b512e3b76cf51", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"commit_general": 1, "deployment_env_gap": 1, "generated_provenance": 1, "agent_instruction_gap": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 1, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6, "ambiguous_needs_more_evidence": 2}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 19, "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, "comment_chain_links_commit": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#19", "issue_number": "19", "quality_tiers": {"weak_supervision": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-12e5fbd03847d753", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#19\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#19\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#19\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 19\nGraph consistency label: weak_supervision_needs_review\nNodes: 14\nEdges: 19\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'comment_chain_links_commit': 3, '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: {'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'deployment_env_gap': 1, 'self_attested_or_generated_fix_unverified': 1, 'commit_general': 1, 'generated_provenance': 1, 'comment_has_related_commit_context': 1, 'ambiguous_needs_more_evidence': 1}\nOutcomes: {'self_attested_unverified': 6, 'ambiguous_needs_more_evidence': 2}\nQuality tiers: {'weak_supervision': 4}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-da03d05b73a38fe5", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451069, "scanner": "foundry_dataset", "fingerprint": "83097852d053ce99884ec339219bf70851a001fd5c95c5e3a0273b4a9d7c7dab", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"bug_fix": 1, "mock_placeholder": 1, "deployment_env_gap": 1, "dependency_or_build": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 19, "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, "comment_chain_links_commit": 3, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 14, "node_types": {"repo": 1, "commit": 2, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#17", "issue_number": "17", "quality_tiers": {"weak_supervision": 4}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-1d3ea25bb80256fa", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#17\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#17\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#17\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 17\nGraph consistency label: weak_supervision_needs_review\nNodes: 14\nEdges: 19\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'commit': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'chain_has_link_quality': 4, 'comment_chain_links_commit': 3, '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: {'claimed_resolved_unverified': 4, 'human_reported_issue_then_fix_attempt': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'deployment_env_gap': 1, 'dependency_or_build': 1, 'bug_fix': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'weak_supervision': 4}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-1b9c69274f842891", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: SimonNg0225/ntk-platform"}, "properties": {"repobilityId": 451068, "scanner": "foundry_dataset", "fingerprint": "4b6933035e8858831fa96292cbe1e34e106a1c65929a119eecd485aa10b7a74a", "category": "practices", "severity": "critical", "confidence": 0.82, "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": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"deployment_env_gap": 1, "generated_provenance": 1, "agent_instruction_gap": 1, "self_attested_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "human_reported_issue_no_linked_fix": 1, "thread_has_human_issue_and_fix_context": 2, "self_attested_or_generated_fix_unverified": 1}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"self_attested_unverified": 6, "not_resolved_or_not_observed": 2}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 17, "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, "comment_chain_links_commit": 1, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "SimonNg0225/ntk-platform#10", "issue_number": "10", "quality_tiers": {"unresolved": 1, "weak_supervision": 3}, "repo_full_name": "SimonNg0225/ntk-platform", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-8ccaa85291597184", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {}}, "text": "Graph query export: Mock, sample, placeholder, or self-attested behavior treated as real\nQuery id: mock_as_real_or_placeholder\nQuery type: motif_query\nIntent: Hard negatives for fake completeness and missing real data paths.\nMotif: mock_as_real_or_placeholder\nTraining usage: hard_negative\nGraph gold label: weak_supervision_needs_review\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#10\nEvidence:\nGraph motif: Mock, sample, placeholder, or self-attested behavior treated as real\nMotif id: mock_as_real_or_placeholder\nPolarity: bad\nTraining usage: hard_negative\nSeverity: critical\nRepo: SimonNg0225/ntk-platform\nThread: SimonNg0225/ntk-platform#10\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: SimonNg0225/ntk-platform#10\nRepo: SimonNg0225/ntk-platform\nIssue/PR number: 10\nGraph consistency label: weak_supervision_needs_review\nNodes: 13\nEdges: 17\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 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, 'comment_chain_links_commit': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'self_attested_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'agent_instruction_gap': 1, 'deployment_env_gap': 1, 'self_attested_or_generated_fix_unverified': 1, 'generated_provenance': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1}\nOutcomes: {'self_attested_unverified': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1}\nCI labels: {}\nCurriculum targets:\n- Train real-data plumbing and mock-removal tasks from source to UI.\n- Use as hard negatives for dashboards or apps claiming real runs without provenance.\nAssumption checks:\n- Is user-visible behavior backed by real storage/API/CI artifacts?\n- Are placeholders, sample data, or generated claims still in a production path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/SimonNg0225/ntk-platform", "source_id": "graph-query-motif_query-59b8c330ee441283", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/mock_as_real_or_placeholder/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "SimonNg0225/ntk-platform", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-7e12dce21186866a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AccountBox.tsx:19"}, "properties": {"repobilityId": "a60bb7febf2f2477", "scanner": "scanner-primary", "fingerprint": "7e12dce21186866a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65f9a8deace3b1eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/SupportButton.tsx:146"}, "properties": {"repobilityId": "1b996670e9875472", "scanner": "scanner-primary", "fingerprint": "65f9a8deace3b1eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c7d689a492d98fe8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/Sidebar.tsx:594"}, "properties": {"repobilityId": "450176a4d82f7dad", "scanner": "scanner-primary", "fingerprint": "c7d689a492d98fe8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc19b93bf0f38c29", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/MobileTopBar.tsx:32"}, "properties": {"repobilityId": "c089cfe20b040632", "scanner": "scanner-primary", "fingerprint": "dc19b93bf0f38c29", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e0002cfe77afd66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AdminSupportCard.tsx:90"}, "properties": {"repobilityId": "b30b6aad00cb3a74", "scanner": "scanner-primary", "fingerprint": "4e0002cfe77afd66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a6392ff269549bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/marketing/Landing.tsx:508"}, "properties": {"repobilityId": "d6db4934212ad028", "scanner": "scanner-primary", "fingerprint": "6a6392ff269549bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-00443f9d928f646b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Admin.tsx:581"}, "properties": {"repobilityId": "67361c90ede0c374", "scanner": "scanner-primary", "fingerprint": "00443f9d928f646b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-caecfb504428beb7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Settings.tsx:402"}, "properties": {"repobilityId": "bf24903c37e8c4a8", "scanner": "scanner-primary", "fingerprint": "caecfb504428beb7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d489807c1c584af9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Home.tsx:128"}, "properties": {"repobilityId": "a939f1527511e497", "scanner": "scanner-primary", "fingerprint": "d489807c1c584af9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-288842ad629a8304", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/forum/BoardList.tsx:31"}, "properties": {"repobilityId": "a03fc442e7efdffd", "scanner": "scanner-primary", "fingerprint": "288842ad629a8304", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b76a9427c661d10", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/forum/ThreadList.tsx:76"}, "properties": {"repobilityId": "dafa0cd4e756356a", "scanner": "scanner-primary", "fingerprint": "0b76a9427c661d10", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25b1e9ec2bfa19ec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Calendar.tsx:312"}, "properties": {"repobilityId": "fcf415a8bb5cc349", "scanner": "scanner-primary", "fingerprint": "25b1e9ec2bfa19ec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-43d03c05926f3069", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/GlobalSearch.tsx:724"}, "properties": {"repobilityId": "b677a7133a194f3e", "scanner": "scanner-primary", "fingerprint": "43d03c05926f3069", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a97c292b73cb9e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/AIAssistant.tsx:918"}, "properties": {"repobilityId": "fee98435b84fdd19", "scanner": "scanner-primary", "fingerprint": "7a97c292b73cb9e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5cfb9869b38665c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Inbox.tsx:716"}, "properties": {"repobilityId": "bdbc39e733d5efe2", "scanner": "scanner-primary", "fingerprint": "5cfb9869b38665c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a050747fe95db2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/Countdown.tsx:491"}, "properties": {"repobilityId": "d58cb72a255b707c", "scanner": "scanner-primary", "fingerprint": "9a050747fe95db2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c072d97f402d1a3a", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/shared/Countdown.tsx:280"}, "properties": {"repobilityId": "22dacc32e942642e", "scanner": "scanner-primary", "fingerprint": "c072d97f402d1a3a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-ae7ee86677c93015", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/AskData.tsx:540"}, "properties": {"repobilityId": "38a97d02d97c370a", "scanner": "scanner-primary", "fingerprint": "ae7ee86677c93015", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a19470180e891f7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/charts.tsx:145"}, "properties": {"repobilityId": "581cda78a5872173", "scanner": "scanner-primary", "fingerprint": "9a19470180e891f7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6af3642e301ceb80", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/SetupView.tsx:396"}, "properties": {"repobilityId": "c120aa60d408d01a", "scanner": "scanner-primary", "fingerprint": "6af3642e301ceb80", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d7ba2b1c36d20bc", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/shared/quiz/SetupView.tsx:516"}, "properties": {"repobilityId": "0040c50045a6915d", "scanner": "scanner-primary", "fingerprint": "6d7ba2b1c36d20bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-941facb7ab56286e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/quiz/ResultView.tsx:190"}, "properties": {"repobilityId": "30bff74d9d0bbf47", "scanner": "scanner-primary", "fingerprint": "941facb7ab56286e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-878ea8408be3a21b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/MonthView.tsx:154"}, "properties": {"repobilityId": "d5968177d3352d50", "scanner": "scanner-primary", "fingerprint": "878ea8408be3a21b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b7304b8b28b6035", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/TimeGridView.tsx:242"}, "properties": {"repobilityId": "f0a96fadf9b5453e", "scanner": "scanner-primary", "fingerprint": "1b7304b8b28b6035", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ad00a2b1baa7ff5f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/shared/calendar/EventEditor.tsx:599"}, "properties": {"repobilityId": "03433df5c751995d", "scanner": "scanner-primary", "fingerprint": "ad00a2b1baa7ff5f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6c61fdd30652973f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/LearningDashboard.tsx:432"}, "properties": {"repobilityId": "a728253a745eaff3", "scanner": "scanner-primary", "fingerprint": "6c61fdd30652973f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1cc9b9dd9bb065a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/HealthTracker.tsx:735"}, "properties": {"repobilityId": "22f95e96762b7334", "scanner": "scanner-primary", "fingerprint": "1cc9b9dd9bb065a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-351eca56a314922e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/Journal.tsx:430"}, "properties": {"repobilityId": "c9769d277eda99be", "scanner": "scanner-primary", "fingerprint": "351eca56a314922e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc47a91136364d8a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/Flashcards.tsx:366"}, "properties": {"repobilityId": "23508ff04a72b874", "scanner": "scanner-primary", "fingerprint": "bc47a91136364d8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56567225501a5d83", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/HabitTracker.tsx:503"}, "properties": {"repobilityId": "5b84cd80359ca3b6", "scanner": "scanner-primary", "fingerprint": "56567225501a5d83", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f237d44bbcb39612", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/CardGenerator.tsx:1333"}, "properties": {"repobilityId": "87e9a0328114deff", "scanner": "scanner-primary", "fingerprint": "f237d44bbcb39612", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-235278a825dc0d7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/ReadingList.tsx:373"}, "properties": {"repobilityId": "d84c235266417cf8", "scanner": "scanner-primary", "fingerprint": "235278a825dc0d7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-770ddec019c4e7d6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/NotesWidget.tsx:599"}, "properties": {"repobilityId": "f433398b599e8a76", "scanner": "scanner-primary", "fingerprint": "770ddec019c4e7d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65fcc82f8837f9fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/GoalsWidget.tsx:663"}, "properties": {"repobilityId": "b09e6a6d3d0294a7", "scanner": "scanner-primary", "fingerprint": "65fcc82f8837f9fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1d1deabd42a1b77", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/reading/BookModal.tsx:189"}, "properties": {"repobilityId": "a5037f04277c8873", "scanner": "scanner-primary", "fingerprint": "a1d1deabd42a1b77", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ff626f9870c4862", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/reading/Charts.tsx:93"}, "properties": {"repobilityId": "9eb9fdd8f3fb429e", "scanner": "scanner-primary", "fingerprint": "8ff626f9870c4862", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-681d32f51a5b26ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/goals/GoalEditor.tsx:249"}, "properties": {"repobilityId": "0849fe552702709e", "scanner": "scanner-primary", "fingerprint": "681d32f51a5b26ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d0a4992856777144", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/goals/Charts.tsx:253"}, "properties": {"repobilityId": "4c0010d468ae718c", "scanner": "scanner-primary", "fingerprint": "d0a4992856777144", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4e7b4a58b37151e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitRow.tsx:78"}, "properties": {"repobilityId": "75068916a686889e", "scanner": "scanner-primary", "fingerprint": "c4e7b4a58b37151e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa00785417a064a5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/StatsView.tsx:241"}, "properties": {"repobilityId": "fd104f396d304d05", "scanner": "scanner-primary", "fingerprint": "fa00785417a064a5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ccbae8a0f5535f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitDetail.tsx:120"}, "properties": {"repobilityId": "7eca0cc726f527f7", "scanner": "scanner-primary", "fingerprint": "1ccbae8a0f5535f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-89be2fe2aabf4351", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/habits/HabitEditor.tsx:230"}, "properties": {"repobilityId": "18f30fd191752480", "scanner": "scanner-primary", "fingerprint": "89be2fe2aabf4351", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f46f9d27486f1be6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/dashboard/widgets.tsx:287"}, "properties": {"repobilityId": "51d9684a56c0590c", "scanner": "scanner-primary", "fingerprint": "f46f9d27486f1be6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-520e8ec135ac523f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/dashboard/BentoOverview.tsx:83"}, "properties": {"repobilityId": "89e0e2c5a0592ded", "scanner": "scanner-primary", "fingerprint": "520e8ec135ac523f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b2884e20b4d25de3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/library/LibraryView.tsx:415"}, "properties": {"repobilityId": "8ac6e1d568b26723", "scanner": "scanner-primary", "fingerprint": "b2884e20b4d25de3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cbd15ab558e3fa45", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/coach/PlanGen.tsx:514"}, "properties": {"repobilityId": "db28ba97c020e656", "scanner": "scanner-primary", "fingerprint": "cbd15ab558e3fa45", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-db0ad6a89c5b3e9d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/body/BodyView.tsx:149"}, "properties": {"repobilityId": "6c5f46d7abe7af2f", "scanner": "scanner-primary", "fingerprint": "db0ad6a89c5b3e9d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1405ce9bb6520c0c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/nutrition/NutritionView.tsx:843"}, "properties": {"repobilityId": "8d2084d660957410", "scanner": "scanner-primary", "fingerprint": "1405ce9bb6520c0c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-10bd2dc47c165d97", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/training/Charts.tsx:219"}, "properties": {"repobilityId": "30f6a3d780371f0d", "scanner": "scanner-primary", "fingerprint": "10bd2dc47c165d97", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-403c1b545521d65e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/fitness/training/TrainingView.tsx:155"}, "properties": {"repobilityId": "ab2f54013cfaafce", "scanner": "scanner-primary", "fingerprint": "403c1b545521d65e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b91eb60f4b454009", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/notes/Editor.tsx:667"}, "properties": {"repobilityId": "dec77d40df32d9db", "scanner": "scanner-primary", "fingerprint": "b91eb60f4b454009", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03312e3d95c942f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/notes/Charts.tsx:159"}, "properties": {"repobilityId": "c62842e2e2385072", "scanner": "scanner-primary", "fingerprint": "03312e3d95c942f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5f4b57ca1f3f63f6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/flashcards/BrowseView.tsx:442"}, "properties": {"repobilityId": "b4829f7fc143e0e8", "scanner": "scanner-primary", "fingerprint": "5f4b57ca1f3f63f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9423bb9452acbe44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/ProjectsView.tsx:196"}, "properties": {"repobilityId": "8a503b9eb11bc463", "scanner": "scanner-primary", "fingerprint": "9423bb9452acbe44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9efdbef9b2ead03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/charts.tsx:261"}, "properties": {"repobilityId": "13aa1311a1800c62", "scanner": "scanner-primary", "fingerprint": "d9efdbef9b2ead03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1748cc3f80e0cad9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/HistoryView.tsx:334"}, "properties": {"repobilityId": "f4ee770dec89162a", "scanner": "scanner-primary", "fingerprint": "1748cc3f80e0cad9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9642c71476198ed4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/learning/focus/StatsView.tsx:224"}, "properties": {"repobilityId": "76f00a54d3568651", "scanner": "scanner-primary", "fingerprint": "9642c71476198ed4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a56210e5f0d3f5b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/BudgetTracker.tsx:613"}, "properties": {"repobilityId": "b05a15b872bfacbf", "scanner": "scanner-primary", "fingerprint": "a56210e5f0d3f5b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65e2566e95fe1a23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/WorkDashboard.tsx:214"}, "properties": {"repobilityId": "fa9b5f4e525b1888", "scanner": "scanner-primary", "fingerprint": "65e2566e95fe1a23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0744643ce1eb18d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/LessonPlanner.tsx:893"}, "properties": {"repobilityId": "8d642637794ea455", "scanner": "scanner-primary", "fingerprint": "0744643ce1eb18d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f55b1d5d97afeff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/CurriculumProgress.tsx:263"}, "properties": {"repobilityId": "3c4daaaeea1283bf", "scanner": "scanner-primary", "fingerprint": "9f55b1d5d97afeff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a834334f9c1b446", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ResourceLibrary.tsx:223"}, "properties": {"repobilityId": "ecb6355a826125eb", "scanner": "scanner-primary", "fingerprint": "9a834334f9c1b446", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa57a8165453eac6", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/work/ResourceLibrary.tsx:978"}, "properties": {"repobilityId": "45d93ccced25e67c", "scanner": "scanner-primary", "fingerprint": "fa57a8165453eac6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-9b77690a8c70ed68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Gradebook.tsx:179"}, "properties": {"repobilityId": "b7e8e18d031ba47a", "scanner": "scanner-primary", "fingerprint": "9b77690a8c70ed68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71b97d53b961c909", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ClassesWidget.tsx:391"}, "properties": {"repobilityId": "019714a5d967530f", "scanner": "scanner-primary", "fingerprint": "71b97d53b961c909", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ede2c8cd00910501", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Attendance.tsx:243"}, "properties": {"repobilityId": "5a7a1c4861610037", "scanner": "scanner-primary", "fingerprint": "ede2c8cd00910501", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcfdf35aa83fd17e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/QuestionBank.tsx:257"}, "properties": {"repobilityId": "48247a8e1da8b321", "scanner": "scanner-primary", "fingerprint": "bcfdf35aa83fd17e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-edf46659d5f6ee81", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Team.tsx:328"}, "properties": {"repobilityId": "d23df9157e8acdc3", "scanner": "scanner-primary", "fingerprint": "edf46659d5f6ee81", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1af3ff52918f7f7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Timetable.tsx:599"}, "properties": {"repobilityId": "ec8db8fc792c6679", "scanner": "scanner-primary", "fingerprint": "1af3ff52918f7f7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec21883144cff689", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/Grading.tsx:457"}, "properties": {"repobilityId": "9764b16bb35da6da", "scanner": "scanner-primary", "fingerprint": "ec21883144cff689", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c3b6286cc8e1d5da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/TodoWidget.tsx:181"}, "properties": {"repobilityId": "f6f44c187f460e06", "scanner": "scanner-primary", "fingerprint": "c3b6286cc8e1d5da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0956cbfccc9492b", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/features/work/TodoWidget.tsx:1411"}, "properties": {"repobilityId": "869b7d2db040a940", "scanner": "scanner-primary", "fingerprint": "e0956cbfccc9492b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-dc11714a3337a6f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/ParentComms.tsx:219"}, "properties": {"repobilityId": "c90e2dd803da7ad0", "scanner": "scanner-primary", "fingerprint": "dc11714a3337a6f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-20f8fa590274b563", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/MeetingNotes.tsx:218"}, "properties": {"repobilityId": "949faeb14111c0ad", "scanner": "scanner-primary", "fingerprint": "20f8fa590274b563", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6b74dd874e0616ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/questionbank/Charts.tsx:99"}, "properties": {"repobilityId": "f9481e6c5aea19aa", "scanner": "scanner-primary", "fingerprint": "6b74dd874e0616ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2abc7c93d2f7fdb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/meetingNotes/NoteEditor.tsx:317"}, "properties": {"repobilityId": "17ce36fd1626c1c0", "scanner": "scanner-primary", "fingerprint": "e2abc7c93d2f7fdb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f134febad55fb9d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/lessonPlanner/CoverageChart.tsx:49"}, "properties": {"repobilityId": "cc864ae106900ea4", "scanner": "scanner-primary", "fingerprint": "6f134febad55fb9d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-11bc24953429715d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/lessonPlanner/PlanEditor.tsx:299"}, "properties": {"repobilityId": "e22a1cd5de7449bf", "scanner": "scanner-primary", "fingerprint": "11bc24953429715d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f40efb7e9f9d9c7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/timetable/WorkloadView.tsx:241"}, "properties": {"repobilityId": "67c2bf441899cb82", "scanner": "scanner-primary", "fingerprint": "f40efb7e9f9d9c7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56af328ec9852845", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/rubric/RubricGen.tsx:209"}, "properties": {"repobilityId": "e86a2b28a1f5f753", "scanner": "scanner-primary", "fingerprint": "56af328ec9852845", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c98aefc7a9b146b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/budget/Charts.tsx:142"}, "properties": {"repobilityId": "b08f018ae289b61d", "scanner": "scanner-primary", "fingerprint": "c98aefc7a9b146b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8aceef225445cd0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/docDigest/DocDigest.tsx:266"}, "properties": {"repobilityId": "dbddc9f76fa3ebf4", "scanner": "scanner-primary", "fingerprint": "e8aceef225445cd0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a8624edc81fa825", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/StudentImport.tsx:211"}, "properties": {"repobilityId": "4b931581a3ce9778", "scanner": "scanner-primary", "fingerprint": "4a8624edc81fa825", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-92e0528a5fb41b9a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/charts.tsx:191"}, "properties": {"repobilityId": "c126322035eecb8f", "scanner": "scanner-primary", "fingerprint": "92e0528a5fb41b9a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3fd281925ef285b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classes/StudentProfile.tsx:241"}, "properties": {"repobilityId": "b461133b9a5f1efb", "scanner": "scanner-primary", "fingerprint": "3fd281925ef285b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c01c0fb38fc11ddb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/teachGuide/TeachGuide.tsx:240"}, "properties": {"repobilityId": "87ddc65d434428eb", "scanner": "scanner-primary", "fingerprint": "c01c0fb38fc11ddb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e8b1cfd1e77a846", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/ProfileTab.tsx:174"}, "properties": {"repobilityId": "edc43e57d51a4e48", "scanner": "scanner-primary", "fingerprint": "5e8b1cfd1e77a846", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b70e81c8cfb72331", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/MyShares.tsx:95"}, "properties": {"repobilityId": "735aad114d80656f", "scanner": "scanner-primary", "fingerprint": "b70e81c8cfb72331", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c04e0a1be568ef30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/Community.tsx:312"}, "properties": {"repobilityId": "15914f5c620c0998", "scanner": "scanner-primary", "fingerprint": "c04e0a1be568ef30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6fa029c53c128b41", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/community/PublishForm.tsx:154"}, "properties": {"repobilityId": "2a4fca39f4b74965", "scanner": "scanner-primary", "fingerprint": "6fa029c53c128b41", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3b34658b0c252cee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/attendance/RegisterGrid.tsx:117"}, "properties": {"repobilityId": "f465939871c28634", "scanner": "scanner-primary", "fingerprint": "3b34658b0c252cee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e163b86ca66cd741", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/charts.tsx:156"}, "properties": {"repobilityId": "21f8f06b945488bd", "scanner": "scanner-primary", "fingerprint": "e163b86ca66cd741", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e81f1f22b85b32b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/parts.tsx:61"}, "properties": {"repobilityId": "f48349d8ef6ceabf", "scanner": "scanner-primary", "fingerprint": "0e81f1f22b85b32b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df051dc48d2311d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/resourceLibrary/drive/DriveView.tsx:240"}, "properties": {"repobilityId": "2a6e3eb61d22eadc", "scanner": "scanner-primary", "fingerprint": "df051dc48d2311d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-599b06a43ed2ca0f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/transcribe/Transcribe.tsx:183"}, "properties": {"repobilityId": "0dfe914cc10fb203", "scanner": "scanner-primary", "fingerprint": "599b06a43ed2ca0f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d0a85c9032265b02", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/TemplatePreview.tsx:359"}, "properties": {"repobilityId": "cfa0e3427e38a44a", "scanner": "scanner-primary", "fingerprint": "d0a85c9032265b02", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-13913dd2a7dc4285", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/PdfTemplatePreview.tsx:279"}, "properties": {"repobilityId": "d1177070b940c8cd", "scanner": "scanner-primary", "fingerprint": "13913dd2a7dc4285", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-839cca07f64f3fb0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/AdminDocs.tsx:145"}, "properties": {"repobilityId": "93e336a26e23556e", "scanner": "scanner-primary", "fingerprint": "839cca07f64f3fb0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5fda88055f64cc24", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/adminDocs/TemplateUpload.tsx:381"}, "properties": {"repobilityId": "a6a7425fef360875", "scanner": "scanner-primary", "fingerprint": "5fda88055f64cc24", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59316eadafbc91ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/curriculum/Charts.tsx:279"}, "properties": {"repobilityId": "ea2276b9f887072d", "scanner": "scanner-primary", "fingerprint": "59316eadafbc91ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ddb2d23d0fae7d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/classTools/ClassTools.tsx:293"}, "properties": {"repobilityId": "45a3de5127ba7180", "scanner": "scanner-primary", "fingerprint": "5ddb2d23d0fae7d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a0307f3cf19876a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/slides/SlideGen.tsx:479"}, "properties": {"repobilityId": "e4e781c7805e3a68", "scanner": "scanner-primary", "fingerprint": "a0307f3cf19876a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a0054a762808bcd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/gradebook/StudentReport.tsx:200"}, "properties": {"repobilityId": "da7c75f6780b26af", "scanner": "scanner-primary", "fingerprint": "7a0054a762808bcd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61dbe38225773449", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/dse/DseDrill.tsx:230"}, "properties": {"repobilityId": "181a49778989f0f0", "scanner": "scanner-primary", "fingerprint": "61dbe38225773449", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d26b9a39c555647", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/todo/charts.tsx:297"}, "properties": {"repobilityId": "6e0938a364a22fe1", "scanner": "scanner-primary", "fingerprint": "2d26b9a39c555647", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14645aa487a454cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/features/work/todo/TaskEditor.tsx:241"}, "properties": {"repobilityId": "6e118b0ac0b492f5", "scanner": "scanner-primary", "fingerprint": "14645aa487a454cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d032d1af1dcdeb14", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/forum/index.ts:16"}, "properties": {"repobilityId": "2e38da23e9366ea7", "scanner": "scanner-primary", "fingerprint": "d032d1af1dcdeb14", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/forum/index.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-8fccf20edfad6ee7", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/team-billing/index.ts:31"}, "properties": {"repobilityId": "fab45ae1f42126ef", "scanner": "scanner-primary", "fingerprint": "8fccf20edfad6ee7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/team-billing/index.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-656c821c05b562eb", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/admin/index.ts:46"}, "properties": {"repobilityId": "7e296cd80295ad66", "scanner": "scanner-primary", "fingerprint": "656c821c05b562eb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/admin/index.ts"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-96610ce5e3f585e0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/support-admin/index.ts:23"}, "properties": {"repobilityId": "54f0a83bd95cc568", "scanner": "scanner-primary", "fingerprint": "96610ce5e3f585e0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/support-admin/index.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-e3afcc665746e164", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/stripe-billing/index.ts:32"}, "properties": {"repobilityId": "af9bde49e5b8eb81", "scanner": "scanner-primary", "fingerprint": "e3afcc665746e164", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/stripe-billing/index.ts"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-529032e7bba2c118", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/gemini/index.ts:47"}, "properties": {"repobilityId": "88dac92297a9d81a", "scanner": "scanner-primary", "fingerprint": "529032e7bba2c118", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/gemini/index.ts"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-ea5a00f5c4cbb28b", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/support/index.ts:20"}, "properties": {"repobilityId": "4a3f047d4883cab7", "scanner": "scanner-primary", "fingerprint": "ea5a00f5c4cbb28b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/support/index.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-f58121cf29286f5b", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/lib/export/print.ts:56"}, "properties": {"repobilityId": "b8e21a13365d3642", "scanner": "scanner-primary", "fingerprint": "f58121cf29286f5b", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/export/print.ts"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-5b7c1fabf39501e7", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/features/work/questionbank/util.ts:727"}, "properties": {"repobilityId": "af3a450e51a53b87", "scanner": "scanner-primary", "fingerprint": "5b7c1fabf39501e7", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/work/questionbank/util.ts"}, "region": {"startLine": 727}}}]}, {"ruleId": "scanner-5f6a1580b13395a3", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/features/work/meetingNotes/util.ts:663"}, "properties": {"repobilityId": "91ab972ece874a6d", "scanner": "scanner-primary", "fingerprint": "5f6a1580b13395a3", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/work/meetingNotes/util.ts"}, "region": {"startLine": 663}}}]}, {"ruleId": "scanner-eb71c4a4d152b862", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/features/work/lessonPlanner/util.ts:359"}, "properties": {"repobilityId": "c42939549ff88517", "scanner": "scanner-primary", "fingerprint": "eb71c4a4d152b862", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/work/lessonPlanner/util.ts"}, "region": {"startLine": 359}}}]}, {"ruleId": "scanner-f77adcebb059e191", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/highlight.ts:159"}, "properties": {"repobilityId": "63e93ab520f17d5f", "scanner": "scanner-primary", "fingerprint": "f77adcebb059e191", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/work/adminDocs/highlight.ts"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-ecf14d871be19bb8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/pdfPreview.ts:61"}, "properties": {"repobilityId": "10129d5a85ab974e", "scanner": "scanner-primary", "fingerprint": "ecf14d871be19bb8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/work/adminDocs/pdfPreview.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-4c27914d7a032821", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/FillForm.tsx:91"}, "properties": {"repobilityId": "fe226d818ab45650", "scanner": "scanner-primary", "fingerprint": "4c27914d7a032821", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/work/adminDocs/FillForm.tsx"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-79c15b77e66e99d2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/features/work/adminDocs/highlight.test.ts:33"}, "properties": {"repobilityId": "9e2677089e013f34", "scanner": "scanner-primary", "fingerprint": "79c15b77e66e99d2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/work/adminDocs/highlight.test.ts"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-0518f66b5ceef459", "level": "note", "message": {"text": "Insecure pattern 'document_write' in src/features/work/gradebook/StudentReport.tsx:113"}, "properties": {"repobilityId": "67777ab336635ab1", "scanner": "scanner-primary", "fingerprint": "0518f66b5ceef459", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/features/work/gradebook/StudentReport.tsx"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-712b979c59eb3bc6", "level": "note", "message": {"text": "Very large file: src/lib/export/pptxPacks.ts (2237 lines)"}, "properties": {"repobilityId": "3113207bde5d53ec", "scanner": "scanner-primary", "fingerprint": "712b979c59eb3bc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1460773e2e15f5e1", "level": "note", "message": {"text": "Very large file: src/lib/export/pptxPacksGallery1.ts (1350 lines)"}, "properties": {"repobilityId": "27695d4f5f432e80", "scanner": "scanner-primary", "fingerprint": "1460773e2e15f5e1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e5bffd2b3f977957", "level": "note", "message": {"text": "Very large file: src/lib/export/pptxPacksGallery2.ts (1303 lines)"}, "properties": {"repobilityId": "cd803c4f2c5af391", "scanner": "scanner-primary", "fingerprint": "e5bffd2b3f977957", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c79b21c30e3fd31e", "level": "note", "message": {"text": "Very large file: src/features/shared/GlobalSearch.tsx (1407 lines)"}, "properties": {"repobilityId": "c8e9001f76ec8a65", "scanner": "scanner-primary", "fingerprint": "c79b21c30e3fd31e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d1e869a2bd669c90", "level": "note", "message": {"text": "Very large file: src/features/shared/AIAssistant.tsx (2380 lines)"}, "properties": {"repobilityId": "59cde1a9303005ed", "scanner": "scanner-primary", "fingerprint": "d1e869a2bd669c90", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-18ca41c9762abc46", "level": "note", "message": {"text": "Very large file: src/features/shared/Inbox.tsx (1470 lines)"}, "properties": {"repobilityId": "d25987428862162c", "scanner": "scanner-primary", "fingerprint": "18ca41c9762abc46", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-61042c4ccbb6735a", "level": "note", "message": {"text": "Very large file: src/features/learning/CardGenerator.tsx (1468 lines)"}, "properties": {"repobilityId": "e92a945ca3a9b480", "scanner": "scanner-primary", "fingerprint": "61042c4ccbb6735a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-32885b37d9491db7", "level": "note", "message": {"text": "Very large file: src/features/learning/ReadingList.tsx (1396 lines)"}, "properties": {"repobilityId": "09fb11c274663002", "scanner": "scanner-primary", "fingerprint": "32885b37d9491db7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d7e6ecdaa3df9b5d", "level": "note", "message": {"text": "Very large file: src/features/learning/NotesWidget.tsx (1455 lines)"}, "properties": {"repobilityId": "caa94b9450d85f2b", "scanner": "scanner-primary", "fingerprint": "d7e6ecdaa3df9b5d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b8899d08585693cf", "level": "note", "message": {"text": "Very large file: src/features/learning/fitness/nutrition/NutritionView.tsx (1375 lines)"}, "properties": {"repobilityId": "9131c218b2a2effd", "scanner": "scanner-primary", "fingerprint": "b8899d08585693cf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8c1d92c8d307cb35", "level": "note", "message": {"text": "Very large file: src/features/learning/fitness/training/TrainingView.tsx (1470 lines)"}, "properties": {"repobilityId": "5de0d42f81d7bbe5", "scanner": "scanner-primary", "fingerprint": "8c1d92c8d307cb35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7d8f0a7b9d202885", "level": "note", "message": {"text": "Very large file: src/features/work/BudgetTracker.tsx (2442 lines)"}, "properties": {"repobilityId": "a46bac243fc80b72", "scanner": "scanner-primary", "fingerprint": "7d8f0a7b9d202885", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3d57c80035612a72", "level": "note", "message": {"text": "Very large file: src/features/work/WorkDashboard.tsx (1715 lines)"}, "properties": {"repobilityId": "d426e66115dd7480", "scanner": "scanner-primary", "fingerprint": "3d57c80035612a72", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-298cf891aa8c993d", "level": "note", "message": {"text": "Very large file: src/features/work/LessonPlanner.tsx (1441 lines)"}, "properties": {"repobilityId": "a35422c2e529252d", "scanner": "scanner-primary", "fingerprint": "298cf891aa8c993d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f21921b0f76f2e6d", "level": "note", "message": {"text": "Very large file: src/features/work/CurriculumProgress.tsx (1448 lines)"}, "properties": {"repobilityId": "384cae8bcc7832da", "scanner": "scanner-primary", "fingerprint": "f21921b0f76f2e6d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-28fcbe9f02c38277", "level": "note", "message": {"text": "Very large file: src/features/work/ResourceLibrary.tsx (1753 lines)"}, "properties": {"repobilityId": "ba5a34526dcfdaec", "scanner": "scanner-primary", "fingerprint": "28fcbe9f02c38277", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7e0fcf8c9150c429", "level": "note", "message": {"text": "Very large file: src/features/work/Gradebook.tsx (2377 lines)"}, "properties": {"repobilityId": "565af88ac2bfe3d2", "scanner": "scanner-primary", "fingerprint": "7e0fcf8c9150c429", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6ba36acf6763b217", "level": "note", "message": {"text": "Very large file: src/features/work/ClassesWidget.tsx (1634 lines)"}, "properties": {"repobilityId": "b97f2e20ca420c9b", "scanner": "scanner-primary", "fingerprint": "6ba36acf6763b217", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9e7a1ddf7c1859e4", "level": "note", "message": {"text": "Very large file: src/features/work/Attendance.tsx (2262 lines)"}, "properties": {"repobilityId": "66b79cd77a14ea3d", "scanner": "scanner-primary", "fingerprint": "9e7a1ddf7c1859e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c89cad732616b1a5", "level": "note", "message": {"text": "Very large file: src/features/work/QuestionBank.tsx (2271 lines)"}, "properties": {"repobilityId": "7e5e1d63529e6b39", "scanner": "scanner-primary", "fingerprint": "c89cad732616b1a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-46cb33f8cdc6a842", "level": "note", "message": {"text": "Very large file: src/features/work/TodoWidget.tsx (1863 lines)"}, "properties": {"repobilityId": "fa481dd1eec90969", "scanner": "scanner-primary", "fingerprint": "46cb33f8cdc6a842", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-aeadb3b1690dde45", "level": "note", "message": {"text": "Very large file: src/features/work/ParentComms.tsx (1992 lines)"}, "properties": {"repobilityId": "f01096f346130926", "scanner": "scanner-primary", "fingerprint": "aeadb3b1690dde45", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-55af21d9179d406d", "level": "note", "message": {"text": "Very large file: src/features/work/MeetingNotes.tsx (1554 lines)"}, "properties": {"repobilityId": "663940fbfd5ab11f", "scanner": "scanner-primary", "fingerprint": "55af21d9179d406d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "8cb769c965d42053", "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": "bb7e4cc0aede4257", "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": "b6a8a7903ebc8d35", "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": "6280a5adc0aec3f6", "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": "0114759270448ed7", "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": "bc1266906bcc6fed", "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": "2c3f057eb7fa3987", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d9f75412a3437d19", "level": "none", "message": {"text": "Commented-code block (7 lines) in playwright.config.ts:3"}, "properties": {"repobilityId": "facd9c5735a5c3dc", "scanner": "scanner-primary", "fingerprint": "d9f75412a3437d19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18ec085236dfaa19", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/art-manifest.mjs:1"}, "properties": {"repobilityId": "19abb5f2b2587f9f", "scanner": "scanner-primary", "fingerprint": "18ec085236dfaa19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de8e1fc2debf66c7", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/verify-docaligner.mjs:1"}, "properties": {"repobilityId": "2b2e612332b9e433", "scanner": "scanner-primary", "fingerprint": "de8e1fc2debf66c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c83dfe94b1875d1", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/gen-personas.mjs:1"}, "properties": {"repobilityId": "50d51035ee9b27df", "scanner": "scanner-primary", "fingerprint": "2c83dfe94b1875d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64de6db25f5548cb", "level": "none", "message": {"text": "Commented-code block (9 lines) in scripts/generate-art.mjs:2"}, "properties": {"repobilityId": "5833f296222366e2", "scanner": "scanner-primary", "fingerprint": "64de6db25f5548cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59d8c3ab43a6c935", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/scriptable/ntk-timetable-widget.js:1"}, "properties": {"repobilityId": "6ce0cec2fcb7f6c9", "scanner": "scanner-primary", "fingerprint": "59d8c3ab43a6c935", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a581fd42ab3d122", "level": "note", "message": {"text": "Legacy-named symbol `journal_v2` in scripts/scriptable/ntk-widget.js:135"}, "properties": {"repobilityId": "af026945896440b0", "scanner": "scanner-primary", "fingerprint": "5a581fd42ab3d122", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c7d4b2c292b5cd05", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/scriptable/ntk-widget.js:1"}, "properties": {"repobilityId": "9c5e04fc702429c5", "scanner": "scanner-primary", "fingerprint": "c7d4b2c292b5cd05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28dd8603373436f9", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/forum/index.ts:1"}, "properties": {"repobilityId": "cb52bd810f9b303c", "scanner": "scanner-primary", "fingerprint": "28dd8603373436f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f915e3cf866dd87e", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/team-billing/index.ts:1"}, "properties": {"repobilityId": "e118244e5d3bc37e", "scanner": "scanner-primary", "fingerprint": "f915e3cf866dd87e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4289e83025d81829", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/stripe-webhook/index.ts:1"}, "properties": {"repobilityId": "2a87b6253792177b", "scanner": "scanner-primary", "fingerprint": "4289e83025d81829", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddba61cdeca43af9", "level": "none", "message": {"text": "Commented-code block (8 lines) in supabase/functions/admin/index.ts:1"}, "properties": {"repobilityId": "dc5c31a393e4e3c7", "scanner": "scanner-primary", "fingerprint": "ddba61cdeca43af9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39206fe6ab4909a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/support-admin/index.ts:1"}, "properties": {"repobilityId": "e626f0dd6d06c1e7", "scanner": "scanner-primary", "fingerprint": "39206fe6ab4909a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a91e738916e28e4", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/stripe-billing/index.ts:1"}, "properties": {"repobilityId": "e0038a7d79518572", "scanner": "scanner-primary", "fingerprint": "1a91e738916e28e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d180926ce00a21f1", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/gemini/index.ts:1"}, "properties": {"repobilityId": "00fb4da48ad68e58", "scanner": "scanner-primary", "fingerprint": "d180926ce00a21f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e4b256315d287a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/support/index.ts:1"}, "properties": {"repobilityId": "0694995fd8b48655", "scanner": "scanner-primary", "fingerprint": "1e4b256315d287a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-912c138fdf6de667", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/calendar-feed/index.ts:6"}, "properties": {"repobilityId": "52e9a2ece020f399", "scanner": "scanner-primary", "fingerprint": "912c138fdf6de667", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b92271d697a2439a", "level": "none", "message": {"text": "Commented-code block (9 lines) in supabase/functions/_shared/email.ts:1"}, "properties": {"repobilityId": "83c683dda1e0f4d5", "scanner": "scanner-primary", "fingerprint": "b92271d697a2439a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-544257c83c35e65c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabase/functions/_shared/email.ts:35"}, "properties": {"repobilityId": "42ae9e48174ac489", "scanner": "scanner-primary", "fingerprint": "544257c83c35e65c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dd8cc1fddb002012", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/i18n/index.ts:5"}, "properties": {"repobilityId": "93d07bab18020425", "scanner": "scanner-primary", "fingerprint": "dd8cc1fddb002012", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60714a2d9f13ebb6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/i18n/appEn.ts:3"}, "properties": {"repobilityId": "de2c2d110e26e623", "scanner": "scanner-primary", "fingerprint": "60714a2d9f13ebb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddd1fdc9adb76430", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/ui/index.tsx:20"}, "properties": {"repobilityId": "259ec00a8ca48a84", "scanner": "scanner-primary", "fingerprint": "ddd1fdc9adb76430", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f89a9ca4e0cab43f", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/PwaUpdater.tsx:5"}, "properties": {"repobilityId": "bfc3731a518bb805", "scanner": "scanner-primary", "fingerprint": "f89a9ca4e0cab43f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cc15a9f4a58cd12", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/BottomNav.tsx:15"}, "properties": {"repobilityId": "13b2bf894310ed3e", "scanner": "scanner-primary", "fingerprint": "6cc15a9f4a58cd12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-026559873a704f19", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/SupportButton.tsx:15"}, "properties": {"repobilityId": "0d3748ed0dca10b1", "scanner": "scanner-primary", "fingerprint": "026559873a704f19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a792ec56b09a2037", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/ErrorBoundary.tsx:4"}, "properties": {"repobilityId": "4b7e2f58b0cbc996", "scanner": "scanner-primary", "fingerprint": "a792ec56b09a2037", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1b676c240574b80", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/CookieConsent.tsx:13"}, "properties": {"repobilityId": "8fd328f0ef8f073b", "scanner": "scanner-primary", "fingerprint": "e1b676c240574b80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-deb845c9b9d8479b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/OnboardingModal.tsx:15"}, "properties": {"repobilityId": "703ef592c7dba8e0", "scanner": "scanner-primary", "fingerprint": "deb845c9b9d8479b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-def1698806cd5d91", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/Illustration.tsx:3"}, "properties": {"repobilityId": "c41e48fd4f27bc5d", "scanner": "scanner-primary", "fingerprint": "def1698806cd5d91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e3772c5a99a6a8b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/PlanBadge.tsx:5"}, "properties": {"repobilityId": "2f27bcb1464058c7", "scanner": "scanner-primary", "fingerprint": "6e3772c5a99a6a8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-958043f219aec7ee", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/commandPalette/util.ts:4"}, "properties": {"repobilityId": "1d7c56dc30be60c5", "scanner": "scanner-primary", "fingerprint": "958043f219aec7ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab707a57a72dffda", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/components/commandPalette/util.test.ts:9"}, "properties": {"repobilityId": "d23c25fec7382e6e", "scanner": "scanner-primary", "fingerprint": "ab707a57a72dffda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd811c780da68435", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/sidebar/pins.ts:3"}, "properties": {"repobilityId": "5e0365f673a197f3", "scanner": "scanner-primary", "fingerprint": "dd811c780da68435", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86cf371bc7d50f14", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/modes/modes.ts:1"}, "properties": {"repobilityId": "8cfbbab56ba119cf", "scanner": "scanner-primary", "fingerprint": "86cf371bc7d50f14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d1c135355b1f9de", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/support.ts:3"}, "properties": {"repobilityId": "f47ca8a4a92bdf04", "scanner": "scanner-primary", "fingerprint": "2d1c135355b1f9de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5973555b6ba7aeda", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/lib/aiJson.ts:1"}, "properties": {"repobilityId": "df064ed1411290d6", "scanner": "scanner-primary", "fingerprint": "5973555b6ba7aeda", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-958e3ce8006d1d19", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/googleDrive.ts:1"}, "properties": {"repobilityId": "79863c6f68c9c839", "scanner": "scanner-primary", "fingerprint": "958e3ce8006d1d19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db24d07c9bdc50dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/googleDrive.ts:195"}, "properties": {"repobilityId": "3a2a1308ffd46679", "scanner": "scanner-primary", "fingerprint": "db24d07c9bdc50dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17e37700ecf857d9", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/observability.ts:1"}, "properties": {"repobilityId": "b6a72f1324596028", "scanner": "scanner-primary", "fingerprint": "17e37700ecf857d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b795c21cce572a59", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/billing.ts:4"}, "properties": {"repobilityId": "67596adbe409ccdb", "scanner": "scanner-primary", "fingerprint": "b795c21cce572a59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02dde44681d0eaa3", "level": "note", "message": {"text": "Legacy-named symbol `onboarded_v1` in src/lib/demoData.ts:42"}, "properties": {"repobilityId": "95ece53a79e0ed35", "scanner": "scanner-primary", "fingerprint": "02dde44681d0eaa3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-206e56c73d4450db", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/demoData.ts:1"}, "properties": {"repobilityId": "90e223110828b4fd", "scanner": "scanner-primary", "fingerprint": "206e56c73d4450db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc2c4c04f68db145", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/team.ts:3"}, "properties": {"repobilityId": "e69bd4bad2bc94bc", "scanner": "scanner-primary", "fingerprint": "cc2c4c04f68db145", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-172ddcb75b3d00e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/team.ts:124"}, "properties": {"repobilityId": "4755386ade691d43", "scanner": "scanner-primary", "fingerprint": "172ddcb75b3d00e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ba8ba3f6d96e617", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/aiJson.test.ts:9"}, "properties": {"repobilityId": "b41922dba366cb0d", "scanner": "scanner-primary", "fingerprint": "0ba8ba3f6d96e617", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6f794e8bb2933bc", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/store.ts:3"}, "properties": {"repobilityId": "bfd9399a32416c06", "scanner": "scanner-primary", "fingerprint": "d6f794e8bb2933bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6e8668d808b11f1", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/profile.ts:3"}, "properties": {"repobilityId": "06df27314c90397c", "scanner": "scanner-primary", "fingerprint": "c6e8668d808b11f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be88a0e68254300b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/personas.ts:1"}, "properties": {"repobilityId": "98a51e6c8a465c7e", "scanner": "scanner-primary", "fingerprint": "be88a0e68254300b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad1a48cf82819df7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/community.ts:16"}, "properties": {"repobilityId": "cce5f5ab0ef634af", "scanner": "scanner-primary", "fingerprint": "ad1a48cf82819df7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2beba855ebea8242", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/supabaseStorage.ts:1"}, "properties": {"repobilityId": "d411caed785648a5", "scanner": "scanner-primary", "fingerprint": "2beba855ebea8242", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c59ce7c0a2d760a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/store.test.ts:12"}, "properties": {"repobilityId": "b0f6795b60be1a66", "scanner": "scanner-primary", "fingerprint": "5c59ce7c0a2d760a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9526949976c5638", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/sync.ts:4"}, "properties": {"repobilityId": "722f63a1b41f75f2", "scanner": "scanner-primary", "fingerprint": "e9526949976c5638", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d0dd1f4f50bff12", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/supabase.ts:3"}, "properties": {"repobilityId": "9b8edd10ec269442", "scanner": "scanner-primary", "fingerprint": "4d0dd1f4f50bff12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84eb565bebcab877", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/srs.test.ts:147"}, "properties": {"repobilityId": "7f66774ee50db48a", "scanner": "scanner-primary", "fingerprint": "84eb565bebcab877", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a9eecddc17db35f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/testPro.ts:1"}, "properties": {"repobilityId": "b5d8c2e6f81a7776", "scanner": "scanner-primary", "fingerprint": "3a9eecddc17db35f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce12e5945ac5c75d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/admin.ts:4"}, "properties": {"repobilityId": "2c248365fe9c59ef", "scanner": "scanner-primary", "fingerprint": "ce12e5945ac5c75d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2aae5ffbf202102", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/devAuth.ts:3"}, "properties": {"repobilityId": "aa67c6976dc6c77b", "scanner": "scanner-primary", "fingerprint": "d2aae5ffbf202102", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea11e55fde4cc454", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/aiClient.ts:3"}, "properties": {"repobilityId": "1c6ed1b49f1fc86a", "scanner": "scanner-primary", "fingerprint": "ea11e55fde4cc454", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-accc0903c8600f02", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/aiClient.ts:67"}, "properties": {"repobilityId": "d17c40bf156721bc", "scanner": "scanner-primary", "fingerprint": "accc0903c8600f02", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-377b65b306abe164", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/announcements.ts:3"}, "properties": {"repobilityId": "ba8c214e7ff306c0", "scanner": "scanner-primary", "fingerprint": "377b65b306abe164", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a308f658abc7e9b6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/resourceThumb.ts:1"}, "properties": {"repobilityId": "6bf78819734eae97", "scanner": "scanner-primary", "fingerprint": "a308f658abc7e9b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab3786f40f168c2f", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/export/pptxPacksGallery6.ts:1"}, "properties": {"repobilityId": "8da80da744bde828", "scanner": "scanner-primary", "fingerprint": "ab3786f40f168c2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3d2466ca9a8b36e", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery5.ts:1"}, "properties": {"repobilityId": "350cbb45baaffe29", "scanner": "scanner-primary", "fingerprint": "f3d2466ca9a8b36e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c736f99f150e6b69", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/export/pptxPacks.ts:1"}, "properties": {"repobilityId": "bb753bf8e8e74731", "scanner": "scanner-primary", "fingerprint": "c736f99f150e6b69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b17245adfe33b510", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery1.ts:1"}, "properties": {"repobilityId": "635e1526a452d8b3", "scanner": "scanner-primary", "fingerprint": "b17245adfe33b510", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cf1db7df8a65e7a", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/export/stock.ts:1"}, "properties": {"repobilityId": "5403c602d28aee44", "scanner": "scanner-primary", "fingerprint": "9cf1db7df8a65e7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f494fead2c7d2c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/export/stock.ts:67"}, "properties": {"repobilityId": "4ea54569ebc2945a", "scanner": "scanner-primary", "fingerprint": "4f494fead2c7d2c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-087a041b08c28003", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/export/pptxGradients.ts:1"}, "properties": {"repobilityId": "717e49ce3eaf74fe", "scanner": "scanner-primary", "fingerprint": "087a041b08c28003", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bab70b393951ef8", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/lib/export/slideTextures.ts:1"}, "properties": {"repobilityId": "025cb9f966187609", "scanner": "scanner-primary", "fingerprint": "1bab70b393951ef8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-042d30a862b79e80", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery4.ts:1"}, "properties": {"repobilityId": "ea22d29ed262d491", "scanner": "scanner-primary", "fingerprint": "042d30a862b79e80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fc6dc89c1cca44b", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery7.ts:1"}, "properties": {"repobilityId": "0d1fc66a57622483", "scanner": "scanner-primary", "fingerprint": "1fc6dc89c1cca44b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8104a088fd3ed070", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/export/slideTitleFont.ts:1"}, "properties": {"repobilityId": "f8c258c0ff9b435b", "scanner": "scanner-primary", "fingerprint": "8104a088fd3ed070", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fbdf56aa6dde1a1f", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/export/pptx.ts:1"}, "properties": {"repobilityId": "a8bf6ad453b4d099", "scanner": "scanner-primary", "fingerprint": "fbdf56aa6dde1a1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e776e279294603f1", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/export/pptxPacksGallery3.ts:1"}, "properties": {"repobilityId": "3c79b4d03d216531", "scanner": "scanner-primary", "fingerprint": "e776e279294603f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b82d6fbce1aa3672", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/export/pptxPacksGallery2.ts:1"}, "properties": {"repobilityId": "bd10f33260cc1c48", "scanner": "scanner-primary", "fingerprint": "b82d6fbce1aa3672", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3e3110852a7d558", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/export/types.ts:1"}, "properties": {"repobilityId": "bf644ff1cd5873a2", "scanner": "scanner-primary", "fingerprint": "b3e3110852a7d558", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92fa53ec7a0d4f14", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/export/pptxText.ts:1"}, "properties": {"repobilityId": "e3e9ecf7e1c964e5", "scanner": "scanner-primary", "fingerprint": "92fa53ec7a0d4f14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7813afd72433cd2e", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/export/pptxLayouts.ts:1"}, "properties": {"repobilityId": "73364f43f928ee87", "scanner": "scanner-primary", "fingerprint": "7813afd72433cd2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e17f7a0703f8811", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/marketing/Pricing.tsx:23"}, "properties": {"repobilityId": "99dc334a3a6b9fa6", "scanner": "scanner-primary", "fingerprint": "8e17f7a0703f8811", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4756b01d29f8b201", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/marketing/Landing.tsx:26"}, "properties": {"repobilityId": "023ff98a1b651fad", "scanner": "scanner-primary", "fingerprint": "4756b01d29f8b201", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b24006782fb65eb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/pages/Admin.tsx:69"}, "properties": {"repobilityId": "cd8b092a024afa18", "scanner": "scanner-primary", "fingerprint": "6b24006782fb65eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e61f2d5eb133d988", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useLocalStorage.ts:3"}, "properties": {"repobilityId": "ce6081577e71ba2c", "scanner": "scanner-primary", "fingerprint": "e61f2d5eb133d988", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b80aebccdd437c09", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/hooks/useSubscription.ts:6"}, "properties": {"repobilityId": "f6d7379892cb3b2a", "scanner": "scanner-primary", "fingerprint": "b80aebccdd437c09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b50f1826b348621a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/hooks/useFeatureFlag.ts:4"}, "properties": {"repobilityId": "a5ff438e4aff1550", "scanner": "scanner-primary", "fingerprint": "b50f1826b348621a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2fd54426830835e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/context/ModeContext.tsx:17"}, "properties": {"repobilityId": "d563360e21daef9d", "scanner": "scanner-primary", "fingerprint": "c2fd54426830835e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c3ebaf0734116cb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/context/AuthContext.tsx:23"}, "properties": {"repobilityId": "5c949488ea770d56", "scanner": "scanner-primary", "fingerprint": "6c3ebaf0734116cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd07f7ad140b8b74", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/context/ConfirmContext.tsx:12"}, "properties": {"repobilityId": "424cf8629b95106e", "scanner": "scanner-primary", "fingerprint": "bd07f7ad140b8b74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de67a4250df68dde", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/featureIcons.tsx:13"}, "properties": {"repobilityId": "90437c31e6941721", "scanner": "scanner-primary", "fingerprint": "de67a4250df68dde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc72074fa3bc15ee", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/types.ts:4"}, "properties": {"repobilityId": "31a9fd78283711ee", "scanner": "scanner-primary", "fingerprint": "dc72074fa3bc15ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84cb20078a51a04d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/settings/appearancePrefs.test.ts:12"}, "properties": {"repobilityId": "e71310d43b0db5b7", "scanner": "scanner-primary", "fingerprint": "84cb20078a51a04d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38a7e0f1868a917e", "level": "note", "message": {"text": "Legacy-named symbol `journal_v2` in src/features/settings/dataOverview.ts:44"}, "properties": {"repobilityId": "490829db3a459d3a", "scanner": "scanner-primary", "fingerprint": "38a7e0f1868a917e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a6fd15a3a06bd44c", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/features/settings/dataOverview.ts:1"}, "properties": {"repobilityId": "f1e3501e7c352f3b", "scanner": "scanner-primary", "fingerprint": "a6fd15a3a06bd44c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aaa7f0d066f359fa", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/features/settings/appearancePrefs.ts:1"}, "properties": {"repobilityId": "f4b58fff7075ec49", "scanner": "scanner-primary", "fingerprint": "aaa7f0d066f359fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f0bcb87d3cab7c2", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/settings/dataOverview.test.ts:9"}, "properties": {"repobilityId": "707785ed4d99f59f", "scanner": "scanner-primary", "fingerprint": "3f0bcb87d3cab7c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0306852051aed84", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/shared/GlobalSearch.tsx:115"}, "properties": {"repobilityId": "d57209aac2951e1b", "scanner": "scanner-primary", "fingerprint": "f0306852051aed84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fabfe986edebcb7", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/features/shared/QuizMode.tsx:13"}, "properties": {"repobilityId": "f23bca0cb900ca48", "scanner": "scanner-primary", "fingerprint": "8fabfe986edebcb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcb187e2fcefde8e", "level": "note", "message": {"text": "Legacy-named symbol `notes_rich_v2` in src/features/shared/AIAssistant.tsx:535"}, "properties": {"repobilityId": "0b740bd4528cdc50", "scanner": "scanner-primary", "fingerprint": "dcb187e2fcefde8e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-597d45c4fceb7fcf", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/features/shared/AIAssistant.tsx:120"}, "properties": {"repobilityId": "37233adbccc34826", "scanner": "scanner-primary", "fingerprint": "597d45c4fceb7fcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93611094d2babff6", "level": "note", "message": {"text": "Legacy-named symbol `notes_rich_v2` in src/features/shared/Inbox.tsx:45"}, "properties": {"repobilityId": "206baff2118456a3", "scanner": "scanner-primary", "fingerprint": "93611094d2babff6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7cdd1457132fe9ac", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/shared/Inbox.tsx:109"}, "properties": {"repobilityId": "5f1b27641940f3fb", "scanner": "scanner-primary", "fingerprint": "7cdd1457132fe9ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe96484be32c2f6e", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/shared/AskData.tsx:35"}, "properties": {"repobilityId": "04e7c8a15fde1395", "scanner": "scanner-primary", "fingerprint": "fe96484be32c2f6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7544592ece9eaaa4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/shared/quiz/SetupView.tsx:53"}, "properties": {"repobilityId": "22bea0031675698e", "scanner": "scanner-primary", "fingerprint": "7544592ece9eaaa4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39333ebed02ecc2d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/shared/quiz/util.ts:4"}, "properties": {"repobilityId": "dd28d47f9312e694", "scanner": "scanner-primary", "fingerprint": "39333ebed02ecc2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0dd5f8099429e3f", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/shared/quiz/streak-and-mistakes.test.ts:10"}, "properties": {"repobilityId": "8428303bdff76121", "scanner": "scanner-primary", "fingerprint": "a0dd5f8099429e3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c8171a0d0a07cb8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/shared/globalSearch/util.ts:177"}, "properties": {"repobilityId": "90118c8cc1c9b20f", "scanner": "scanner-primary", "fingerprint": "7c8171a0d0a07cb8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cb13dafcf849e40", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/shared/globalSearch/util.test.ts:23"}, "properties": {"repobilityId": "0fa9118775fe270b", "scanner": "scanner-primary", "fingerprint": "2cb13dafcf849e40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-424f40c086c5e750", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/shared/quickAdd/QuickAddButton.tsx:3"}, "properties": {"repobilityId": "ca4f83693fed5fcf", "scanner": "scanner-primary", "fingerprint": "424f40c086c5e750", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b58be09c9947078", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/shared/quickAdd/QuickAddModal.tsx:38"}, "properties": {"repobilityId": "4a5205ab61b94c91", "scanner": "scanner-primary", "fingerprint": "0b58be09c9947078", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41c5aba52d8ea3fe", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/features/shared/quickAdd/parse.test.ts:4"}, "properties": {"repobilityId": "88f159d96ac0ed76", "scanner": "scanner-primary", "fingerprint": "41c5aba52d8ea3fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fffb45378ba40cd9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/shared/quickAdd/parse.ts:6"}, "properties": {"repobilityId": "91826deb6c43a82a", "scanner": "scanner-primary", "fingerprint": "fffb45378ba40cd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9181c3bee377b088", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/shared/countdown/grouping.ts:1"}, "properties": {"repobilityId": "5629ec6053f3fdfc", "scanner": "scanner-primary", "fingerprint": "9181c3bee377b088", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-814fe9602efefaf6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/shared/countdown/grouping.test.ts:12"}, "properties": {"repobilityId": "db909d8a038d06d7", "scanner": "scanner-primary", "fingerprint": "814fe9602efefaf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aed0ca070dd7d2d8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/shared/inbox/ai.ts:1"}, "properties": {"repobilityId": "1b31b3fd454163b9", "scanner": "scanner-primary", "fingerprint": "aed0ca070dd7d2d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea852dd310b984d0", "level": "note", "message": {"text": "Legacy-named symbol `inbox_meta_v2` in src/features/shared/inbox/store.ts:12"}, "properties": {"repobilityId": "2dc708d58d146b95", "scanner": "scanner-primary", "fingerprint": "ea852dd310b984d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c8e72386fd0b03e0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/shared/inbox/store.ts:1"}, "properties": {"repobilityId": "128935ab6b5c3b61", "scanner": "scanner-primary", "fingerprint": "c8e72386fd0b03e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1642cf59069b2b25", "level": "note", "message": {"text": "Legacy-named symbol `pinnedOld` in src/features/shared/inbox/util.test.ts:208"}, "properties": {"repobilityId": "4f3c93d1afe47d78", "scanner": "scanner-primary", "fingerprint": "1642cf59069b2b25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5d9f6112c8ab7cf8", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/features/shared/inbox/ai.test.ts:1"}, "properties": {"repobilityId": "6e4587bdcba3b06c", "scanner": "scanner-primary", "fingerprint": "5d9f6112c8ab7cf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62441cb0f9681d32", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/shared/inbox/types.ts:1"}, "properties": {"repobilityId": "543d192bd8f74cd3", "scanner": "scanner-primary", "fingerprint": "62441cb0f9681d32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bea4bd734eb4dae6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/shared/shortcuts/util.ts:1"}, "properties": {"repobilityId": "4df3f2c31d3d6ba2", "scanner": "scanner-primary", "fingerprint": "bea4bd734eb4dae6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04878a07e99e2eb9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/shared/shortcuts/util.test.ts:9"}, "properties": {"repobilityId": "1267c0ed36ee1751", "scanner": "scanner-primary", "fingerprint": "04878a07e99e2eb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee7d1db17baf8f42", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/shared/shortcuts/ShortcutsModal.tsx:10"}, "properties": {"repobilityId": "784d683c7d4e1067", "scanner": "scanner-primary", "fingerprint": "ee7d1db17baf8f42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b89be201ec1a5da", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/shared/aiAssistant/markdown.tsx:7"}, "properties": {"repobilityId": "fcdf4d663a65c914", "scanner": "scanner-primary", "fingerprint": "2b89be201ec1a5da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-628937219ce7c23b", "level": "note", "message": {"text": "Legacy-named symbol `ai_thread_meta_v1` in src/features/shared/aiAssistant/store.ts:9"}, "properties": {"repobilityId": "781c853057a747f5", "scanner": "scanner-primary", "fingerprint": "628937219ce7c23b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2f9eed2b06d2e723", "level": "note", "message": {"text": "Legacy-named symbol `tooOld` in src/features/shared/aiAssistant/util.test.ts:308"}, "properties": {"repobilityId": "6bcccfab4b21d910", "scanner": "scanner-primary", "fingerprint": "2f9eed2b06d2e723", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-31eac928cc2ce80c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/shared/aiAssistant/util.test.ts:188"}, "properties": {"repobilityId": "6467dbed255dc121", "scanner": "scanner-primary", "fingerprint": "31eac928cc2ce80c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a568d8e1804a1ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/shared/aiAssistant/templates.ts:3"}, "properties": {"repobilityId": "baea0578ed192ac8", "scanner": "scanner-primary", "fingerprint": "6a568d8e1804a1ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81d5290f67173aa7", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/shared/aiAssistant/i18n.ts:3"}, "properties": {"repobilityId": "0acbc4bba5776b7a", "scanner": "scanner-primary", "fingerprint": "81d5290f67173aa7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7a48cb196208656", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/shared/aiAssistant/types.ts:4"}, "properties": {"repobilityId": "63d4ad2aa5f843f9", "scanner": "scanner-primary", "fingerprint": "c7a48cb196208656", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-832dceee7a2134d2", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/shared/calendar/CalendarSubscribe.tsx:27"}, "properties": {"repobilityId": "17631b6a70bbb088", "scanner": "scanner-primary", "fingerprint": "832dceee7a2134d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de3dc7c8de53c017", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/shared/calendar/ics.ts:9"}, "properties": {"repobilityId": "2cadffe6791bd26b", "scanner": "scanner-primary", "fingerprint": "de3dc7c8de53c017", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86c47fda7de7f7a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/shared/calendar/IcsExportModal.tsx:10"}, "properties": {"repobilityId": "bf37a7aa2f23f507", "scanner": "scanner-primary", "fingerprint": "86c47fda7de7f7a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e422114e5669f631", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/shared/calendar/calendarFeed.ts:3"}, "properties": {"repobilityId": "f6f9f201b5e8191d", "scanner": "scanner-primary", "fingerprint": "e422114e5669f631", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abeba71b77fa8845", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/shared/calendar/EventEditor.test.ts:5"}, "properties": {"repobilityId": "419723862694bd82", "scanner": "scanner-primary", "fingerprint": "abeba71b77fa8845", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c91d7afd7c231203", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/shared/calendar/EventEditor.tsx:259"}, "properties": {"repobilityId": "83ed150f9b941583", "scanner": "scanner-primary", "fingerprint": "c91d7afd7c231203", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c82342f0dbba6bf", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/learning/LearningDashboard.tsx:73"}, "properties": {"repobilityId": "799a9cf2ebf53c5f", "scanner": "scanner-primary", "fingerprint": "7c82342f0dbba6bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-03d8ced6366740c0", "level": "note", "message": {"text": "Legacy-named symbol `journal_v2` in src/features/learning/Journal.tsx:96"}, "properties": {"repobilityId": "41329e5fc24a5fa8", "scanner": "scanner-primary", "fingerprint": "03d8ced6366740c0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b3213cdf127764dd", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/features/learning/Journal.tsx:86"}, "properties": {"repobilityId": "068342af6ca00db1", "scanner": "scanner-primary", "fingerprint": "b3213cdf127764dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec2002e338ce0ce9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/Flashcards.tsx:66"}, "properties": {"repobilityId": "6182b0e06fad1048", "scanner": "scanner-primary", "fingerprint": "ec2002e338ce0ce9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be08c8acb2da2a57", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/HabitTracker.tsx:55"}, "properties": {"repobilityId": "197ab9c90901cc3e", "scanner": "scanner-primary", "fingerprint": "be08c8acb2da2a57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ff96c7239ec3ff7", "level": "none", "message": {"text": "Commented-code block (18 lines) in src/features/learning/CardGenerator.tsx:91"}, "properties": {"repobilityId": "e710d134ada2cac5", "scanner": "scanner-primary", "fingerprint": "6ff96c7239ec3ff7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93ab51e57d75fb76", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/Fitness.tsx:10"}, "properties": {"repobilityId": "2318626387318f75", "scanner": "scanner-primary", "fingerprint": "93ab51e57d75fb76", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe38d5cafe946614", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/ReadingList.tsx:936"}, "properties": {"repobilityId": "eda4e5b020886187", "scanner": "scanner-primary", "fingerprint": "fe38d5cafe946614", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04cba704b481b472", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/learning/NotesWidget.tsx:91"}, "properties": {"repobilityId": "3f010e749bb41b74", "scanner": "scanner-primary", "fingerprint": "04cba704b481b472", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3266002fa27e5588", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/learning/reading/extra.test.ts:12"}, "properties": {"repobilityId": "3f2902bf1ab8c635", "scanner": "scanner-primary", "fingerprint": "3266002fa27e5588", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1213d3facdeb1a4c", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/reading/readingPace.test.ts:5"}, "properties": {"repobilityId": "54cf799838206ad8", "scanner": "scanner-primary", "fingerprint": "1213d3facdeb1a4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b48b46e306424fc7", "level": "note", "message": {"text": "Legacy-named symbol `reading_books_v2` in src/features/learning/reading/demo.ts:26"}, "properties": {"repobilityId": "57ac5da0a4ddc265", "scanner": "scanner-primary", "fingerprint": "b48b46e306424fc7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-37cfa12e7701afb5", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/reading/demo.ts:5"}, "properties": {"repobilityId": "75c8ba01ef2084aa", "scanner": "scanner-primary", "fingerprint": "37cfa12e7701afb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e874162f474803c8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/reading/Charts.tsx:6"}, "properties": {"repobilityId": "d4ec32147deda46f", "scanner": "scanner-primary", "fingerprint": "e874162f474803c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e958770f03df6d2e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/reading/challenge.test.ts:5"}, "properties": {"repobilityId": "14b90b0eb2762dfa", "scanner": "scanner-primary", "fingerprint": "e958770f03df6d2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-922212688d5ee493", "level": "note", "message": {"text": "Legacy-named symbol `reading_books_v2` in src/features/learning/reading/types.ts:67"}, "properties": {"repobilityId": "6d9966a86fa8979c", "scanner": "scanner-primary", "fingerprint": "922212688d5ee493", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-64f1195fc1e1b146", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/reading/types.ts:4"}, "properties": {"repobilityId": "38f5b0bccc04bfd4", "scanner": "scanner-primary", "fingerprint": "64f1195fc1e1b146", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5581128236338f83", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/goals/util.time.test.ts:12"}, "properties": {"repobilityId": "ec4ce0a0174dc1dd", "scanner": "scanner-primary", "fingerprint": "5581128236338f83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d60f9c4e3e9a5513", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/goals/demo.test.ts:9"}, "properties": {"repobilityId": "1c657ca69da00fa4", "scanner": "scanner-primary", "fingerprint": "d60f9c4e3e9a5513", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50a30c98fc9dd728", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/goals/demo.ts:1"}, "properties": {"repobilityId": "92d991cec9d8d6a7", "scanner": "scanner-primary", "fingerprint": "50a30c98fc9dd728", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f3b9cfa6141be17", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/learning/goals/Charts.tsx:1"}, "properties": {"repobilityId": "014882bb45d1cbdf", "scanner": "scanner-primary", "fingerprint": "3f3b9cfa6141be17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07cc303f0a9b7bf7", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/goals/types.ts:1"}, "properties": {"repobilityId": "415b22cebc8da016", "scanner": "scanner-primary", "fingerprint": "07cc303f0a9b7bf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e59750aff3dbba35", "level": "note", "message": {"text": "Legacy-named symbol `habits_v2` in src/features/learning/habits/migrate.test.ts:209"}, "properties": {"repobilityId": "1550488cdb49d2f6", "scanner": "scanner-primary", "fingerprint": "e59750aff3dbba35", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b22b738947cedfb0", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/learning/habits/migrate.test.ts:1"}, "properties": {"repobilityId": "57949769d957dffb", "scanner": "scanner-primary", "fingerprint": "b22b738947cedfb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3872a06790d55b4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/habits/util.ts:75"}, "properties": {"repobilityId": "15f1f0798d3bf397", "scanner": "scanner-primary", "fingerprint": "d3872a06790d55b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-261eb6a3967839e9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/habits/HabitRow.tsx:13"}, "properties": {"repobilityId": "54f7dc5c42c61192", "scanner": "scanner-primary", "fingerprint": "261eb6a3967839e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80bb5d7c6561d600", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/habits/StatsView.tsx:19"}, "properties": {"repobilityId": "858a242e2b98dfd2", "scanner": "scanner-primary", "fingerprint": "80bb5d7c6561d600", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48f29d8f30f1d74d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/habits/stats.test.ts:13"}, "properties": {"repobilityId": "d474c910d54efa6d", "scanner": "scanner-primary", "fingerprint": "48f29d8f30f1d74d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b80ce091ce100e10", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/habits/HabitDetail.tsx:36"}, "properties": {"repobilityId": "35f81fb3365c3831", "scanner": "scanner-primary", "fingerprint": "b80ce091ce100e10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ef053c89a299e04", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/habits/demo.ts:5"}, "properties": {"repobilityId": "819f457e4794b535", "scanner": "scanner-primary", "fingerprint": "6ef053c89a299e04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abd307a58d451f43", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/habits/HabitEditor.tsx:36"}, "properties": {"repobilityId": "dee20daaf2cedaf1", "scanner": "scanner-primary", "fingerprint": "abd307a58d451f43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-976b93a4451342e0", "level": "note", "message": {"text": "Legacy-named symbol `habits_v2` in src/features/learning/habits/types.ts:218"}, "properties": {"repobilityId": "18a7f7f4544072a1", "scanner": "scanner-primary", "fingerprint": "976b93a4451342e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4f1075176353ed1a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/habits/types.ts:5"}, "properties": {"repobilityId": "4361a6e6300b9fae", "scanner": "scanner-primary", "fingerprint": "4f1075176353ed1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f5893cab97eead8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/journal/util.ts:3"}, "properties": {"repobilityId": "8625d199e2f23e84", "scanner": "scanner-primary", "fingerprint": "5f5893cab97eead8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-512ce91cb9f8b49d", "level": "note", "message": {"text": "Legacy-named symbol `journal_v2` in src/features/learning/journal/store.ts:7"}, "properties": {"repobilityId": "fddf18f0da13fd41", "scanner": "scanner-primary", "fingerprint": "512ce91cb9f8b49d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-96193755a55b5502", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/learning/journal/store.ts:4"}, "properties": {"repobilityId": "09ef71f6bcae1919", "scanner": "scanner-primary", "fingerprint": "96193755a55b5502", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f928aa481690eb93", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/journal/stats.test.ts:11"}, "properties": {"repobilityId": "fdf44a887a0e4e12", "scanner": "scanner-primary", "fingerprint": "f928aa481690eb93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b0a3db3aa4ce4af", "level": "note", "message": {"text": "Legacy-named symbol `journal_v2` in src/features/learning/journal/demo.ts:11"}, "properties": {"repobilityId": "998323aeb0f2a580", "scanner": "scanner-primary", "fingerprint": "5b0a3db3aa4ce4af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-614bbf8d17fde102", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/journal/demo.ts:4"}, "properties": {"repobilityId": "c54c9f7c12b5fe09", "scanner": "scanner-primary", "fingerprint": "614bbf8d17fde102", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1e5cf550f1c40db", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/journal/review.test.ts:5"}, "properties": {"repobilityId": "891b5852c105f33d", "scanner": "scanner-primary", "fingerprint": "c1e5cf550f1c40db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fbf92ba5faa0523", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/learning/journal/edge.test.ts:5"}, "properties": {"repobilityId": "8a9870ac13e77ddf", "scanner": "scanner-primary", "fingerprint": "5fbf92ba5faa0523", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6470078d353554eb", "level": "note", "message": {"text": "Legacy-named symbol `health_logs_v1` in src/features/learning/health/store.ts:6"}, "properties": {"repobilityId": "2bc98d98bb0d530c", "scanner": "scanner-primary", "fingerprint": "6470078d353554eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ae5ab24368806450", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/health/demo.test.ts:8"}, "properties": {"repobilityId": "5ab87056dd06094e", "scanner": "scanner-primary", "fingerprint": "ae5ab24368806450", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f3854673f2d781d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/health/demo.ts:7"}, "properties": {"repobilityId": "85a597568e76ec4c", "scanner": "scanner-primary", "fingerprint": "4f3854673f2d781d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0676af9a2acf5933", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/health/types.ts:4"}, "properties": {"repobilityId": "782af25706dde5a2", "scanner": "scanner-primary", "fingerprint": "0676af9a2acf5933", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9411b1b07c0af268", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/dashboard/util.kpis.test.ts:1"}, "properties": {"repobilityId": "c1f564a201c12a4c", "scanner": "scanner-primary", "fingerprint": "9411b1b07c0af268", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33656c95437f4233", "level": "note", "message": {"text": "Legacy-named symbol `learning_dashboard_prefs_v1` in src/features/learning/dashboard/util.ts:528"}, "properties": {"repobilityId": "8e327ca89d72361b", "scanner": "scanner-primary", "fingerprint": "33656c95437f4233", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-682336e74e234cab", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/dashboard/util.ts:1"}, "properties": {"repobilityId": "b5d3634d6e43504f", "scanner": "scanner-primary", "fingerprint": "682336e74e234cab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7118a0aa78bb158", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/dashboard/util.test.ts:177"}, "properties": {"repobilityId": "3318ecf611222316", "scanner": "scanner-primary", "fingerprint": "a7118a0aa78bb158", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6eece2838e0c01cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/dashboard/BentoOverview.tsx:9"}, "properties": {"repobilityId": "03026adb85908943", "scanner": "scanner-primary", "fingerprint": "6eece2838e0c01cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b49c062b515d843", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/cardgen/prompts.test.ts:5"}, "properties": {"repobilityId": "d34fb5018a1c8f7d", "scanner": "scanner-primary", "fingerprint": "7b49c062b515d843", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8909ee0c7c51b92d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/cardgen/normFront.test.ts:4"}, "properties": {"repobilityId": "942b5b5270d885ea", "scanner": "scanner-primary", "fingerprint": "8909ee0c7c51b92d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a77bbdd486a4a30", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/cardgen/prompts.ts:16"}, "properties": {"repobilityId": "627bfe3abce950d9", "scanner": "scanner-primary", "fingerprint": "8a77bbdd486a4a30", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9fbecf467a9455db", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/features/learning/cardgen/swapAndDedup.test.ts:5"}, "properties": {"repobilityId": "5c2c083ddfd52155", "scanner": "scanner-primary", "fingerprint": "9fbecf467a9455db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53bd70b1ddc9b257", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/cardgen/store.ts:4"}, "properties": {"repobilityId": "5011855cb8c15ee1", "scanner": "scanner-primary", "fingerprint": "53bd70b1ddc9b257", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-275310b3f6bc17f9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/cardgen/store.test.ts:5"}, "properties": {"repobilityId": "74da22478ef55e8f", "scanner": "scanner-primary", "fingerprint": "275310b3f6bc17f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77840d7c4272f852", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/cardgen/Charts.tsx:6"}, "properties": {"repobilityId": "6834de65d0685d7f", "scanner": "scanner-primary", "fingerprint": "77840d7c4272f852", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-193d8ef3046d94f0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/cardgen/dupFlag.test.ts:5"}, "properties": {"repobilityId": "e15f6bff05d55109", "scanner": "scanner-primary", "fingerprint": "193d8ef3046d94f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47205ee57a7ef771", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/cardgen/types.ts:4"}, "properties": {"repobilityId": "52bfc04e6e86f468", "scanner": "scanner-primary", "fingerprint": "47205ee57a7ef771", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbfe2319179c5565", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/common.ts:1"}, "properties": {"repobilityId": "b4c304ad310e0aef", "scanner": "scanner-primary", "fingerprint": "dbfe2319179c5565", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dab003ddc1355742", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/library/MuscleMap.tsx:1"}, "properties": {"repobilityId": "f516f1b1060a71ed", "scanner": "scanner-primary", "fingerprint": "dab003ddc1355742", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c72c082a59ccc9c7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/library/util.ts:1"}, "properties": {"repobilityId": "c133bf757693fc28", "scanner": "scanner-primary", "fingerprint": "c72c082a59ccc9c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb8b98540e48fa1e", "level": "note", "message": {"text": "Legacy-named symbol `fitness_library_favs_v1` in src/features/learning/fitness/library/LibraryView.tsx:46"}, "properties": {"repobilityId": "7703aaa6692f1fcd", "scanner": "scanner-primary", "fingerprint": "fb8b98540e48fa1e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-10d29d7b5931db5d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/library/data.ts:1"}, "properties": {"repobilityId": "69ab20fa2f93f1e8", "scanner": "scanner-primary", "fingerprint": "10d29d7b5931db5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cce172ba76ae47d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/coach/PlanGen.tsx:29"}, "properties": {"repobilityId": "076b9fdf60f8b519", "scanner": "scanner-primary", "fingerprint": "cce172ba76ae47d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-69a189022e685f79", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/coach/FormQA.tsx:14"}, "properties": {"repobilityId": "d6789843830d0eb6", "scanner": "scanner-primary", "fingerprint": "69a189022e685f79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1fc0157479f917e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/coach/Assess.tsx:16"}, "properties": {"repobilityId": "40ef92926272f6ca", "scanner": "scanner-primary", "fingerprint": "f1fc0157479f917e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce363ddfe18398a2", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/learning/fitness/coach/CoachView.tsx:10"}, "properties": {"repobilityId": "cf7b137cb21fd584", "scanner": "scanner-primary", "fingerprint": "ce363ddfe18398a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-57c18b0d8229c01e", "level": "note", "message": {"text": "Legacy-named symbol `fitness_coach_plans_v1` in src/features/learning/fitness/coach/store.ts:43"}, "properties": {"repobilityId": "c42e1aeca36b1689", "scanner": "scanner-primary", "fingerprint": "57c18b0d8229c01e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-476c330ceb984af6", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/coach/store.ts:3"}, "properties": {"repobilityId": "d406dbb3392cb2eb", "scanner": "scanner-primary", "fingerprint": "476c330ceb984af6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21f0e119b01cbc8b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/BodyView.tsx:55"}, "properties": {"repobilityId": "f4a2c7908f212349", "scanner": "scanner-primary", "fingerprint": "21f0e119b01cbc8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e1db12f59935192", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/util.ts:4"}, "properties": {"repobilityId": "049a63c80fa66a24", "scanner": "scanner-primary", "fingerprint": "1e1db12f59935192", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c5a84c0db3b1884", "level": "note", "message": {"text": "Legacy-named symbol `fitness_body_entries_v1` in src/features/learning/fitness/body/store.ts:9"}, "properties": {"repobilityId": "f3e970c5faf09c63", "scanner": "scanner-primary", "fingerprint": "4c5a84c0db3b1884", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a8c2a41b471017f8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/store.ts:5"}, "properties": {"repobilityId": "09aefdaf30470fab", "scanner": "scanner-primary", "fingerprint": "a8c2a41b471017f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2c742fabde44f8c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/demo.test.ts:8"}, "properties": {"repobilityId": "79ea097fa89a34d2", "scanner": "scanner-primary", "fingerprint": "b2c742fabde44f8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8acae144947b6ede", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/body/demo.ts:7"}, "properties": {"repobilityId": "0ed23af1c783c2d9", "scanner": "scanner-primary", "fingerprint": "8acae144947b6ede", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24b5dcc43f82f426", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/body/Charts.tsx:6"}, "properties": {"repobilityId": "133781f351fbf930", "scanner": "scanner-primary", "fingerprint": "24b5dcc43f82f426", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5dad020331cf8f89", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/body/types.ts:3"}, "properties": {"repobilityId": "5c7a6f454a3fc414", "scanner": "scanner-primary", "fingerprint": "5dad020331cf8f89", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c53d06116d1c91c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/nutrition/util.ts:10"}, "properties": {"repobilityId": "33d422df0bb0aae0", "scanner": "scanner-primary", "fingerprint": "7c53d06116d1c91c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edd063602dfdedfb", "level": "note", "message": {"text": "Legacy-named symbol `fitness_nutrition_v1` in src/features/learning/fitness/nutrition/store.ts:9"}, "properties": {"repobilityId": "abadf2fe921a7198", "scanner": "scanner-primary", "fingerprint": "edd063602dfdedfb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e9d887da8cdb0467", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/nutrition/store.ts:4"}, "properties": {"repobilityId": "e312e1429d8fbd8f", "scanner": "scanner-primary", "fingerprint": "e9d887da8cdb0467", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-614c18eae0698d8b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/nutrition/demo.test.ts:8"}, "properties": {"repobilityId": "54579b3b1383d9ed", "scanner": "scanner-primary", "fingerprint": "614c18eae0698d8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4805a72baff723b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/nutrition/util.test.ts:455"}, "properties": {"repobilityId": "3c0cee5f0844b00f", "scanner": "scanner-primary", "fingerprint": "4805a72baff723b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-048d2d7e8a444b06", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/nutrition/demo.ts:6"}, "properties": {"repobilityId": "bf22f85e08744f60", "scanner": "scanner-primary", "fingerprint": "048d2d7e8a444b06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d786693dd34670de", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/nutrition/types.ts:3"}, "properties": {"repobilityId": "ad472089ed3812ce", "scanner": "scanner-primary", "fingerprint": "d786693dd34670de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84ea860ce05abbbb", "level": "none", "message": {"text": "Commented-code block (16 lines) in src/features/learning/fitness/nutrition/NutritionView.tsx:85"}, "properties": {"repobilityId": "45119338e8fc99aa", "scanner": "scanner-primary", "fingerprint": "84ea860ce05abbbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3ebf642596fc977", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/training/util.ts:4"}, "properties": {"repobilityId": "663847225c94bbda", "scanner": "scanner-primary", "fingerprint": "f3ebf642596fc977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9e65f6fe64c8ba6", "level": "note", "message": {"text": "Legacy-named symbol `fitness_training_v1` in src/features/learning/fitness/training/store.ts:12"}, "properties": {"repobilityId": "217c51e9ba15b691", "scanner": "scanner-primary", "fingerprint": "d9e65f6fe64c8ba6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-beecbe62ec3bd539", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/store.ts:4"}, "properties": {"repobilityId": "2ef6c03a721558c6", "scanner": "scanner-primary", "fingerprint": "beecbe62ec3bd539", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a1b2b3bd80e0f7d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/fitness/training/demo.test.ts:6"}, "properties": {"repobilityId": "9d14f601ad3f3c45", "scanner": "scanner-primary", "fingerprint": "9a1b2b3bd80e0f7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1eea22c643544ca6", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/fitness/training/demo.ts:6"}, "properties": {"repobilityId": "b9c9d272ed2d7963", "scanner": "scanner-primary", "fingerprint": "1eea22c643544ca6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-768e5a76cc58e374", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/Charts.test.ts:4"}, "properties": {"repobilityId": "934c0f5236141990", "scanner": "scanner-primary", "fingerprint": "768e5a76cc58e374", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-131430cdb4712cb4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/Charts.tsx:5"}, "properties": {"repobilityId": "6e932d7d118b6c5a", "scanner": "scanner-primary", "fingerprint": "131430cdb4712cb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-963f048354ebb466", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/types.ts:3"}, "properties": {"repobilityId": "872257497f00974b", "scanner": "scanner-primary", "fingerprint": "963f048354ebb466", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a50a9b95565cb0c0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/fitness/training/TrainingView.tsx:580"}, "properties": {"repobilityId": "6b2fe07d0ae36a58", "scanner": "scanner-primary", "fingerprint": "a50a9b95565cb0c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2874bd1b17df59c", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/notes/relativeTime.test.ts:4"}, "properties": {"repobilityId": "6ca5a2b013cc50d7", "scanner": "scanner-primary", "fingerprint": "a2874bd1b17df59c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-345a2df1e38e39c2", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/notes/computeStats.test.ts:5"}, "properties": {"repobilityId": "ed322a5a37e75de3", "scanner": "scanner-primary", "fingerprint": "345a2df1e38e39c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d03c4d845da81eb", "level": "note", "message": {"text": "Legacy-named symbol `notes_rich_v2` in src/features/learning/notes/inboxTriage.regression.test.ts:8"}, "properties": {"repobilityId": "f1719e92c4544ebb", "scanner": "scanner-primary", "fingerprint": "6d03c4d845da81eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7ce56989bdb2b9e3", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/features/learning/notes/inboxTriage.regression.test.ts:4"}, "properties": {"repobilityId": "e1d12b58e7c9b978", "scanner": "scanner-primary", "fingerprint": "7ce56989bdb2b9e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f152ef1963009948", "level": "note", "message": {"text": "Legacy-named symbol `notes_notebooks_v2` in src/features/learning/notes/store.ts:70"}, "properties": {"repobilityId": "a2194456fef4759c", "scanner": "scanner-primary", "fingerprint": "f152ef1963009948", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-46964d6f993c8645", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/notes/store.ts:3"}, "properties": {"repobilityId": "6fe9d3774c9f9ea6", "scanner": "scanner-primary", "fingerprint": "46964d6f993c8645", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34094e800505714d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/notes/demo.ts:4"}, "properties": {"repobilityId": "33db202076dc1bef", "scanner": "scanner-primary", "fingerprint": "34094e800505714d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c36c865608f71c54", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/notes/templates.ts:1"}, "properties": {"repobilityId": "1bf9682bc7f51984", "scanner": "scanner-primary", "fingerprint": "c36c865608f71c54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc28a2d62c3f0584", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/notes/Charts.tsx:5"}, "properties": {"repobilityId": "5825e819d9b42e6f", "scanner": "scanner-primary", "fingerprint": "cc28a2d62c3f0584", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c5edd975ffc88d8", "level": "note", "message": {"text": "Legacy-named symbol `dueOld` in src/features/learning/flashcards/srs.coverage.test.ts:115"}, "properties": {"repobilityId": "061208231c54d7ec", "scanner": "scanner-primary", "fingerprint": "3c5edd975ffc88d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cbf093c3ad5a6597", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/learning/flashcards/srs.coverage.test.ts:20"}, "properties": {"repobilityId": "252ec84ceecbe2fd", "scanner": "scanner-primary", "fingerprint": "cbf093c3ad5a6597", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d4c1948664855e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/flashcards/srs.ts:12"}, "properties": {"repobilityId": "e3238204d13d78fb", "scanner": "scanner-primary", "fingerprint": "9d4c1948664855e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b615fc215688a5dd", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/learning/flashcards/store.ts:4"}, "properties": {"repobilityId": "a904dc25fdccff12", "scanner": "scanner-primary", "fingerprint": "b615fc215688a5dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15828b90d8862dca", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/learning/flashcards/ReviewScreen.tsx:37"}, "properties": {"repobilityId": "ebaf10f906ec74ba", "scanner": "scanner-primary", "fingerprint": "15828b90d8862dca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89c715eb4c78d223", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/learning/flashcards/store.test.ts:4"}, "properties": {"repobilityId": "0a14330399b27d58", "scanner": "scanner-primary", "fingerprint": "89c715eb4c78d223", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b048cbdecd612d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/learning/flashcards/ImportExport.tsx:11"}, "properties": {"repobilityId": "8d6e8d4ceaa737ea", "scanner": "scanner-primary", "fingerprint": "6b048cbdecd612d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13912d32a18aeb06", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/flashcards/BrowseView.tsx:53"}, "properties": {"repobilityId": "7ef86e5b7e17ec40", "scanner": "scanner-primary", "fingerprint": "13912d32a18aeb06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19dd09eff366323f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/learning/flashcards/types.ts:4"}, "properties": {"repobilityId": "b1035c711ff2ce84", "scanner": "scanner-primary", "fingerprint": "19dd09eff366323f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0304ba33673c5ee2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/focus/charts.tsx:5"}, "properties": {"repobilityId": "19223131770b03e5", "scanner": "scanner-primary", "fingerprint": "0304ba33673c5ee2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88abc967b6155662", "level": "note", "message": {"text": "Legacy-named symbol `focus_settings_v1` in src/features/learning/focus/store.ts:11"}, "properties": {"repobilityId": "9b9e20e7d2cdace3", "scanner": "scanner-primary", "fingerprint": "88abc967b6155662", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fd0380b6ecb2b660", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/learning/focus/store.test.ts:1"}, "properties": {"repobilityId": "0ed485cd38ee5d65", "scanner": "scanner-primary", "fingerprint": "fd0380b6ecb2b660", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b5aeb7be57c63e3", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/learning/focus/types.ts:3"}, "properties": {"repobilityId": "620c9eef7f282495", "scanner": "scanner-primary", "fingerprint": "6b5aeb7be57c63e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9762c021ca60ef00", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/onboarding/ProfileSetupModal.tsx:21"}, "properties": {"repobilityId": "b767019b11d94101", "scanner": "scanner-primary", "fingerprint": "9762c021ca60ef00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01fe854e7454635d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/onboarding/ProfileGate.tsx:7"}, "properties": {"repobilityId": "0a9b8d433051e463", "scanner": "scanner-primary", "fingerprint": "01fe854e7454635d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d445697ec52cbbde", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/onboarding/logic.ts:1"}, "properties": {"repobilityId": "efa25eed3d8fdfb4", "scanner": "scanner-primary", "fingerprint": "d445697ec52cbbde", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da57dd708c8e05d3", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/features/work/trendHeat.ts:1"}, "properties": {"repobilityId": "3747ef05226626d8", "scanner": "scanner-primary", "fingerprint": "da57dd708c8e05d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31b2102f3fb85f43", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/BudgetTracker.tsx:101"}, "properties": {"repobilityId": "ffa25b296490b2ce", "scanner": "scanner-primary", "fingerprint": "31b2102f3fb85f43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da3e213289b4ff12", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/work/MaterialGen.tsx:29"}, "properties": {"repobilityId": "2198aa5dba8fdc99", "scanner": "scanner-primary", "fingerprint": "da3e213289b4ff12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9f5f7f12d7e9fdf", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/LessonPlanner.tsx:84"}, "properties": {"repobilityId": "1e01d90ec7f78181", "scanner": "scanner-primary", "fingerprint": "e9f5f7f12d7e9fdf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d3303525f232a2d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/ResourceLibrary.tsx:88"}, "properties": {"repobilityId": "723ce7ec06088ab2", "scanner": "scanner-primary", "fingerprint": "3d3303525f232a2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a3d54af98083384", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/features/work/ClassesWidget.tsx:109"}, "properties": {"repobilityId": "71c0345ad99ef0aa", "scanner": "scanner-primary", "fingerprint": "7a3d54af98083384", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4a33eaee4a69ef3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/Team.tsx:38"}, "properties": {"repobilityId": "8b8d511322cfed56", "scanner": "scanner-primary", "fingerprint": "d4a33eaee4a69ef3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1b4d1166bc30470", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/features/work/Timetable.tsx:66"}, "properties": {"repobilityId": "e4ab773f850fa862", "scanner": "scanner-primary", "fingerprint": "c1b4d1166bc30470", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e5b154c073a79df", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/Grading.tsx:57"}, "properties": {"repobilityId": "57f54f9d4eb465cc", "scanner": "scanner-primary", "fingerprint": "9e5b154c073a79df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8328e19474fe69af", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/TodoWidget.tsx:80"}, "properties": {"repobilityId": "1fa353f6c00a8f44", "scanner": "scanner-primary", "fingerprint": "8328e19474fe69af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af70fca2a14a1eb9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/trendHeat.test.ts:10"}, "properties": {"repobilityId": "98781d84baf58634", "scanner": "scanner-primary", "fingerprint": "af70fca2a14a1eb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-382d308c0b5002fa", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/ParentComms.tsx:110"}, "properties": {"repobilityId": "7fe2ba91c466c86c", "scanner": "scanner-primary", "fingerprint": "382d308c0b5002fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56a8e7c499f2a518", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/MeetingNotes.tsx:48"}, "properties": {"repobilityId": "4e87698a7fe7ac87", "scanner": "scanner-primary", "fingerprint": "56a8e7c499f2a518", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cc9147d8b66b9a1", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/questionbank/util.ts:3"}, "properties": {"repobilityId": "59ed2a54a5a9929b", "scanner": "scanner-primary", "fingerprint": "0cc9147d8b66b9a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f97c885185098245", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/questionbank/Charts.tsx:12"}, "properties": {"repobilityId": "b556ff53c209bdd5", "scanner": "scanner-primary", "fingerprint": "f97c885185098245", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca44e9c61b995d67", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/features/work/meetingNotes/util.ts:4"}, "properties": {"repobilityId": "e871d985ba3324f5", "scanner": "scanner-primary", "fingerprint": "ca44e9c61b995d67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7f8eea0a605f14e5", "level": "none", "message": {"text": "Commented-code block (14 lines) in src/features/work/meetingNotes/NoteEditor.tsx:42"}, "properties": {"repobilityId": "eca4f31f1c983e54", "scanner": "scanner-primary", "fingerprint": "7f8eea0a605f14e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b8849fb78fcef6b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/lessonPlanner/fmtMin.test.ts:4"}, "properties": {"repobilityId": "e71814b7db12b404", "scanner": "scanner-primary", "fingerprint": "5b8849fb78fcef6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d35cab9bae34276", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/lessonPlanner/lessonAi.ts:4"}, "properties": {"repobilityId": "6a3b103fffd063ed", "scanner": "scanner-primary", "fingerprint": "1d35cab9bae34276", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5d184d222818f46", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/lessonPlanner/util.ts:4"}, "properties": {"repobilityId": "4aedd7df86af8131", "scanner": "scanner-primary", "fingerprint": "f5d184d222818f46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6835e39f1598bef0", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/lessonPlanner/GenerateModal.tsx:20"}, "properties": {"repobilityId": "047f60b134ad8ca8", "scanner": "scanner-primary", "fingerprint": "6835e39f1598bef0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad97d29cf8e408a9", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/lessonPlanner/subjectTemplates.ts:1"}, "properties": {"repobilityId": "708bc2822ca4f297", "scanner": "scanner-primary", "fingerprint": "ad97d29cf8e408a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d998a7d8a425bfb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/lessonPlanner/CoverageChart.tsx:4"}, "properties": {"repobilityId": "39a9b3a74ee41c69", "scanner": "scanner-primary", "fingerprint": "4d998a7d8a425bfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dce2ccd08ae27c65", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/work/parentComms/util.ts:4"}, "properties": {"repobilityId": "8caf91ff41b6d447", "scanner": "scanner-primary", "fingerprint": "dce2ccd08ae27c65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd4797c566f25072", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/parentComms/TemplateManager.tsx:26"}, "properties": {"repobilityId": "9952a06ad138d373", "scanner": "scanner-primary", "fingerprint": "fd4797c566f25072", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58ec1f9bbfec04c0", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/parentComms/CommEditor.tsx:46"}, "properties": {"repobilityId": "4a880ff1b2f7008c", "scanner": "scanner-primary", "fingerprint": "58ec1f9bbfec04c0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f6c4ec314bcc623", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/work/parentComms/reschedule.test.ts:5"}, "properties": {"repobilityId": "0b1d6a8d80770115", "scanner": "scanner-primary", "fingerprint": "6f6c4ec314bcc623", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-568984b4018a85dd", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/work/parentComms/util.contactGaps.test.ts:10"}, "properties": {"repobilityId": "f6f95fdd69ac73dc", "scanner": "scanner-primary", "fingerprint": "568984b4018a85dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d0a606609f274c4", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/parentComms/util.boundaries.test.ts:23"}, "properties": {"repobilityId": "9de0b6d879f7cdaa", "scanner": "scanner-primary", "fingerprint": "6d0a606609f274c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58114cb7c739abed", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/work/parentComms/monthlyTrend.test.ts:5"}, "properties": {"repobilityId": "61017ee2a0618c3b", "scanner": "scanner-primary", "fingerprint": "58114cb7c739abed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81650abfe6541762", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/timetable/WeekGrid.tsx:13"}, "properties": {"repobilityId": "30c3e8b5a1e5a88b", "scanner": "scanner-primary", "fingerprint": "81650abfe6541762", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c6d69afbf45a75a", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/timetable/SlotEditor.tsx:37"}, "properties": {"repobilityId": "292aae93ac263a3b", "scanner": "scanner-primary", "fingerprint": "8c6d69afbf45a75a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25350f00f966b477", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/timetable/util.ts:3"}, "properties": {"repobilityId": "d7a21990e6fa68e6", "scanner": "scanner-primary", "fingerprint": "25350f00f966b477", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a148bfeabddcfd3e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/timetable/PrintView.tsx:12"}, "properties": {"repobilityId": "eea3b9743d702509", "scanner": "scanner-primary", "fingerprint": "a148bfeabddcfd3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9c86830fa44aea0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/timetable/workload-bugs.test.ts:11"}, "properties": {"repobilityId": "566937be76ff5233", "scanner": "scanner-primary", "fingerprint": "e9c86830fa44aea0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aac0e5bcf4ab6969", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/timetable/WorkloadView.tsx:15"}, "properties": {"repobilityId": "56e239f9f830e328", "scanner": "scanner-primary", "fingerprint": "aac0e5bcf4ab6969", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9313c0c6de6219a6", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/shared/csv.ts:1"}, "properties": {"repobilityId": "edbeec4beeb6783b", "scanner": "scanner-primary", "fingerprint": "9313c0c6de6219a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a97cc789bf721e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/rubric/rubricPrompts.ts:3"}, "properties": {"repobilityId": "36073165d4386294", "scanner": "scanner-primary", "fingerprint": "8a97cc789bf721e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af4166e9bd2945f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/budget/scheduling.test.ts:17"}, "properties": {"repobilityId": "5176344d5104d2a6", "scanner": "scanner-primary", "fingerprint": "af4166e9bd2945f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a6ac6e3ea50cddd", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/features/work/budget/util.ts:4"}, "properties": {"repobilityId": "edc42605ae63bb53", "scanner": "scanner-primary", "fingerprint": "9a6ac6e3ea50cddd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36bb22647accaf26", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/budget/Charts.tsx:13"}, "properties": {"repobilityId": "2b6203b67aee23a4", "scanner": "scanner-primary", "fingerprint": "36bb22647accaf26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f91b4107fe53a9a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/dashboard/util.coverage.test.ts:14"}, "properties": {"repobilityId": "51bf1bcb6fc68889", "scanner": "scanner-primary", "fingerprint": "5f91b4107fe53a9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d5dbed48ef13a20", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/dashboard/util.ts:32"}, "properties": {"repobilityId": "de8182d642fc0252", "scanner": "scanner-primary", "fingerprint": "3d5dbed48ef13a20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2eea67d2d9b4f9ee", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/work/dashboard/store.ts:4"}, "properties": {"repobilityId": "382d5708df0a8e52", "scanner": "scanner-primary", "fingerprint": "2eea67d2d9b4f9ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5518bd34262e07d7", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/dashboard/i18n.ts:3"}, "properties": {"repobilityId": "5726c35c1494ca0f", "scanner": "scanner-primary", "fingerprint": "5518bd34262e07d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f280fa67c3009325", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/dashboard/Charts.tsx:5"}, "properties": {"repobilityId": "5f8d41f45299d15e", "scanner": "scanner-primary", "fingerprint": "f280fa67c3009325", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ec324074d2495ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/dashboard/types.ts:1"}, "properties": {"repobilityId": "f0e880984874fdec", "scanner": "scanner-primary", "fingerprint": "1ec324074d2495ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8232994605db3bdf", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/materialGen/QuestionGeneratorModal.tsx:31"}, "properties": {"repobilityId": "b5e7e20b19ada84d", "scanner": "scanner-primary", "fingerprint": "8232994605db3bdf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58b9448c1fb6df29", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/materialGen/WorksheetGenerator.tsx:47"}, "properties": {"repobilityId": "4ee5dd4ed5482395", "scanner": "scanner-primary", "fingerprint": "58b9448c1fb6df29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-692c3107d197e879", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/work/materialGen/PaperGenerator.tsx:47"}, "properties": {"repobilityId": "01ec9ef5eb614ba0", "scanner": "scanner-primary", "fingerprint": "692c3107d197e879", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d07307fc0f39e647", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/materialGen/engine.ts:6"}, "properties": {"repobilityId": "9e75e561af23314b", "scanner": "scanner-primary", "fingerprint": "d07307fc0f39e647", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a0def60fd8bd5626", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/docDigest/digestStore.ts:3"}, "properties": {"repobilityId": "7230a8344af57693", "scanner": "scanner-primary", "fingerprint": "a0def60fd8bd5626", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a466987041c2856d", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/docDigest/extract.ts:5"}, "properties": {"repobilityId": "13bf2a598e898cda", "scanner": "scanner-primary", "fingerprint": "a466987041c2856d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cf0cf952f5ca7ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/classes/StudentProfile.tsx:52"}, "properties": {"repobilityId": "25746d09a40b748b", "scanner": "scanner-primary", "fingerprint": "9cf0cf952f5ca7ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61bd3a209a5f6a4f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/classes/util.ts:294"}, "properties": {"repobilityId": "d7f8935674e25071", "scanner": "scanner-primary", "fingerprint": "61bd3a209a5f6a4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddcac0b0cca98bd3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/classes/util.academics.test.ts:15"}, "properties": {"repobilityId": "82e97e9a7fbb4d12", "scanner": "scanner-primary", "fingerprint": "ddcac0b0cca98bd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-701d22906e196fe4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/classes/SeatingChart.tsx:26"}, "properties": {"repobilityId": "17d234cd2f04f5ec", "scanner": "scanner-primary", "fingerprint": "701d22906e196fe4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bc2ba286a9aba7d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/classes/util.extra.test.ts:16"}, "properties": {"repobilityId": "dfcf55139c0a89da", "scanner": "scanner-primary", "fingerprint": "9bc2ba286a9aba7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c585707e2dc1f9b", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/classes/types.ts:3"}, "properties": {"repobilityId": "b2c9b40cc564f3e9", "scanner": "scanner-primary", "fingerprint": "8c585707e2dc1f9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5c81eec59be6b68", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/community/util.ts:1"}, "properties": {"repobilityId": "145d44f239094987", "scanner": "scanner-primary", "fingerprint": "b5c81eec59be6b68", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-541e7182beeb60de", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/community/demo.ts:3"}, "properties": {"repobilityId": "5b3e8d04606c06ed", "scanner": "scanner-primary", "fingerprint": "541e7182beeb60de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c065573d94b2ab4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/attendance/util.edge.test.ts:21"}, "properties": {"repobilityId": "13d40141ab956479", "scanner": "scanner-primary", "fingerprint": "0c065573d94b2ab4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-316b467cc0b1277b", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/attendance/util.ts:4"}, "properties": {"repobilityId": "6514819bc696fc8a", "scanner": "scanner-primary", "fingerprint": "316b467cc0b1277b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3603d18dd59df546", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/attendance/RegisterGrid.tsx:22"}, "properties": {"repobilityId": "c841db4d23ff182a", "scanner": "scanner-primary", "fingerprint": "3603d18dd59df546", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47689837a54afc8e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/attendance/TrendChart.tsx:7"}, "properties": {"repobilityId": "7660ebbdfd31688c", "scanner": "scanner-primary", "fingerprint": "47689837a54afc8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c18db4269a18e29", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/attendance/util.classify.test.ts:5"}, "properties": {"repobilityId": "948fd54ad3d85973", "scanner": "scanner-primary", "fingerprint": "4c18db4269a18e29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-524c5ad8d7af3fe3", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/attendance/i18n.ts:1"}, "properties": {"repobilityId": "bab99eaf390e1852", "scanner": "scanner-primary", "fingerprint": "524c5ad8d7af3fe3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74a6f52c264f9016", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/attendance/util.summary.test.ts:6"}, "properties": {"repobilityId": "df8c1ca8a1c394d9", "scanner": "scanner-primary", "fingerprint": "74a6f52c264f9016", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4d23d57e8ab9bfc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/resourceLibrary/DetailModal.tsx:57"}, "properties": {"repobilityId": "ec0507ca4214f94f", "scanner": "scanner-primary", "fingerprint": "b4d23d57e8ab9bfc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1951d39d7359781", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/resourceLibrary/util.ts:4"}, "properties": {"repobilityId": "73c6515f8e18944d", "scanner": "scanner-primary", "fingerprint": "f1951d39d7359781", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f48345a1184cce5f", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/resourceLibrary/trends.test.ts:13"}, "properties": {"repobilityId": "4f4d522eb97a1ec6", "scanner": "scanner-primary", "fingerprint": "f48345a1184cce5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f4244f4e31bcc23", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/resourceLibrary/drive/store.ts:3"}, "properties": {"repobilityId": "6e33fae5fef52666", "scanner": "scanner-primary", "fingerprint": "8f4244f4e31bcc23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82427a3e0457b229", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/scan/scanStore.ts:1"}, "properties": {"repobilityId": "a35141b7856e0c60", "scanner": "scanner-primary", "fingerprint": "82427a3e0457b229", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29253b7480dd18c5", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/features/work/scan/lib/mlDetect.ts:1"}, "properties": {"repobilityId": "bd7aed20ffb7e130", "scanner": "scanner-primary", "fingerprint": "29253b7480dd18c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25517d797752e774", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/scan/lib/ocr.ts:4"}, "properties": {"repobilityId": "0572f96b1623ef8d", "scanner": "scanner-primary", "fingerprint": "25517d797752e774", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-029eea4f6209715e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/features/work/scan/lib/buildPdf.ts:19"}, "properties": {"repobilityId": "699e061eef723f5d", "scanner": "scanner-primary", "fingerprint": "029eea4f6209715e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6e19988a08fbe1a", "level": "none", "message": {"text": "Commented-code block (13 lines) in src/features/work/adminDocs/docxAi.ts:1"}, "properties": {"repobilityId": "028903d47bf04b7d", "scanner": "scanner-primary", "fingerprint": "b6e19988a08fbe1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5503ca5efafcde5f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/adminDocs/TemplatePreview.tsx:19"}, "properties": {"repobilityId": "06f0033d4c30c7ad", "scanner": "scanner-primary", "fingerprint": "5503ca5efafcde5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a397502328d3ab81", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/adminDocs/docxTableInject.ts:1"}, "properties": {"repobilityId": "3cb723d11b023221", "scanner": "scanner-primary", "fingerprint": "a397502328d3ab81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afb6e2ac45bfbc0f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/adminDocs/highlight.ts:1"}, "properties": {"repobilityId": "b3b52b58a7c6033f", "scanner": "scanner-primary", "fingerprint": "afb6e2ac45bfbc0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-382fb8786ff8610e", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/adminDocs/adminDocStore.ts:1"}, "properties": {"repobilityId": "5f76a0d33fe1d277", "scanner": "scanner-primary", "fingerprint": "382fb8786ff8610e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1d009505cd7eb1e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/adminDocs/PdfTemplatePreview.tsx:20"}, "properties": {"repobilityId": "10f6fdaf891706eb", "scanner": "scanner-primary", "fingerprint": "e1d009505cd7eb1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2fc923e6203d8d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/adminDocs/pdfPreview.ts:1"}, "properties": {"repobilityId": "a765facdf272ed44", "scanner": "scanner-primary", "fingerprint": "b2fc923e6203d8d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa09b714d277ca8e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/adminDocs/FillForm.tsx:19"}, "properties": {"repobilityId": "a5c3d7e7e2f8223d", "scanner": "scanner-primary", "fingerprint": "fa09b714d277ca8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-180e5dd1cb50617e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/adminDocs/docxEngine.ts:1"}, "properties": {"repobilityId": "b2ede0e504d2f452", "scanner": "scanner-primary", "fingerprint": "180e5dd1cb50617e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25d6700e4e60dd7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/adminDocs/docxTableInject.test.ts:11"}, "properties": {"repobilityId": "a8b8c010edf42bc6", "scanner": "scanner-primary", "fingerprint": "25d6700e4e60dd7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-918931a4ff5d036e", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/adminDocs/pdfEngine.ts:1"}, "properties": {"repobilityId": "b57469ee82f95d89", "scanner": "scanner-primary", "fingerprint": "918931a4ff5d036e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b9877b194447991", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/adminDocs/AdminDocs.tsx:25"}, "properties": {"repobilityId": "6b94145813e2e936", "scanner": "scanner-primary", "fingerprint": "1b9877b194447991", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a1342823d506a15", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/features/work/adminDocs/TemplateUpload.tsx:32"}, "properties": {"repobilityId": "3f79c42f71858ce3", "scanner": "scanner-primary", "fingerprint": "4a1342823d506a15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbaa16cf680fb0a2", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/curriculum/util.edge.test.ts:5"}, "properties": {"repobilityId": "6beeecfc05289f55", "scanner": "scanner-primary", "fingerprint": "dbaa16cf680fb0a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77ad3adcb104ae64", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/curriculum/util.ts:3"}, "properties": {"repobilityId": "7908659d30877750", "scanner": "scanner-primary", "fingerprint": "77ad3adcb104ae64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-547e21a8c363a9e6", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/curriculum/Charts.tsx:4"}, "properties": {"repobilityId": "44153b1f3e441953", "scanner": "scanner-primary", "fingerprint": "547e21a8c363a9e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de0babf6fb7bc6ea", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/topicImport/reconcile.ts:1"}, "properties": {"repobilityId": "f55efba9d21faf20", "scanner": "scanner-primary", "fingerprint": "de0babf6fb7bc6ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8832e5f43f4164b", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/topicImport/applyTopics.ts:42"}, "properties": {"repobilityId": "ed52717d6658ef92", "scanner": "scanner-primary", "fingerprint": "e8832e5f43f4164b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffe4ecf44e406beb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/slides/sourceKey.ts:3"}, "properties": {"repobilityId": "549086ce3346d0b1", "scanner": "scanner-primary", "fingerprint": "ffe4ecf44e406beb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afb99a5ce6410c05", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/slides/manualPages.ts:3"}, "properties": {"repobilityId": "d32a9e30d0baea29", "scanner": "scanner-primary", "fingerprint": "afb99a5ce6410c05", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc5794cd5366dd12", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/slides/editor/convert.ts:9"}, "properties": {"repobilityId": "61c75cddba706551", "scanner": "scanner-primary", "fingerprint": "dc5794cd5366dd12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d645dd68c94517d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/slides/editor/slideAi.ts:5"}, "properties": {"repobilityId": "121bc8fc32fb0e9c", "scanner": "scanner-primary", "fingerprint": "d645dd68c94517d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0b87fa91d3dec1a", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/slides/editor/SlideEditor.tsx:30"}, "properties": {"repobilityId": "8722431ebc7a05e0", "scanner": "scanner-primary", "fingerprint": "b0b87fa91d3dec1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23e476310ddb246c", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/features/work/gradebook/util.edge.test.ts:16"}, "properties": {"repobilityId": "e3afb070f8d41ef6", "scanner": "scanner-primary", "fingerprint": "23e476310ddb246c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcb7010dbecfc90f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/gradebook/util.ts:4"}, "properties": {"repobilityId": "e0dd1d4c3912a522", "scanner": "scanner-primary", "fingerprint": "fcb7010dbecfc90f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddcd9b03fa87976d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/gradebook/StudentReport.tsx:30"}, "properties": {"repobilityId": "4f2b577e3aa830c5", "scanner": "scanner-primary", "fingerprint": "ddcd9b03fa87976d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-972258f22d34c5f5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/gradebook/i18n.ts:3"}, "properties": {"repobilityId": "f52df548f19c7a18", "scanner": "scanner-primary", "fingerprint": "972258f22d34c5f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bea701e288bf9075", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/gradebook/Charts.tsx:17"}, "properties": {"repobilityId": "74a0f065d23b1e61", "scanner": "scanner-primary", "fingerprint": "bea701e288bf9075", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c398bd1ce9f74150", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/grading/markingProfiles.ts:1"}, "properties": {"repobilityId": "5ca18499d35468df", "scanner": "scanner-primary", "fingerprint": "c398bd1ce9f74150", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-609d348031c91bed", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/grading/prompts.ts:1"}, "properties": {"repobilityId": "28fdffde301e366a", "scanner": "scanner-primary", "fingerprint": "609d348031c91bed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b42160b74406540", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/grading/gradingStore.ts:4"}, "properties": {"repobilityId": "7dd994fc5aa13012", "scanner": "scanner-primary", "fingerprint": "5b42160b74406540", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0f355c15bf287be", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/features/work/grading/richSystem.ts:4"}, "properties": {"repobilityId": "8b2a75949f02c87d", "scanner": "scanner-primary", "fingerprint": "e0f355c15bf287be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-58f7289793fd13d8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/grading/structured.ts:4"}, "properties": {"repobilityId": "65493f5d5c2a64f8", "scanner": "scanner-primary", "fingerprint": "58f7289793fd13d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-559d29e7ab9373b8", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/todo/trend-heat.test.ts:5"}, "properties": {"repobilityId": "ea3e4732289424f0", "scanner": "scanner-primary", "fingerprint": "559d29e7ab9373b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed981c4fb6f2a31b", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/features/work/todo/store.ts:4"}, "properties": {"repobilityId": "0bbb91960c0515ad", "scanner": "scanner-primary", "fingerprint": "ed981c4fb6f2a31b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52ffb0a2ce00d1d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/todo/util.test.ts:95"}, "properties": {"repobilityId": "001f26a2a95f9311", "scanner": "scanner-primary", "fingerprint": "52ffb0a2ce00d1d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c218b6be350b0895", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/features/work/todo/TaskEditor.tsx:45"}, "properties": {"repobilityId": "afd4946eba0a1aae", "scanner": "scanner-primary", "fingerprint": "c218b6be350b0895", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f55e57a0a38b5d3a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/features/work/todo/demo.ts:8"}, "properties": {"repobilityId": "3d2a8cf8ff50869d", "scanner": "scanner-primary", "fingerprint": "f55e57a0a38b5d3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3c8febfbbdce9a4", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/features/work/todo/types.ts:3"}, "properties": {"repobilityId": "cda6951fc1d2f8f2", "scanner": "scanner-primary", "fingerprint": "f3c8febfbbdce9a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff51df29eef8ad02", "level": "none", "message": {"text": "Commented-code block (9 lines) in e2e/a11y.spec.ts:4"}, "properties": {"repobilityId": "2a31b6ce47300f1d", "scanner": "scanner-primary", "fingerprint": "ff51df29eef8ad02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0b17c8c07a7421d", "level": "note", "message": {"text": "8 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "17fe720e8247f9df", "scanner": "scanner-primary", "fingerprint": "d0b17c8c07a7421d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-ba619daf3fc6de80", "level": "warning", "message": {"text": "Frontend route `/app/*` has no Link/navigate to it \u2014 src/main.tsx"}, "properties": {"repobilityId": "6ec307eefec20f16", "scanner": "scanner-primary", "fingerprint": "ba619daf3fc6de80", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-80ddf2cea0d32413", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (supabase/functions/_shared/email.ts:35)"}, "properties": {"repobilityId": "2f55b7274596e9a5", "scanner": "scanner-primary", "fingerprint": "80ddf2cea0d32413", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5cbb43242950b916", "level": "note", "message": {"text": "Unused endpoint: USE /dev-ai/gemini"}, "properties": {"repobilityId": "93a300e596b2a7f5", "scanner": "scanner-primary", "fingerprint": "5cbb43242950b916", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}