{"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: tkaykim/modoo_app", "shortDescription": {"text": "Foundry mined unresolved feedback: tkaykim/modoo_app"}, "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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tkaykim/modoo_app#3\nRepo: tkaykim/modoo_app\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 63\nEdges: 104\nNode types: {'pr_file': 47, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_blueprint_gap", "name": "Foundry mined blueprint gap alignment: tkaykim/modoo_app", "shortDescription": {"text": "Foundry mined blueprint gap alignment: tkaykim/modoo_app"}, "fullDescription": {"text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: weak_supervision_needs_review\nRepo: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tkaykim/modoo_app#3\nRepo: tkaykim/modoo_app\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 63\nEdges: 104\nNode types: {'pr_file': 47, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, "}, "properties": {"scanner": "foundry_dataset", "category": "tech_debt", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: tkaykim/modoo_app", "shortDescription": {"text": "Foundry mined bad chains: tkaykim/modoo_app"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\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: tkaykim/modoo_app#3\nRepo: tkaykim/modoo_app\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: 47\nLabels: {'mock_placeholder': 1, 'api_integration_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'api_or_backend': 1, 'ui_or_frontend': 32, 'source_or_other': 14}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d94d714cd701be90\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeh"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "foundry_fake_real_gap", "name": "Foundry mined mock as real or placeholder: tkaykim/modoo_app", "shortDescription": {"text": "Foundry mined mock as real or placeholder: tkaykim/modoo_app"}, "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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tkaykim/modoo_app#3\nRepo: tkaykim/modoo_app\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 63\nEdges: 104\nNode types: {'pr_file': 47, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit'"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "critical", "confidence": 0.82, "cwe": "", "owasp": ""}}, {"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9fcf698e7eda5f15", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:94", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:94"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e26051b9a01f3dd", "name": "TODO/FIXME marker in shipping code \u2014 app/toss/page.tsx:48", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/toss/page.tsx:48"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-976fb7852029c6c5", "name": "`truncate` class without `title=` for hover reveal \u2014 app/cobuy/request/[shareToken]/editor/page.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cobuy/request/[shareToken]/editor/page.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bf154bc6f09f28d", "name": "TODO/FIXME marker in shipping code \u2014 app/api/toss/confirm/route.ts:249", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/toss/confirm/route.ts:249"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee1ea3fe1774f2ad", "name": "Stray `console.log` in TS/JS \u2014 app/api/toss/confirm/route.ts:197", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/toss/confirm/route.ts:197"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1d41ad7aab67cd1", "name": "Stray `console.log` in TS/JS \u2014 app/api/cobuy/create-order/route.ts:284", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cobuy/create-order/route.ts:284"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-264daaa746a18169", "name": "Stray `console.log` in TS/JS \u2014 app/api/cobuy/request/[shareToken]/route.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cobuy/request/[shareToken]/route.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec03e5523d39a16c", "name": "Stray `console.log` in TS/JS \u2014 app/api/checkout/testmode/route.ts:311", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/checkout/testmode/route.ts:311"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-062534af7d9ea433", "name": "Stray `console.log` in TS/JS \u2014 app/components/DesignEditModal.tsx:186", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/components/DesignEditModal.tsx:186"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8510125dfa8dcb0e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/HeroBanner.tsx:60", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/HeroBanner.tsx:60"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d669c9ca26437977", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/ProductSelectionModal.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/ProductSelectionModal.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-dedb2651440eb239", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/BestReviewsSection.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/BestReviewsSection.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b917c4cbe051b7f3", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/DesignChatSection.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/DesignChatSection.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-da499c9c99662049", "name": "Icon-only button without accessible name \u2014 app/components/QuantitySelectorModal.tsx:299", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app/components/QuantitySelectorModal.tsx:299"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-081ef8b782db6176", "name": "Stray `console.log` in TS/JS \u2014 app/components/ShareProductButton.tsx:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/components/ShareProductButton.tsx:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-037f663f1ddd588a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/InquiryBoardSection.tsx:168", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/InquiryBoardSection.tsx:168"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c419a287ba69c16e", "name": "Stray `console.log` in TS/JS \u2014 app/components/cobuy/DesignEditorViewer.tsx:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/components/cobuy/DesignEditorViewer.tsx:106"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a43940cae1ddf2ec", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/cobuy/CoBuyOrganizerView.tsx:1248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/cobuy/CoBuyOrganizerView.tsx:1248"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59d47aac58186432", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/chatbot/ProductCard.tsx:46", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/chatbot/ProductCard.tsx:46"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-66d90aedd699a070", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/TemplateGalleryCard.tsx:51", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/TemplateGalleryCard.tsx:51"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6589ae168d32865e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/GalleryItemCard.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/GalleryItemCard.tsx:58"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49dfe2402c1e19dd", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/ProductTemplatesStrip.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/ProductTemplatesStrip.tsx:64"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af29858dc2c939bb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/FeaturedTemplatesSection.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/FeaturedTemplatesSection.tsx:38"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a2bcda416a15948", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/TemplateCard.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/TemplateCard.tsx:38"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ae57e293979eee8", "name": "Stray `console.log` in TS/JS \u2014 app/components/canvas/Toolbar.tsx:187", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/components/canvas/Toolbar.tsx:187"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31b0733de06c216c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/TextStylePanel.tsx:510", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/TextStylePanel.tsx:510"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d9f39fe81cd67f30", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/LayersPrintPanel.tsx:309", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/LayersPrintPanel.tsx:309"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aa653f231fd95d44", "name": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/QuickReplacePanel.tsx:249", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/QuickReplacePanel.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-0a614ddce06f2ee9", "name": "`truncate` class without `title=` for hover reveal \u2014 app/chat/reply/page.tsx:137", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/chat/reply/page.tsx:137"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b52eb26c6b308da", "name": "`truncate` class without `title=` for hover reveal \u2014 app/cart/page.tsx:544", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cart/page.tsx:544"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08174cc266ad4ff1", "name": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/page.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/page.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ada2f6da70b922fc", "name": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/new/page.tsx:558", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/new/page.tsx:558"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2fab8b41137def02", "name": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/[id]/page.tsx:450", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/[id]/page.tsx:450"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1220031319f0d9b9", "name": "`truncate` class without `title=` for hover reveal \u2014 app/home/cobuy/request/create/page.tsx:1392", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/cobuy/request/create/page.tsx:1392"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e62f0d45abbb6e66", "name": "`truncate` class without `title=` for hover reveal \u2014 app/home/designs/page.tsx:481", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/designs/page.tsx:481"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c29bca5a156f5298", "name": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/cobuy/page.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/cobuy/page.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bf8f9c9e770ba9c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/orders/page.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/orders/page.tsx:148"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f95eb2970f0fb487", "name": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/coupons/page.tsx:252", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/coupons/page.tsx:252"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4a1be45e0bbef23e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/order/custom/[token]/DesignPreviewModal.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/order/custom/[token]/DesignPreviewModal.tsx:87"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b16fb65b707555a3", "name": "`truncate` class without `title=` for hover reveal \u2014 app/order/lookup/page.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/order/lookup/page.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-9fe8bd2027d488bd", "name": "`truncate` class without `title=` for hover reveal \u2014 app/support/notices/page.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/support/notices/page.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-9aa4fab56755b442", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/support/notices/[noticeId]/page.tsx:104", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/support/notices/[noticeId]/page.tsx:104"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-411854666e37247e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/support/guides/[id]/page.tsx:140", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/support/guides/[id]/page.tsx:140"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-61d9841a4cb1a7bb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/checkout/page.tsx:1094", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/checkout/page.tsx:1094"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71c4291832230acf", "name": "TODO/FIXME marker in shipping code \u2014 app/checkout/page.tsx:772", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/checkout/page.tsx:772"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5f23a70c8127860", "name": "Stray `console.log` in TS/JS \u2014 app/checkout/page.tsx:841", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/checkout/page.tsx:841"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fb0bd4e50c5424b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/mall/[shareToken]/AddProductModal.tsx:446", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/mall/[shareToken]/AddProductModal.tsx:446"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98fd59e6c9197caa", "name": "`truncate` class without `title=` for hover reveal \u2014 app/mall/[shareToken]/page.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/mall/[shareToken]/page.tsx:182"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-830e843432ac8ac9", "name": "Stray `console.log` in TS/JS \u2014 lib/canvas-svg-export.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/canvas-svg-export.ts:48"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cc660eb9bf1e711", "name": "Stray `console.log` in TS/JS \u2014 lib/designService.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/designService.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2da931a21ad8d26", "name": "Stray `console.log` in TS/JS \u2014 lib/fontUtils.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/fontUtils.ts:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-26f946ea9eadc45a", "name": "Stray `console.log` in TS/JS \u2014 store/useCanvasStore.ts:403", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 store/useCanvasStore.ts:403"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d9069458e68d89d", "name": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:94", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:94"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d8e4c4f8a9e35724", "name": "Insecure pattern 'dangerous_innerhtml' in app/components/HeroBanner.tsx:60", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/components/HeroBanner.tsx:60"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90a0126fa6c95995", "name": "Insecure pattern 'dangerous_innerhtml' in app/support/notices/[noticeId]/page.tsx:104", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/support/notices/[noticeId]/page.tsx:104"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b7657823640d7127", "name": "Insecure pattern 'dangerous_innerhtml' in app/support/guides/[id]/page.tsx:140", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/support/guides/[id]/page.tsx:140"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc0d1923e0537788", "name": "Very large file: app/v2/_components/screens/home.tsx (1930 lines)", "shortDescription": {"text": "Very large file: app/v2/_components/screens/home.tsx (1930 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-312c833995bc8024", "name": "Very large file: app/v2/_components/screens/editor.tsx (2707 lines)", "shortDescription": {"text": "Very large file: app/v2/_components/screens/editor.tsx (2707 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-cfdb5b7f2810485b", "name": "Very large file: app/cobuy/[shareToken]/page.tsx (1486 lines)", "shortDescription": {"text": "Very large file: app/cobuy/[shareToken]/page.tsx (1486 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-0a247c796fc26cc9", "name": "Very large file: app/components/cobuy/CoBuyOrganizerView.tsx (1514 lines)", "shortDescription": {"text": "Very large file: app/components/cobuy/CoBuyOrganizerView.tsx (1514 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-81bbebed02d34a3d", "name": "Very large file: app/components/canvas/SingleSideCanvas.tsx (1515 lines)", "shortDescription": {"text": "Very large file: app/components/canvas/SingleSideCanvas.tsx (1515 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-1851bb911e744ea1", "name": "Very large file: app/home/cobuy/request/create/page.tsx (2641 lines)", "shortDescription": {"text": "Very large file: app/home/cobuy/request/create/page.tsx (2641 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-257c921cd7bd9093", "name": "Very large file: app/editor/[productId]/ProductEditorUnified.tsx (1873 lines)", "shortDescription": {"text": "Very large file: app/editor/[productId]/ProductEditorUnified.tsx (1873 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-54fd7d5ed8ae741f", "name": "Very large file: app/checkout/page.tsx (1977 lines)", "shortDescription": {"text": "Very large file: app/checkout/page.tsx (1977 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "3 test file(s) for 347 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 93 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 164 placeholder/mock markers across 53 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "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, ci, tests. 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-f7c91d6af148db64", "name": "Commented-code block (5 lines) in types/types.ts:314", "shortDescription": {"text": "Commented-code block (5 lines) in types/types.ts:314"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-412d5840e220dcfe", "name": "Commented-code block (6 lines) in app/toss/page.tsx:24", "shortDescription": {"text": "Commented-code block (6 lines) in app/toss/page.tsx:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-009b263ad1ad3c70", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/toss/success/page.tsx:47", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/toss/success/page.tsx:47"}, "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-067a5e2a7a05e34e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cobuy/[shareToken]/fail/page.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cobuy/[shareToken]/fail/page.tsx:38"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c02030791f99f198", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/test-bg-removal/page.tsx:594", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/test-bg-removal/page.tsx:594"}, "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-9127cf4553b82bc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/toss/confirm/route.ts:133", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/toss/confirm/route.ts:133"}, "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-dae77774e6679e7b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cobuy/payment/confirm/route.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cobuy/payment/confirm/route.ts:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a8e711409fcc193b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/orders/[orderId]/messages/route.ts:210", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/orders/[orderId]/messages/route.ts:210"}, "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-9fce80fe8a8a670a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/chat/reply/route.ts:149", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/chat/reply/route.ts:149"}, "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-cd523e84c2387f4d", "name": "Commented-code block (5 lines) in app/api/cron/error-digest/route.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cron/error-digest/route.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-2866df15181d8f41", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/components/cobuy/CoBuyOrganizerView.tsx:141", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/components/cobuy/CoBuyOrganizerView.tsx:141"}, "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-472ceaf1e9b3d2b1", "name": "Commented-code block (7 lines) in app/components/welcome/WelcomeCouponModal.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in app/components/welcome/WelcomeCouponModal.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-b202885e0c66f9d6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reviews/my/create/page.tsx:139", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reviews/my/create/page.tsx:139"}, "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-8ee375fed2f9ce16", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cart/page.tsx:248", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cart/page.tsx:248"}, "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-d3b63d129a416465", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/inquiries/new/page.tsx:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/inquiries/new/page.tsx:257"}, "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-509bc9b29da9353b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/home/cobuy/request/create/page.tsx:738", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/home/cobuy/request/create/page.tsx:738"}, "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-e9ba74c04db57ce0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/order/custom/[token]/page.tsx:281", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/order/custom/[token]/page.tsx:281"}, "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-58991d9503423494", "name": "Commented-code block (5 lines) in app/editor/[productId]/ProductEditorUnified.tsx:892", "shortDescription": {"text": "Commented-code block (5 lines) in app/editor/[productId]/ProductEditorUnified.tsx:892"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-762f8bc9e35d23f9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/editor/[productId]/ProductEditorUnified.tsx:813", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/editor/[productId]/ProductEditorUnified.tsx:813"}, "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-483137b6611d3c49", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/checkout/page.tsx:886", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/checkout/page.tsx:886"}, "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-6dd146e9e9fe6dfa", "name": "Commented-code block (6 lines) in app/checkout/success/page.tsx:55", "shortDescription": {"text": "Commented-code block (6 lines) in app/checkout/success/page.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-ad42d63d6a0dc70f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/mall/[shareToken]/AddProductModal.tsx:255", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/mall/[shareToken]/AddProductModal.tsx:255"}, "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-70bd0ca24daac265", "name": "Commented-code block (5 lines) in lib/supabase-client.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in lib/supabase-client.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-3d080e00fe00047a", "name": "Commented-code block (7 lines) in lib/canvasUtils.ts:198", "shortDescription": {"text": "Commented-code block (7 lines) in lib/canvasUtils.ts:198"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c4500b0aa648b0d", "name": "Commented-code block (7 lines) in lib/notifications/error-mail.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in lib/notifications/error-mail.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-907352d6ab503bc5", "name": "Commented-code block (7 lines) in lib/notifications/noise-classifier.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in lib/notifications/noise-classifier.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-e18972b7496ae9b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/notifications/order.ts:259", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/notifications/order.ts:259"}, "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}}]}}, "automationDetails": {"id": "repobility/21359"}, "properties": {"repository": "tkaykim/modoo_app", "repoUrl": "https://github.com/tkaykim/modoo_app", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: tkaykim/modoo_app"}, "properties": {"repobilityId": 370862, "scanner": "foundry_dataset", "fingerprint": "4904649d0ab7de5d3359443a9da1ed1e9d1a55ca59685d7f6efc03c377c64ed7", "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, "api_or_backend": 1, "ui_or_frontend": 32, "source_or_other": 14, "mock_placeholder": 1, "api_integration_gap": 1, "mostly follows blueprint": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "blueprint_human_gap_disagreement": 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": 104, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 47, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 5, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 1, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 63, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 47, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "tkaykim/modoo_app#3", "issue_number": "3", "quality_tiers": {"unresolved": 1, "assumption_check": 1, "weak_supervision": 3}, "repo_full_name": "tkaykim/modoo_app", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-d6b6fdf82f468b2d", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 5, "ui_or_frontend": 160, "source_or_other": 70}}, "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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tkaykim/modoo_app#3\nRepo: tkaykim/modoo_app\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 63\nEdges: 104\nNode types: {'pr_file': 47, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 47, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, '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, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'ui_or_frontend': 32, 'source_or_other': 14, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'api_integration_gap': 1, 'api_or_backend': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1, 'assumption_check': 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/tkaykim/modoo_app", "source_id": "graph-query-motif_query-eea6dd1984d2d7d9", "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": "tkaykim/modoo_app", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: tkaykim/modoo_app"}, "properties": {"repobilityId": 370861, "scanner": "foundry_dataset", "fingerprint": "7f6404ec576c39468e2dcf4083ea290e306261ba1e5264ece4d9bd6da0920b4a", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 1, "deployment_env_gap": 1, "build_install_failure": 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": 20, "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_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 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": "tkaykim/modoo_app#2", "issue_number": "2", "quality_tiers": {"unresolved": 4}, "repo_full_name": "tkaykim/modoo_app", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-6d54e970faba956b", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 5}}, "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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#2\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tkaykim/modoo_app#2\nRepo: tkaykim/modoo_app\nIssue/PR number: 2\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 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_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: {'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, 'build_install_failure': 1, 'deployment_env_gap': 1, 'ui_or_frontend': 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/tkaykim/modoo_app", "source_id": "graph-query-motif_query-7669d2761933886b", "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": "tkaykim/modoo_app", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: tkaykim/modoo_app"}, "properties": {"repobilityId": 370860, "scanner": "foundry_dataset", "fingerprint": "72a08f6215f892fe2472b62132a838799ae2f032a78ca69997a942bf787992e6", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"ui_or_frontend": 1, "deployment_env_gap": 1, "build_install_failure": 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": 20, "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_touches_file": 2, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 13, "node_types": {"repo": 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": "tkaykim/modoo_app#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "tkaykim/modoo_app", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-94479148e3238c93", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"ui_or_frontend": 5}}, "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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tkaykim/modoo_app#1\nRepo: tkaykim/modoo_app\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 13\nEdges: 20\nNode types: {'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'pr_file': 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_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: {'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, 'build_install_failure': 1, 'deployment_env_gap': 1, 'ui_or_frontend': 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/tkaykim/modoo_app", "source_id": "graph-query-motif_query-0d471d7b3a22ae9f", "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": "tkaykim/modoo_app", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_blueprint_gap", "level": "warning", "message": {"text": "Foundry mined blueprint gap alignment: tkaykim/modoo_app"}, "properties": {"repobilityId": 356757, "scanner": "foundry_dataset", "fingerprint": "cb1078368869e5e8ecfd4925c44615f31afb2a04bba40b2dc9128fd2fb5fa951", "category": "tech_debt", "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 aligned with blueprint or architecture gaps", "intent": "Curriculum-gap examples connecting issue threads to helicopter-view gaps.", "labels": {"bug_fix": 1, "api_or_backend": 1, "ui_or_frontend": 32, "source_or_other": 14, "mock_placeholder": 1, "api_integration_gap": 1, "mostly follows blueprint": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "blueprint_human_gap_disagreement": 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": "blueprint_gap_alignment", "outcomes": {"claimed_resolved_unverified": 6, "not_resolved_or_not_observed": 2}, "polarity": "mixed", "query_id": "blueprint_gap_alignment", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 104, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 47, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 5, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 1, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 63, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 47, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "tkaykim/modoo_app#3", "issue_number": "3", "quality_tiers": {"unresolved": 1, "assumption_check": 1, "weak_supervision": 3}, "repo_full_name": "tkaykim/modoo_app", "training_usage": "curriculum_gap", "source_motif_id": "graph-pattern-motif-thread-5a5f92ce86be52d4", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 5, "ui_or_frontend": 160, "source_or_other": 70}}, "text": "Graph query export: Human feedback aligned with blueprint or architecture gaps\nQuery id: blueprint_gap_alignment\nQuery type: motif_query\nIntent: Curriculum-gap examples connecting issue threads to helicopter-view gaps.\nMotif: blueprint_gap_alignment\nTraining usage: curriculum_gap\nGraph gold label: weak_supervision_needs_review\nRepo: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\nEvidence:\nGraph motif: Human feedback aligns with blueprint or architecture gaps\nMotif id: blueprint_gap_alignment\nPolarity: mixed\nTraining usage: curriculum_gap\nSeverity: medium\nRepo: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tkaykim/modoo_app#3\nRepo: tkaykim/modoo_app\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 63\nEdges: 104\nNode types: {'pr_file': 47, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 47, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, '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, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'ui_or_frontend': 32, 'source_or_other': 14, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'api_integration_gap': 1, 'api_or_backend': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1, 'assumption_check': 1}\nCI labels: {}\nCurriculum targets:\n- Use helicopter-view architecture/schema/design evidence beside issue threads.\n- Teach models to compare requested product class against implementation layers.\nAssumption checks:\n- Which blueprint layer is absent: frontend, API, data, auth, tests, or deployment?\n- Does human feedback confirm the same architectural gap?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tkaykim/modoo_app", "source_id": "graph-query-motif_query-8f5a08fa841c0068", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/blueprint_gap_alignment/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tkaykim/modoo_app", "source_dataset": "graph_queries/blueprint_gap_alignment", "training_usage": "curriculum_gap"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: tkaykim/modoo_app"}, "properties": {"repobilityId": 323467, "scanner": "foundry_dataset", "fingerprint": "edd6bfd985127010455d711357f52fd762d98f43d4d3889ec2f46ebd027fd73d", "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": "tkaykim/modoo_app#3", "human_labels": ["api_integration_gap", "api_or_backend", "mock_placeholder", "source_or_other", "ui_or_frontend"], "issue_number": "3", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.607, "repo_full_name": "tkaykim/modoo_app", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-a26af8c7e0251bbb", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 3, "docs": 5}, "source_chain_kind": "issue_chain", "changed_file_count": 47, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 1, "ui_or_frontend": 32, "source_or_other": 14}, "linked_commit_count": 1, "helicopter_view_count": 2, "source_artifact_count": 8, "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": 3, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\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: tkaykim/modoo_app#3\nRepo: tkaykim/modoo_app\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: 47\nLabels: {'mock_placeholder': 1, 'api_integration_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'api_or_backend': 1, 'ui_or_frontend': 32, 'source_or_other': 14}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-d94d714cd701be90\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tkaykim/modoo_app/pull/3\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: tkaykim/modoo_app\\nAuthor: tkaykim (User)\\nURL: https://github.com/tkaykim/modoo_app/pull/3\\nTitle: feat(lab): Layers \u00d7 PrintMethod \ud1b5\ud569 \ud328\ub110 (Phase 2.1~2.4)\\nBody:\\n## \uc694\uc57d\\n\\nv2 EditorLayers + PrintMethod \ub514\uc790\uc778\uc744 \ud55c \ud328\ub110\uc5d0 \uc778\ub77c\uc778 expand \ud328\ud134\uc73c\ub85c \ud1b5\ud569\ud55c \uc2e4\ud5d8 \uad6c\ud604\uc785\ub2c8\ub2e4. prod \uc601\ud5a5 0(\ucffc\ub9ac \uac8c\uc774\ud2b8 + \uac00\uaca9 \ud750\ub984 \ube44\uac74\ub4dc\ub9bc).\\n\\n## \uac80\uc99d \uacbd\ub85c\\n\\n- \\\\`/lab/layers-print\\\\` \u2014 mock 4\uac1c \ub808\uc774\uc5b4\ub85c \ud328\ub110 \ub514\uc790\uc778 \uc989\uc2dc \ud655\uc778\\n- \\\\`/editor/{productId}?layers-lab=1\\\\` \u2014 \uc2e4 fabric \uac1d\uccb4 + DB \ub2e8\uac00\ud45c \ub8e9\uc5c5 \uc778\ud130\ub799\uc158\\n\\n## \uc2e0\uaddc / \uc218\uc815\\n\\n- \\\\`app/components/canvas/LayersPrintPanel.tsx\\\\` (\uc2e0\uaddc): \ud558\ub2e8 sheet, chip \u2192 \uc778\ub77c\uc778 expand\\n- \\\\`app/lab/layers-print/page.tsx\\\\` (\uc2e0\uaddc): \ub514\uc790\uc778 \uac80\ud1a0 + \uc2e4 \uc778\ud130\ub799\uc158 \uc9c4\uc785 \uc548\ub0b4\\n- \\\\`app/editor/[productId]/ProductEditorUnified.tsx\\\\`: \\\\`?layers-lab=1\\\\` \uac8c\uc774\ud2b8 + floating button\\n\\n## \ud68c\uadc0 0 \ubcf4\uc7a5\\n\\n- \uac00\uaca9 \uc0b0\uc815 \ud750\ub984 \ubcc0\uacbd 0 (canvasPricing.ts \ubbf8\uc218\uc815)\\n- \uae30\uc874 ObjectPreviewPanel \u00b7 PricingInfo \u00b7 QuantitySelectorModal \ube44\uac74\ub4dc\ub9bc\\n- prod URL\uc5d4 \ucffc\ub9ac \uc548 \ubd99\uc74c \u2192 \uc190\ub2d8 \ubbf8\ub178\ucd9c\\n- TypeScript 0 errors\\n\\n## \ub2e4\uc74c \ub2e8\uacc4 (Phase 2.5)\\n\\n\ucffc\ub9ac \uac8c\uc774\ud2b8 \uc81c\uac70 + DTG \ud65c\uc131\ud654 + bulk \uc7ac\uad6c\ud604 + \uc790\ub3d9 \ucd94\ucc9c \ub85c\uc9c1.\\n\\n\ud83e\udd16 Generated with [Claude Code](https://claude.com/claude-code)\"\n  },\n  {\n    \"id\": \"github-feedback-comment-58bb70c62bc05f9b\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"api_integration_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tkaykim/modoo_app/pull/3#issuecomment-4559915195\",\n    \"text\": \"GitHub feedback: api_integration_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: tkaykim/modoo_app\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tkaykim/modoo_app/pull/3#issuecomment-4559915195\\nTitle: \\nBody:\\n[vc]: #FrMnefCasoj/Z1JFYxWRqjPUkUwqH9p9TCah/1Mv01I=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJtb2Rvb19hcHAiLCJwcm9qZWN0SWQiOiJwcmpfSjBNQVNVeU5Zd1dtcndzd1ZCZFpjUWE4c1hlcyIsImluc3BlY3RvclVybCI6Imh0dHBzOi8vdmVyY2VsLmNvbS9ncmlnb2VudHMtcHJvamVjdHMvbW9kb29fYXBwL05zbTdpUlRnZGhwUFo2VFBodUFaa1E4NDQ5\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tkaykim/modoo_app", "source_id": "comment-chain-pattern-bad_chains-d05f966b424aa0e8", "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": "tkaykim/modoo_app", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: tkaykim/modoo_app"}, "properties": {"repobilityId": 323466, "scanner": "foundry_dataset", "fingerprint": "6e31a613681be945aa5e39327ae8a8397d376871bc38103428388feee31c6c9f", "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": "tkaykim/modoo_app#2", "human_labels": ["build_install_failure", "deployment_env_gap", "ui_or_frontend"], "issue_number": "2", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "tkaykim/modoo_app", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-4dc7892cb025d31f", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 3, "docs": 5}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 0, "helicopter_view_count": 2, "source_artifact_count": 8, "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": 3, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: tkaykim/modoo_app\nThread: tkaykim/modoo_app#2\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: tkaykim/modoo_app#2\nRepo: tkaykim/modoo_app\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: 1\nLabels: {'build_install_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-beeea64e46c19b15\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"build_install_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tkaykim/modoo_app/pull/2\",\n    \"text\": \"GitHub feedback: build_install_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: tkaykim/modoo_app\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tkaykim/modoo_app/pull/2\\nTitle: Install Vercel Web Analytics\\nBody:\\n## Vercel Web Analytics Installation\\n\\nSuccessfully installed and configured Vercel Web Analytics for the modoo_app project.\\n\\n### Implementation Details\\n\\n**Framework Identified:** Next.js with App Router\\n\\n**Package Status:** \\n- The @vercel/analytics package (v1.6.1) was already present in package.json\\n- Ran `npm install` to ensure all dependencies are properly installed and lock file is up-to-date\\n\\n**Changes Made:**\\n\\n**Modified:**\\n- `app/layout.tsx` - Added Analytics component to root layout\\n  - Imported `Analytics` from `@vercel/analytics/next`\\n  - Added `<Analytics />` component at the end of the `<body>` tag, following the official Vercel documentation guidelines for Next.js App Router\\n\\n### Implementation Approach\\n\\n1. **Fetched Latest Documentation:** Retrieved the official quickstart guide from https://vercel.com/docs/analytics/quickstart to ensure using the most up-to-date installation instructions\\n\\n2. **Framework-Specific Implementation:** \\n   - Confirmed the pro\"\n  },\n  {\n    \"id\": \"github-feedback-comment-e220aab6b0cb39b4\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tkaykim/modoo_app/pull/2#issuecomment-4309788621\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: tkaykim/modoo_app\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tkaykim/modoo_app/pull/2#issuecomment-4309788621\\nTitle: \\nBody:\\n[vc]: #HXuAGZa7BPzaPXZtyL+xhTegUDWLHq70lL7NgJ2EdLU=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJtb2Rvb19hcHAiLCJwcm9qZWN0SWQiOiJwcmpfSjBNQVNVeU5Zd1dtcndzd1ZCZFpjUWE4c1hlcyIsI\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tkaykim/modoo_app", "source_id": "comment-chain-pattern-bad_chains-57c622380d08a1d2", "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": "tkaykim/modoo_app", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: tkaykim/modoo_app"}, "properties": {"repobilityId": 323465, "scanner": "foundry_dataset", "fingerprint": "66267f78262e9f07ae9f8c105b266e91d9f7d5b77db82149bb821ba48932359e", "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": "tkaykim/modoo_app#1", "human_labels": ["build_install_failure", "deployment_env_gap", "ui_or_frontend"], "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": "tkaykim/modoo_app", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-f606a50101748f59", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 3, "docs": 5}, "source_chain_kind": "issue_chain", "changed_file_count": 1, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"ui_or_frontend": 1}, "linked_commit_count": 0, "helicopter_view_count": 2, "source_artifact_count": 8, "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": 3, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: tkaykim/modoo_app\nThread: tkaykim/modoo_app#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: tkaykim/modoo_app#1\nRepo: tkaykim/modoo_app\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: 1\nLabels: {'build_install_failure': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'ui_or_frontend': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-45fe28ff11570d90\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"build_install_failure\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tkaykim/modoo_app/pull/1\",\n    \"text\": \"GitHub feedback: build_install_failure\\nPolarity: bad\\nKind: pull_request_body\\nRepo: tkaykim/modoo_app\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tkaykim/modoo_app/pull/1\\nTitle: Install and configure Vercel Web Analytics\\nBody:\\n## Vercel Web Analytics Installation - Implementation Report\\n\\n### Summary\\nSuccessfully installed and configured Vercel Web Analytics for this Next.js App Router project following the latest official documentation from Vercel.\\n\\n### Changes Made\\n\\n#### Modified Files:\\n- **app/layout.tsx** - Added Vercel Analytics component to root layout\\n\\n### Implementation Details\\n\\n1. **Documentation Review**\\n   - Fetched latest installation instructions from https://vercel.com/docs/analytics/quickstart\\n   - Confirmed framework-specific instructions for Next.js App Router (v13+)\\n\\n2. **Package Installation**\\n   - Verified `@vercel/analytics@1.6.1` was already listed in package.json dependencies\\n   - Ran `npm install` to ensure all dependencies including @vercel/analytics were properly installed\\n\\n3. **Analytics Configuration**\\n   - Added import statement: `import { Analytics } from \\\"@vercel/analytics/next\\\";`\\n   - Added `<Analytics />` component at the end of the body tag in \"\n  },\n  {\n    \"id\": \"github-feedback-comment-1dd6813082714336\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tkaykim/modoo_app/pull/1#issuecomment-4309771456\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: tkaykim/modoo_app\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/tkaykim/modoo_app/pull/1#issuecomment-4309771456\\nTitle: \\nBody:\\n[vc]: #MXQaJ/qfACsxY5BDP4kRUx6Q1VYcP2N7UBp7yjsrVNg=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJtb2Rvb19hcHAiLCJwcm9qZWN0SWQiOiJwcmpfSjBNQVNVeU5Zd1dtcndzd1ZCZFpjUWE4c1hlcyIsI\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tkaykim/modoo_app", "source_id": "comment-chain-pattern-bad_chains-e5f0269b903096f5", "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": "tkaykim/modoo_app", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: tkaykim/modoo_app"}, "properties": {"repobilityId": 327275, "scanner": "foundry_dataset", "fingerprint": "883869c9bb435b492608b6f093234709664b1c31ea0dd04c907208c3ea4eb918", "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, "api_or_backend": 1, "ui_or_frontend": 32, "source_or_other": 14, "mock_placeholder": 1, "api_integration_gap": 1, "mostly follows blueprint": 1, "claimed_resolved_unverified": 3, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 1, "blueprint_human_gap_disagreement": 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": "mock_as_real_or_placeholder", "outcomes": {"claimed_resolved_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": 104, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 47, "alignment_uses_comment": 1, "alignment_uses_finding": 1, "chain_has_link_quality": 5, "comment_aligns_finding": 1, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_links_commit": 1, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 63, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 47, "alignment": 1, "fix_outcome": 1, "issue_chain": 1, "link_quality": 5, "comment_chain": 2, "blueprint_finding": 1}, "query_type": "motif_query", "thread_key": "tkaykim/modoo_app#3", "issue_number": "3", "quality_tiers": {"unresolved": 1, "assumption_check": 1, "weak_supervision": 3}, "repo_full_name": "tkaykim/modoo_app", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-564d6c88598a5400", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 5, "ui_or_frontend": 160, "source_or_other": 70}}, "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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\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: tkaykim/modoo_app\nThread: tkaykim/modoo_app#3\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tkaykim/modoo_app#3\nRepo: tkaykim/modoo_app\nIssue/PR number: 3\nGraph consistency label: weak_supervision_needs_review\nNodes: 63\nEdges: 104\nNode types: {'pr_file': 47, 'link_quality': 5, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1, 'alignment': 1, 'blueprint_finding': 1}\nEdge types: {'thread_touches_file': 47, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 5, '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, 'alignment_uses_comment': 1, 'alignment_uses_finding': 1, 'comment_aligns_finding': 1}\nLabels: {'ui_or_frontend': 32, 'source_or_other': 14, 'claimed_resolved_unverified': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'api_integration_gap': 1, 'api_or_backend': 1, 'human_reported_issue_then_fix_attempt': 1, 'bug_fix': 1, 'human_reported_issue_no_linked_fix': 1, 'not_resolved_or_not_observed': 1, 'blueprint_human_gap_disagreement': 1, 'mostly follows blueprint': 1}\nOutcomes: {'claimed_resolved_unverified': 6, 'not_resolved_or_not_observed': 2}\nQuality tiers: {'weak_supervision': 3, 'unresolved': 1, 'assumption_check': 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/tkaykim/modoo_app", "source_id": "graph-query-motif_query-2e56e77e0c1b45f9", "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": "tkaykim/modoo_app", "source_dataset": "graph_queries/mock_as_real_or_placeholder", "training_usage": "hard_negative"}}}, {"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9fcf698e7eda5f15", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/layout.tsx:94"}, "properties": {"repobilityId": "6f16eb9b82a2dcd6", "scanner": "scanner-primary", "fingerprint": "9fcf698e7eda5f15", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5e26051b9a01f3dd", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/toss/page.tsx:48"}, "properties": {"repobilityId": "f434346a834b3373", "scanner": "scanner-primary", "fingerprint": "5e26051b9a01f3dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-976fb7852029c6c5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cobuy/request/[shareToken]/editor/page.tsx:147"}, "properties": {"repobilityId": "9b1d525f4f50bb78", "scanner": "scanner-primary", "fingerprint": "976fb7852029c6c5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8bf154bc6f09f28d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/toss/confirm/route.ts:249"}, "properties": {"repobilityId": "edfd030cb7f27731", "scanner": "scanner-primary", "fingerprint": "8bf154bc6f09f28d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ee1ea3fe1774f2ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/toss/confirm/route.ts:197"}, "properties": {"repobilityId": "711e7bffa843ac55", "scanner": "scanner-primary", "fingerprint": "ee1ea3fe1774f2ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1d41ad7aab67cd1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cobuy/create-order/route.ts:284"}, "properties": {"repobilityId": "d9236c9f9f457c7c", "scanner": "scanner-primary", "fingerprint": "c1d41ad7aab67cd1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-264daaa746a18169", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cobuy/request/[shareToken]/route.ts:49"}, "properties": {"repobilityId": "c42e1a1585a230e2", "scanner": "scanner-primary", "fingerprint": "264daaa746a18169", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec03e5523d39a16c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/checkout/testmode/route.ts:311"}, "properties": {"repobilityId": "7f9e4627b93c0e15", "scanner": "scanner-primary", "fingerprint": "ec03e5523d39a16c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-062534af7d9ea433", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/components/DesignEditModal.tsx:186"}, "properties": {"repobilityId": "3bed0ce0f72df960", "scanner": "scanner-primary", "fingerprint": "062534af7d9ea433", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8510125dfa8dcb0e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/components/HeroBanner.tsx:60"}, "properties": {"repobilityId": "7f20cab41390a4b4", "scanner": "scanner-primary", "fingerprint": "8510125dfa8dcb0e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d669c9ca26437977", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/ProductSelectionModal.tsx:174"}, "properties": {"repobilityId": "12e393d95eecc7f7", "scanner": "scanner-primary", "fingerprint": "d669c9ca26437977", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dedb2651440eb239", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/BestReviewsSection.tsx:96"}, "properties": {"repobilityId": "cac2bdd043625b34", "scanner": "scanner-primary", "fingerprint": "dedb2651440eb239", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b917c4cbe051b7f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/DesignChatSection.tsx:128"}, "properties": {"repobilityId": "9804d3af6d493414", "scanner": "scanner-primary", "fingerprint": "b917c4cbe051b7f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da499c9c99662049", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app/components/QuantitySelectorModal.tsx:299"}, "properties": {"repobilityId": "e27cb26d5a488d15", "scanner": "scanner-primary", "fingerprint": "da499c9c99662049", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-081ef8b782db6176", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/components/ShareProductButton.tsx:21"}, "properties": {"repobilityId": "742fb3a87ec3bda7", "scanner": "scanner-primary", "fingerprint": "081ef8b782db6176", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-037f663f1ddd588a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/InquiryBoardSection.tsx:168"}, "properties": {"repobilityId": "587a36bd7802263d", "scanner": "scanner-primary", "fingerprint": "037f663f1ddd588a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c419a287ba69c16e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/components/cobuy/DesignEditorViewer.tsx:106"}, "properties": {"repobilityId": "20cae6f5c948188e", "scanner": "scanner-primary", "fingerprint": "c419a287ba69c16e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a43940cae1ddf2ec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/cobuy/CoBuyOrganizerView.tsx:1248"}, "properties": {"repobilityId": "12a821cfbb798446", "scanner": "scanner-primary", "fingerprint": "a43940cae1ddf2ec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59d47aac58186432", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/chatbot/ProductCard.tsx:46"}, "properties": {"repobilityId": "4dd8d28178128be0", "scanner": "scanner-primary", "fingerprint": "59d47aac58186432", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-66d90aedd699a070", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/TemplateGalleryCard.tsx:51"}, "properties": {"repobilityId": "c75990370af06c31", "scanner": "scanner-primary", "fingerprint": "66d90aedd699a070", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6589ae168d32865e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/GalleryItemCard.tsx:58"}, "properties": {"repobilityId": "5558dd1d14bf0589", "scanner": "scanner-primary", "fingerprint": "6589ae168d32865e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-49dfe2402c1e19dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/ProductTemplatesStrip.tsx:64"}, "properties": {"repobilityId": "c3a93f47eb46afa2", "scanner": "scanner-primary", "fingerprint": "49dfe2402c1e19dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-af29858dc2c939bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/templates/FeaturedTemplatesSection.tsx:38"}, "properties": {"repobilityId": "6ff36b43123a443b", "scanner": "scanner-primary", "fingerprint": "af29858dc2c939bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a2bcda416a15948", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/TemplateCard.tsx:38"}, "properties": {"repobilityId": "648d12b7d4729e4d", "scanner": "scanner-primary", "fingerprint": "7a2bcda416a15948", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ae57e293979eee8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/components/canvas/Toolbar.tsx:187"}, "properties": {"repobilityId": "debffb6ba2c694cb", "scanner": "scanner-primary", "fingerprint": "8ae57e293979eee8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31b0733de06c216c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/TextStylePanel.tsx:510"}, "properties": {"repobilityId": "138bfd2fd47fe706", "scanner": "scanner-primary", "fingerprint": "31b0733de06c216c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9f39fe81cd67f30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/LayersPrintPanel.tsx:309"}, "properties": {"repobilityId": "0938ddcc28ae0ce2", "scanner": "scanner-primary", "fingerprint": "d9f39fe81cd67f30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aa653f231fd95d44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/components/canvas/QuickReplacePanel.tsx:249"}, "properties": {"repobilityId": "22aa222295665bcf", "scanner": "scanner-primary", "fingerprint": "aa653f231fd95d44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a614ddce06f2ee9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/chat/reply/page.tsx:137"}, "properties": {"repobilityId": "be2b58a229f009fa", "scanner": "scanner-primary", "fingerprint": "0a614ddce06f2ee9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b52eb26c6b308da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cart/page.tsx:544"}, "properties": {"repobilityId": "1318e054b24d5cf8", "scanner": "scanner-primary", "fingerprint": "9b52eb26c6b308da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-08174cc266ad4ff1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/page.tsx:180"}, "properties": {"repobilityId": "293c05eb257fd040", "scanner": "scanner-primary", "fingerprint": "08174cc266ad4ff1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ada2f6da70b922fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/new/page.tsx:558"}, "properties": {"repobilityId": "6e1d8f8828928eeb", "scanner": "scanner-primary", "fingerprint": "ada2f6da70b922fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2fab8b41137def02", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/inquiries/[id]/page.tsx:450"}, "properties": {"repobilityId": "01fdcbe5f349ca43", "scanner": "scanner-primary", "fingerprint": "2fab8b41137def02", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1220031319f0d9b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/cobuy/request/create/page.tsx:1392"}, "properties": {"repobilityId": "290bc9ba30ba2f1d", "scanner": "scanner-primary", "fingerprint": "1220031319f0d9b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e62f0d45abbb6e66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/designs/page.tsx:481"}, "properties": {"repobilityId": "c004446798f14d5d", "scanner": "scanner-primary", "fingerprint": "e62f0d45abbb6e66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c29bca5a156f5298", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/cobuy/page.tsx:180"}, "properties": {"repobilityId": "6285e4be32d3d44b", "scanner": "scanner-primary", "fingerprint": "c29bca5a156f5298", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8bf8f9c9e770ba9c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/orders/page.tsx:148"}, "properties": {"repobilityId": "84e1a677c9e08c18", "scanner": "scanner-primary", "fingerprint": "8bf8f9c9e770ba9c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f95eb2970f0fb487", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/home/my-page/coupons/page.tsx:252"}, "properties": {"repobilityId": "2a6f68d172490d7e", "scanner": "scanner-primary", "fingerprint": "f95eb2970f0fb487", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a1be45e0bbef23e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/order/custom/[token]/DesignPreviewModal.tsx:87"}, "properties": {"repobilityId": "414a4729b7e41a5d", "scanner": "scanner-primary", "fingerprint": "4a1be45e0bbef23e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b16fb65b707555a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/order/lookup/page.tsx:211"}, "properties": {"repobilityId": "bbe59da04c8570b1", "scanner": "scanner-primary", "fingerprint": "b16fb65b707555a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9fe8bd2027d488bd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/support/notices/page.tsx:93"}, "properties": {"repobilityId": "f521069a3dc5d84a", "scanner": "scanner-primary", "fingerprint": "9fe8bd2027d488bd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9aa4fab56755b442", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/support/notices/[noticeId]/page.tsx:104"}, "properties": {"repobilityId": "e43a5ddc82e56a2c", "scanner": "scanner-primary", "fingerprint": "9aa4fab56755b442", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-411854666e37247e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/support/guides/[id]/page.tsx:140"}, "properties": {"repobilityId": "1f47123b626d6f7b", "scanner": "scanner-primary", "fingerprint": "411854666e37247e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-61d9841a4cb1a7bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/checkout/page.tsx:1094"}, "properties": {"repobilityId": "dd0811ba1c67a713", "scanner": "scanner-primary", "fingerprint": "61d9841a4cb1a7bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71c4291832230acf", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/checkout/page.tsx:772"}, "properties": {"repobilityId": "9ea2d980890af4cd", "scanner": "scanner-primary", "fingerprint": "71c4291832230acf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c5f23a70c8127860", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/checkout/page.tsx:841"}, "properties": {"repobilityId": "e552dff3e5cfe2cf", "scanner": "scanner-primary", "fingerprint": "c5f23a70c8127860", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4fb0bd4e50c5424b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/mall/[shareToken]/AddProductModal.tsx:446"}, "properties": {"repobilityId": "3bd4bc3f0599b432", "scanner": "scanner-primary", "fingerprint": "4fb0bd4e50c5424b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-98fd59e6c9197caa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/mall/[shareToken]/page.tsx:182"}, "properties": {"repobilityId": "ad649086104ed7c1", "scanner": "scanner-primary", "fingerprint": "98fd59e6c9197caa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-830e843432ac8ac9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/canvas-svg-export.ts:48"}, "properties": {"repobilityId": "5988f7541b043e54", "scanner": "scanner-primary", "fingerprint": "830e843432ac8ac9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3cc660eb9bf1e711", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/designService.ts:66"}, "properties": {"repobilityId": "2262d28980659e8e", "scanner": "scanner-primary", "fingerprint": "3cc660eb9bf1e711", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2da931a21ad8d26", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/fontUtils.ts:110"}, "properties": {"repobilityId": "b5be1631af695004", "scanner": "scanner-primary", "fingerprint": "a2da931a21ad8d26", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-26f946ea9eadc45a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 store/useCanvasStore.ts:403"}, "properties": {"repobilityId": "6332b23c31a26c23", "scanner": "scanner-primary", "fingerprint": "26f946ea9eadc45a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d9069458e68d89d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/layout.tsx:94"}, "properties": {"repobilityId": "69d4743587f721a0", "scanner": "scanner-primary", "fingerprint": "3d9069458e68d89d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/layout.tsx"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-d8e4c4f8a9e35724", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/components/HeroBanner.tsx:60"}, "properties": {"repobilityId": "3d9744425d5f3e34", "scanner": "scanner-primary", "fingerprint": "d8e4c4f8a9e35724", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/components/HeroBanner.tsx"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-90a0126fa6c95995", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/support/notices/[noticeId]/page.tsx:104"}, "properties": {"repobilityId": "fc432b41e31c08cb", "scanner": "scanner-primary", "fingerprint": "90a0126fa6c95995", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/support/notices/[noticeId]/page.tsx"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-b7657823640d7127", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/support/guides/[id]/page.tsx:140"}, "properties": {"repobilityId": "1bc488bf6f87327d", "scanner": "scanner-primary", "fingerprint": "b7657823640d7127", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/support/guides/[id]/page.tsx"}, "region": {"startLine": 140}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-cc0d1923e0537788", "level": "note", "message": {"text": "Very large file: app/v2/_components/screens/home.tsx (1930 lines)"}, "properties": {"repobilityId": "435a41f5ce83dee0", "scanner": "scanner-primary", "fingerprint": "cc0d1923e0537788", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-312c833995bc8024", "level": "note", "message": {"text": "Very large file: app/v2/_components/screens/editor.tsx (2707 lines)"}, "properties": {"repobilityId": "09eb94cd38fb3fa6", "scanner": "scanner-primary", "fingerprint": "312c833995bc8024", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cfdb5b7f2810485b", "level": "note", "message": {"text": "Very large file: app/cobuy/[shareToken]/page.tsx (1486 lines)"}, "properties": {"repobilityId": "760106e2e605380b", "scanner": "scanner-primary", "fingerprint": "cfdb5b7f2810485b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0a247c796fc26cc9", "level": "note", "message": {"text": "Very large file: app/components/cobuy/CoBuyOrganizerView.tsx (1514 lines)"}, "properties": {"repobilityId": "2b2a1e4b8f37e393", "scanner": "scanner-primary", "fingerprint": "0a247c796fc26cc9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-81bbebed02d34a3d", "level": "note", "message": {"text": "Very large file: app/components/canvas/SingleSideCanvas.tsx (1515 lines)"}, "properties": {"repobilityId": "e6827c7d88d4cd3b", "scanner": "scanner-primary", "fingerprint": "81bbebed02d34a3d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1851bb911e744ea1", "level": "note", "message": {"text": "Very large file: app/home/cobuy/request/create/page.tsx (2641 lines)"}, "properties": {"repobilityId": "6de8bc4631452083", "scanner": "scanner-primary", "fingerprint": "1851bb911e744ea1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-257c921cd7bd9093", "level": "note", "message": {"text": "Very large file: app/editor/[productId]/ProductEditorUnified.tsx (1873 lines)"}, "properties": {"repobilityId": "d2d01cbcb9d897df", "scanner": "scanner-primary", "fingerprint": "257c921cd7bd9093", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-54fd7d5ed8ae741f", "level": "note", "message": {"text": "Very large file: app/checkout/page.tsx (1977 lines)"}, "properties": {"repobilityId": "7f0d27c556e26cc2", "scanner": "scanner-primary", "fingerprint": "54fd7d5ed8ae741f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "1d8cba387b0008e4", "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": "f3f405aee1005ac8", "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": "05c059e6e651facd", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "10f559163c4aab29", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "c44174ea85adbdb8", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "4840513f0c7a79ac", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "a791beb884c14b4f", "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": "21ad5193134a0b37", "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": "31b218a820f7847e", "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-f7c91d6af148db64", "level": "none", "message": {"text": "Commented-code block (5 lines) in types/types.ts:314"}, "properties": {"repobilityId": "5ee42abc551d6d33", "scanner": "scanner-primary", "fingerprint": "f7c91d6af148db64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-412d5840e220dcfe", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/toss/page.tsx:24"}, "properties": {"repobilityId": "faa85cf80aac1b18", "scanner": "scanner-primary", "fingerprint": "412d5840e220dcfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-009b263ad1ad3c70", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/toss/success/page.tsx:47"}, "properties": {"repobilityId": "4cd5d9729cfa2894", "scanner": "scanner-primary", "fingerprint": "009b263ad1ad3c70", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-067a5e2a7a05e34e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cobuy/[shareToken]/fail/page.tsx:38"}, "properties": {"repobilityId": "bbf3f7655ecb0749", "scanner": "scanner-primary", "fingerprint": "067a5e2a7a05e34e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c02030791f99f198", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/test-bg-removal/page.tsx:594"}, "properties": {"repobilityId": "4421a1f985cf62ba", "scanner": "scanner-primary", "fingerprint": "c02030791f99f198", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9127cf4553b82bc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/toss/confirm/route.ts:133"}, "properties": {"repobilityId": "4c4c9f64b3b8065a", "scanner": "scanner-primary", "fingerprint": "9127cf4553b82bc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dae77774e6679e7b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/cobuy/payment/confirm/route.ts:29"}, "properties": {"repobilityId": "4c6845eaa3f57468", "scanner": "scanner-primary", "fingerprint": "dae77774e6679e7b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a8e711409fcc193b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/orders/[orderId]/messages/route.ts:210"}, "properties": {"repobilityId": "fbabad76164de59c", "scanner": "scanner-primary", "fingerprint": "a8e711409fcc193b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9fce80fe8a8a670a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/chat/reply/route.ts:149"}, "properties": {"repobilityId": "0fd4c740f61fec97", "scanner": "scanner-primary", "fingerprint": "9fce80fe8a8a670a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd523e84c2387f4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cron/error-digest/route.ts:9"}, "properties": {"repobilityId": "52cecacfde91f64e", "scanner": "scanner-primary", "fingerprint": "cd523e84c2387f4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2866df15181d8f41", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/components/cobuy/CoBuyOrganizerView.tsx:141"}, "properties": {"repobilityId": "e43b5e618642a89f", "scanner": "scanner-primary", "fingerprint": "2866df15181d8f41", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-472ceaf1e9b3d2b1", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/components/welcome/WelcomeCouponModal.tsx:3"}, "properties": {"repobilityId": "dceaa738465b4571", "scanner": "scanner-primary", "fingerprint": "472ceaf1e9b3d2b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b202885e0c66f9d6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reviews/my/create/page.tsx:139"}, "properties": {"repobilityId": "8c0f3c15b47c2f48", "scanner": "scanner-primary", "fingerprint": "b202885e0c66f9d6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8ee375fed2f9ce16", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cart/page.tsx:248"}, "properties": {"repobilityId": "532cdae26b35a5ac", "scanner": "scanner-primary", "fingerprint": "8ee375fed2f9ce16", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3b63d129a416465", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/inquiries/new/page.tsx:257"}, "properties": {"repobilityId": "ebe0ed198c75a0a5", "scanner": "scanner-primary", "fingerprint": "d3b63d129a416465", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-509bc9b29da9353b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/home/cobuy/request/create/page.tsx:738"}, "properties": {"repobilityId": "4412e0cc772982e7", "scanner": "scanner-primary", "fingerprint": "509bc9b29da9353b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9ba74c04db57ce0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/order/custom/[token]/page.tsx:281"}, "properties": {"repobilityId": "9cea04d5eb6e451b", "scanner": "scanner-primary", "fingerprint": "e9ba74c04db57ce0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-58991d9503423494", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/editor/[productId]/ProductEditorUnified.tsx:892"}, "properties": {"repobilityId": "59d03eb6dcb379e9", "scanner": "scanner-primary", "fingerprint": "58991d9503423494", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-762f8bc9e35d23f9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/editor/[productId]/ProductEditorUnified.tsx:813"}, "properties": {"repobilityId": "bb8c6ec0f2fcaa47", "scanner": "scanner-primary", "fingerprint": "762f8bc9e35d23f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-483137b6611d3c49", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/checkout/page.tsx:886"}, "properties": {"repobilityId": "27faf55d1a0d5285", "scanner": "scanner-primary", "fingerprint": "483137b6611d3c49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6dd146e9e9fe6dfa", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/checkout/success/page.tsx:55"}, "properties": {"repobilityId": "0410483d1983684c", "scanner": "scanner-primary", "fingerprint": "6dd146e9e9fe6dfa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad42d63d6a0dc70f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/mall/[shareToken]/AddProductModal.tsx:255"}, "properties": {"repobilityId": "09508e9195caf14f", "scanner": "scanner-primary", "fingerprint": "ad42d63d6a0dc70f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-70bd0ca24daac265", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/supabase-client.ts:10"}, "properties": {"repobilityId": "fcae73205e94dcbd", "scanner": "scanner-primary", "fingerprint": "70bd0ca24daac265", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d080e00fe00047a", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/canvasUtils.ts:198"}, "properties": {"repobilityId": "3cb18767ed2cf5fa", "scanner": "scanner-primary", "fingerprint": "3d080e00fe00047a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c4500b0aa648b0d", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/notifications/error-mail.ts:6"}, "properties": {"repobilityId": "cfeaec73c98aa019", "scanner": "scanner-primary", "fingerprint": "7c4500b0aa648b0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-907352d6ab503bc5", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/notifications/noise-classifier.ts:3"}, "properties": {"repobilityId": "d1d5ad5f1e398737", "scanner": "scanner-primary", "fingerprint": "907352d6ab503bc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e18972b7496ae9b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/notifications/order.ts:259"}, "properties": {"repobilityId": "b0c546f1cde9ba63", "scanner": "scanner-primary", "fingerprint": "e18972b7496ae9b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}