{"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_bad_chain", "name": "Foundry mined bad chains: Stef-01/Sous", "shortDescription": {"text": "Foundry mined bad chains: Stef-01/Sous"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: Stef-01/Sous\nThread: Stef-01/Sous#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Stef-01/Sous#1\nRepo: Stef-01/Sous\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 4\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 55\nLabels: {'mock_placeholder': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'docs_or_claims': 4, 'ui_or_frontend': 47, 'api_or_backend': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5b44296ed9808888\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"h"}, "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: Stef-01/Sous", "shortDescription": {"text": "Foundry mined mock as real or placeholder: Stef-01/Sous"}, "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: Stef-01/Sous\nThread: Stef-01/Sous#1\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: Stef-01/Sous\nThread: Stef-01/Sous#1\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Stef-01/Sous#1\nRepo: Stef-01/Sous\nIssue/PR number: 1\nGraph consistency label: weak_supervision_needs_review\nNodes: 68\nEdges: 94\nNode types: {'pr_file': 55, 'commit': 4, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_out"}, "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-aca7872c1ba6d0ef", "name": "Stray `console.log` in TS/JS \u2014 scripts/lint-safe-phrasings.ts:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/lint-safe-phrasings.ts:199"}, "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-b2668f049c97846b", "name": "Stray `console.log` in TS/JS \u2014 scripts/screenshot-audit.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/screenshot-audit.ts:31"}, "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-b5659d3a8db8460f", "name": "Stray `console.log` in TS/JS \u2014 scripts/screenshot-deep.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/screenshot-deep.ts:97"}, "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-221944c1819b73b1", "name": "Stray `console.log` in TS/JS \u2014 scripts/gen-cook-summary.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-cook-summary.ts:78"}, "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-c043c7140b84dae5", "name": "Stray `console.log` in TS/JS \u2014 scripts/therapeutics-gap-report.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/therapeutics-gap-report.ts:62"}, "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-2270f0052ec009f1", "name": "Stray `console.log` in TS/JS \u2014 scripts/populate-batch1.js:451", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/populate-batch1.js:451"}, "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-cc2bd574577f5985", "name": "Stray `console.log` in TS/JS \u2014 scripts/therapeutics-review-export.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/therapeutics-review-export.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cff6ddd94153328d", "name": "Stray `console.log` in TS/JS \u2014 scripts/populate-batch2.js:463", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/populate-batch2.js:463"}, "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-4debdfb13da1a4ab", "name": "Stray `console.log` in TS/JS \u2014 scripts/content/save-stanford-image.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/content/save-stanford-image.ts:99"}, "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-7a3b5deaef38bd9c", "name": "Stray `console.log` in TS/JS \u2014 skills/qmd-sessions/convert-sessions.js:346", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 skills/qmd-sessions/convert-sessions.js:346"}, "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-ca7e5e52aa7806c3", "name": "Stray `console.log` in TS/JS \u2014 grants/generate-grant-docx.js:1114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 grants/generate-grant-docx.js:1114"}, "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-c966043e8da0221d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/planner/week-day-list.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/planner/week-day-list.tsx:231"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-250efa0152d30319", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/daily-novelty-chip.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/daily-novelty-chip.tsx:153"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4278633ad72b897", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/tonight-chip.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/tonight-chip.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76df14724aea270a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/friends-strip.tsx:243", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/friends-strip.tsx:243"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3308bf17461894f1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/text-prompt.tsx:559", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/text-prompt.tsx:559"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-208c273e31f751fc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/result-stack.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/result-stack.tsx:279"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8922f189936ece8c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/nutrition-ring-card.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/nutrition-ring-card.tsx:216"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b76fdd5b6a98ff26", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/toast-host.tsx:164", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/toast-host.tsx:164"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d3e226a2a8142c4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/community/pod-home-content.tsx:271", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/community/pod-home-content.tsx:271"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4aa153672325d941", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/plan-cook-chip.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/plan-cook-chip.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f242403b8b887ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/cook-watchlist.tsx:172", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/cook-watchlist.tsx:172"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f42df05c3fd5697", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/timer-stack.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/timer-stack.tsx:86"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-602e996081ad1566", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/article-card.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/article-card.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-ca0f21d1b780f0be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/reels-rail.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/reels-rail.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-c00f65430a28780c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/path/up-next-banner.tsx:53", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/path/up-next-banner.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b01ad16387de23e5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/log-food.tsx:404", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/log-food.tsx:404"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e22b8b4f7df3940c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/pet-sheet.tsx:467", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/pet-sheet.tsx:467"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5cb71cf1e98eaa58", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/tracking-cards.tsx:344", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/tracking-cards.tsx:344"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4cc991596acb0c7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/cook/[slug]/layout.tsx:39", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/cook/[slug]/layout.tsx:39"}, "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-e8a7bb31ed4f6e43", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/sides/page.tsx:171", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/sides/page.tsx:171"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8519f59e8634344f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/eat-out/page.tsx:157", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/eat-out/page.tsx:157"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82b49d5c68531a87", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/recap/page.tsx:249", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/recap/page.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-1bb5292b7d4b143e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/shopping-list/page.tsx:389", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/shopping-list/page.tsx:389"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04248182ae1aa465", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/plan/week/page.tsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/plan/week/page.tsx:177"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7692c1260aeef231", "name": "Stray `console.log` in TS/JS \u2014 src/lib/db/validate-guided-cook.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/db/validate-guided-cook.ts:31"}, "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-44c68d9afefe3839", "name": "Stray `console.log` in TS/JS \u2014 src/lib/db/seed/run-seed.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/db/seed/run-seed.ts:51"}, "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-550f16a8731d1ffb", "name": "Stray `console.log` in TS/JS \u2014 src/lib/nutrition/ocr-pipeline.integration.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/nutrition/ocr-pipeline.integration.ts:22"}, "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-af893055e71fb64d", "name": "Stray `console.log` in TS/JS \u2014 src/lib/charity/stripe-charge.ts:167", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/charity/stripe-charge.ts:167"}, "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-c290cfe663ecc4ab", "name": "Insecure pattern 'node_child_process' in skills/qmd-sessions/hook.js:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in skills/qmd-sessions/hook.js:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c2363662c58d6a19", "name": "Insecure pattern 'node_child_process' in skills/qmd-sessions/lib.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in skills/qmd-sessions/lib.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ee1c49b0b99eba5", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/cook/[slug]/layout.tsx:39", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/cook/[slug]/layout.tsx:39"}, "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-d90afafb4a06fdd4", "name": "Insecure pattern 'local_storage_auth_token' in e2e/phase-20-new-features.spec.ts:119", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in e2e/phase-20-new-features.spec.ts:119"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 113 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 131 placeholder/mock markers across 54 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-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 ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.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-03e41a2b2cb245ef", "name": "Agent instruction contains unpinned remote install: skills/qmd-sessions/SKILL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: skills/qmd-sessions/SKILL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44b3a5f2761d3b51", "name": "Agent instruction contains unpinned remote install: skills/qmd/SKILL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: skills/qmd/SKILL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e417dc05d95ef0fa", "name": "Agent authority lacks a verifier contract: skills/super-save/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/super-save/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0edbd83fd00ff98a", "name": "Agent authority lacks a verifier contract: skills/super-search/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/super-search/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5950e53edf45d61f", "name": "Commented-code block (7 lines) in drizzle.config.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in drizzle.config.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-94906dee19b7ba13", "name": "Commented-code block (6 lines) in next.config.ts:29", "shortDescription": {"text": "Commented-code block (6 lines) in next.config.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-367d16508618460d", "name": "Commented-code block (5 lines) in scripts/lint-safe-phrasings.ts:124", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/lint-safe-phrasings.ts:124"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4283c33edc5d0b1a", "name": "Commented-code block (7 lines) in scripts/bulk-add-reduced-motion-import.mjs:31", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/bulk-add-reduced-motion-import.mjs:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-441e8a0fb2fcb915", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/content/save-stanford-image.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/content/save-stanford-image.ts:79"}, "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-2ead4fba3881f0da", "name": "Commented-code block (5 lines) in src/components/today/quest-pool.ts:260", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/today/quest-pool.ts:260"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f254ea3abb1a81fe", "name": "Commented-code block (7 lines) in src/components/today/quest-card-phase5.test.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/today/quest-card-phase5.test.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63f3f5adfa21e1bc", "name": "Commented-code block (5 lines) in src/components/shared/headroom-header.tsx:128", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/shared/headroom-header.tsx:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd8c60a8b5d5da48", "name": "Commented-code block (5 lines) in src/components/marketing/startup-landing.tsx:136", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketing/startup-landing.tsx:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d946a2d4ae81eb75", "name": "Commented-code block (5 lines) in src/components/marketing/landing-hero-chart.tsx:62", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/marketing/landing-hero-chart.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da63732227a5f23a", "name": "Commented-code block (5 lines) in src/components/community/active-challenge-banner.tsx:90", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/community/active-challenge-banner.tsx:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-220cf2b9d663fd61", "name": "Commented-code block (7 lines) in src/components/content/reel-card.tsx:66", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/content/reel-card.tsx:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64810972687a1e1d", "name": "Commented-code block (6 lines) in src/app/cook/[slug]/page.tsx:125", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/cook/[slug]/page.tsx:125"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb99cfebec61dd3d", "name": "Commented-code block (6 lines) in src/app/(today)/today/page.tsx:42", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/(today)/today/page.tsx:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-835e8c946857cd2f", "name": "Commented-code block (5 lines) in src/app/(today)/today/simplicity-budget.test.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(today)/today/simplicity-budget.test.ts: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-32a6cf2e6c54bd8b", "name": "Commented-code block (5 lines) in src/app/(today)/today/search/page.tsx:75", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/(today)/today/search/page.tsx:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5eadb34254acbe0d", "name": "Commented-code block (5 lines) in src/lib/cook/combined-shapers.test.ts:155", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/cook/combined-shapers.test.ts:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fe4d66dc281b9df", "name": "Commented-code block (12 lines) in src/lib/eco/seasonal-challenges.ts:140", "shortDescription": {"text": "Commented-code block (12 lines) in src/lib/eco/seasonal-challenges.ts:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c86cf5a46accf092", "name": "Commented-code block (6 lines) in src/lib/voice/conversation-fallback.ts:142", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/voice/conversation-fallback.ts:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-add05cb2b0cfdb49", "name": "Commented-code block (6 lines) in src/lib/trpc/server.ts:33", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/trpc/server.ts:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf557e769002ed6e", "name": "Commented-code block (5 lines) in src/lib/hooks/use-cook-sessions.ts:164", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-cook-sessions.ts:164"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd8ecdbcf4bc2ecb", "name": "Commented-code block (7 lines) in src/lib/hooks/use-user-weights.ts:145", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/hooks/use-user-weights.ts:145"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8953b47a75b5e6a3", "name": "Commented-code block (6 lines) in src/lib/hooks/use-cook-store.ts:174", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/hooks/use-cook-store.ts:174"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0b0551ad3cb6fb6", "name": "Commented-code block (5 lines) in src/lib/hooks/use-nutrition-diary.ts:482", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-nutrition-diary.ts:482"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8261b562e8fb9d42", "name": "Commented-code block (5 lines) in src/lib/engine/time-rerank.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/engine/time-rerank.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b515269897bf1c2", "name": "Commented-code block (6 lines) in src/lib/engine/therapeutic-fit.ts:77", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/engine/therapeutic-fit.ts:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b0a0a472cab64f4", "name": "Commented-code block (7 lines) in src/lib/engine/v3-eval.test.ts:271", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/engine/v3-eval.test.ts:271"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0be85141010d92d0", "name": "Commented-code block (7 lines) in src/lib/db/schema.ts:163", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/db/schema.ts:163"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3d8e07b0d2ee476", "name": "Commented-code block (5 lines) in src/lib/nutrition/resolve-dish-lines.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/nutrition/resolve-dish-lines.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a39b4b83d4e626b4", "name": "Commented-code block (6 lines) in src/lib/therapeutics/feature-flag.ts:35", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/therapeutics/feature-flag.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20280"}, "properties": {"repository": "Stef-01/Sous", "repoUrl": "https://github.com/Stef-01/Sous", "branch": "main"}, "results": [{"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: Stef-01/Sous"}, "properties": {"repobilityId": 316413, "scanner": "foundry_dataset", "fingerprint": "f271ea2a5ae857baa22698e2318840669009abc88db62812386921bffb0e92e3", "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": "Stef-01/Sous#1", "human_labels": ["api_or_backend", "docs_or_claims", "mock_placeholder", "ui_or_frontend"], "issue_number": "1", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.73, "repo_full_name": "Stef-01/Sous", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-1afb3de7cae4b4b4", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 6, "designs": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 55, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 4, "docs_or_claims": 4, "ui_or_frontend": 47}, "linked_commit_count": 4, "helicopter_view_count": 4, "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": 1, "design_schema_api_artifact_count": 1}, "text": "Comment chain pattern product: bad_chains\nRepo: Stef-01/Sous\nThread: Stef-01/Sous#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: Stef-01/Sous#1\nRepo: Stef-01/Sous\nThread label: thread_has_human_issue_and_fix_context\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 4\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 55\nLabels: {'mock_placeholder': 1}\nPolarities: {'bad': 1}\nChanged file labels: {'docs_or_claims': 4, 'ui_or_frontend': 47, 'api_or_backend': 4}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-5b44296ed9808888\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"mock_placeholder\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/Stef-01/Sous/pull/1\",\n    \"text\": \"GitHub feedback: mock_placeholder\\nPolarity: bad\\nKind: pull_request_body\\nRepo: Stef-01/Sous\\nAuthor: Stef-01 (User)\\nURL: https://github.com/Stef-01/Sous/pull/1\\nTitle: feat: add combined mains + sides guided cook flow, visual polish, and\u2026\\nBody:\\n\u2026 app features\\r\\n\\r\\nBuild a complete combined cook system where users cook a main dish + 1-3 sides in a single guided session, with segmented ingredients and sequential cook flows.\\r\\n\\r\\nCombined cook flow (Phases A-F):\\r\\n- Add 5 meal guided cook recipes (pizza margherita, butter chicken, fish tacos, pad thai, chicken teriyaki) with real researched instructions\\r\\n- Add getCombinedSteps tRPC endpoint returning main + sides + cook order\\r\\n- Extend cook store with combined mode (dishes[], currentDishIndex, nextDish)\\r\\n- Build /cook/combined page with CombinedMissionScreen, segmented ingredient list, dish transition cards, and unified win screen\\r\\n- Wire combined flow into result stack via meal slug resolution from pairing engine\\r\\n- Add resolveMealSlug() for fuzzy name/alias matching to meals.json\\r\\n\\r\\nAdditional features:\\r\\n- Owl mascot relocated from page body to header avatar position\\r\\n- Duolingo-inspired spring animations across all components\\r\\n- Bread pers\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-ae96741accf95263\",\n    \"filename\": \"COMBINED_COOK_PLAN.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"added\",\n    \"additions\": 230,\n    \"deletions\": 0,\n    \"changes\": 230,\n    \"blob_url\": \"https://github.com/Stef-01/Sous/blob/c2a78a8df761825ebc42599b3aa0ffe058b1b129/COMBINED_COOK_PLAN.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-2adc00de1362bedd\",\n    \"filename\": \"claude.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"modified\",\n    \"additions\": 2,\n    \"deletions\": 0,\n    \"changes\": 2,\n    \"blob_url\": \"https://github.com/Stef-01/Sous/blob/c2a78a8df761825ebc42599b3aa0ffe058b1b129/claude.md\"\n  },\n  {\n    \"\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/Stef-01/Sous", "source_id": "comment-chain-pattern-bad_chains-9346655027bd658b", "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": "Stef-01/Sous", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_fake_real_gap", "level": "error", "message": {"text": "Foundry mined mock as real or placeholder: Stef-01/Sous"}, "properties": {"repobilityId": 324893, "scanner": "foundry_dataset", "fingerprint": "909683d498feaf64960a08b7f4c54e92c9fd4f0f9e3c4976fbd9d756c3d5852c", "category": "practices", "severity": "critical", "confidence": 0.82, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Mock, sample, placeholder, or self-attested behavior treated as real", "intent": "Hard negatives for fake completeness and missing real data paths.", "labels": {"api_or_backend": 4, "docs_or_claims": 4, "ui_or_frontend": 47, "mock_placeholder": 1, "verification_or_tests": 4, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3, "comment_has_related_commit_context": 1, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "mock_as_real_or_placeholder", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "mock_as_real_or_placeholder", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 94, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 55, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_links_commit": 4, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 68, "node_types": {"repo": 1, "commit": 4, "thread": 1, "comment": 1, "pr_file": 55, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "Stef-01/Sous#1", "issue_number": "1", "quality_tiers": {"weak_supervision": 3}, "repo_full_name": "Stef-01/Sous", "training_usage": "hard_negative", "source_motif_id": "graph-pattern-motif-thread-de5ef10dd751f0f5", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"api_or_backend": 16, "docs_or_claims": 16, "ui_or_frontend": 188}}, "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: Stef-01/Sous\nThread: Stef-01/Sous#1\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: Stef-01/Sous\nThread: Stef-01/Sous#1\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: Stef-01/Sous#1\nRepo: Stef-01/Sous\nIssue/PR number: 1\nGraph consistency label: weak_supervision_needs_review\nNodes: 68\nEdges: 94\nNode types: {'pr_file': 55, 'commit': 4, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 55, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'comment_chain_links_commit': 4, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'ui_or_frontend': 47, 'docs_or_claims': 4, 'api_or_backend': 4, 'verification_or_tests': 4, 'ambiguous_needs_more_evidence': 3, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'mock_placeholder': 1, 'comment_has_related_commit_context': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'weak_supervision': 3}\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/Stef-01/Sous", "source_id": "graph-query-motif_query-b6a5f58b90f3ee35", "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": "Stef-01/Sous", "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-aca7872c1ba6d0ef", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/lint-safe-phrasings.ts:199"}, "properties": {"repobilityId": "19564c058e7b81e9", "scanner": "scanner-primary", "fingerprint": "aca7872c1ba6d0ef", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b2668f049c97846b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/screenshot-audit.ts:31"}, "properties": {"repobilityId": "44b35324da8b475b", "scanner": "scanner-primary", "fingerprint": "b2668f049c97846b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5659d3a8db8460f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/screenshot-deep.ts:97"}, "properties": {"repobilityId": "1596c05fd9532b2e", "scanner": "scanner-primary", "fingerprint": "b5659d3a8db8460f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-221944c1819b73b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-cook-summary.ts:78"}, "properties": {"repobilityId": "d29b361e2d5d47eb", "scanner": "scanner-primary", "fingerprint": "221944c1819b73b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c043c7140b84dae5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/therapeutics-gap-report.ts:62"}, "properties": {"repobilityId": "3109960f3121dd2d", "scanner": "scanner-primary", "fingerprint": "c043c7140b84dae5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2270f0052ec009f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/populate-batch1.js:451"}, "properties": {"repobilityId": "23da724d6fed7dd6", "scanner": "scanner-primary", "fingerprint": "2270f0052ec009f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc2bd574577f5985", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/therapeutics-review-export.ts:42"}, "properties": {"repobilityId": "a5f27f90f182f8eb", "scanner": "scanner-primary", "fingerprint": "cc2bd574577f5985", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cff6ddd94153328d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/populate-batch2.js:463"}, "properties": {"repobilityId": "41cb4aedcc00f220", "scanner": "scanner-primary", "fingerprint": "cff6ddd94153328d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4debdfb13da1a4ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/content/save-stanford-image.ts:99"}, "properties": {"repobilityId": "b33d069e5dada68f", "scanner": "scanner-primary", "fingerprint": "4debdfb13da1a4ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a3b5deaef38bd9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 skills/qmd-sessions/convert-sessions.js:346"}, "properties": {"repobilityId": "d42192454380c832", "scanner": "scanner-primary", "fingerprint": "7a3b5deaef38bd9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca7e5e52aa7806c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 grants/generate-grant-docx.js:1114"}, "properties": {"repobilityId": "5320cb277c50030e", "scanner": "scanner-primary", "fingerprint": "ca7e5e52aa7806c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c966043e8da0221d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/planner/week-day-list.tsx:231"}, "properties": {"repobilityId": "52a470988f84d5c2", "scanner": "scanner-primary", "fingerprint": "c966043e8da0221d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-250efa0152d30319", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/daily-novelty-chip.tsx:153"}, "properties": {"repobilityId": "7bba2f7446852472", "scanner": "scanner-primary", "fingerprint": "250efa0152d30319", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d4278633ad72b897", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/tonight-chip.tsx:89"}, "properties": {"repobilityId": "81a16e30310fa476", "scanner": "scanner-primary", "fingerprint": "d4278633ad72b897", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-76df14724aea270a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/friends-strip.tsx:243"}, "properties": {"repobilityId": "d19fffc0473a7e25", "scanner": "scanner-primary", "fingerprint": "76df14724aea270a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3308bf17461894f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/text-prompt.tsx:559"}, "properties": {"repobilityId": "a591de6899f32c6c", "scanner": "scanner-primary", "fingerprint": "3308bf17461894f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-208c273e31f751fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/today/result-stack.tsx:279"}, "properties": {"repobilityId": "510693018b197cc8", "scanner": "scanner-primary", "fingerprint": "208c273e31f751fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8922f189936ece8c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/nutrition-ring-card.tsx:216"}, "properties": {"repobilityId": "61c72c4d2e4a3642", "scanner": "scanner-primary", "fingerprint": "8922f189936ece8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b76fdd5b6a98ff26", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/shared/toast-host.tsx:164"}, "properties": {"repobilityId": "131fea1f9bfb4205", "scanner": "scanner-primary", "fingerprint": "b76fdd5b6a98ff26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9d3e226a2a8142c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/community/pod-home-content.tsx:271"}, "properties": {"repobilityId": "68a0cf9b120105f8", "scanner": "scanner-primary", "fingerprint": "9d3e226a2a8142c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4aa153672325d941", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/plan-cook-chip.tsx:75"}, "properties": {"repobilityId": "2c556263fb4b3d88", "scanner": "scanner-primary", "fingerprint": "4aa153672325d941", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f242403b8b887ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/cook-watchlist.tsx:172"}, "properties": {"repobilityId": "f66112f8b33127c5", "scanner": "scanner-primary", "fingerprint": "9f242403b8b887ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f42df05c3fd5697", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/guided-cook/timer-stack.tsx:86"}, "properties": {"repobilityId": "309a64df52296c89", "scanner": "scanner-primary", "fingerprint": "1f42df05c3fd5697", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-602e996081ad1566", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/article-card.tsx:38"}, "properties": {"repobilityId": "54e54156b2a3e60d", "scanner": "scanner-primary", "fingerprint": "602e996081ad1566", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ca0f21d1b780f0be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/content/reels-rail.tsx:93"}, "properties": {"repobilityId": "f7a6ac4170aa979f", "scanner": "scanner-primary", "fingerprint": "ca0f21d1b780f0be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c00f65430a28780c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/path/up-next-banner.tsx:53"}, "properties": {"repobilityId": "abbd86e2d1ee94c2", "scanner": "scanner-primary", "fingerprint": "c00f65430a28780c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b01ad16387de23e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/log-food.tsx:404"}, "properties": {"repobilityId": "2e8ac28d6b2ede32", "scanner": "scanner-primary", "fingerprint": "b01ad16387de23e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e22b8b4f7df3940c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/pet-sheet.tsx:467"}, "properties": {"repobilityId": "04d8af1d97d845d0", "scanner": "scanner-primary", "fingerprint": "e22b8b4f7df3940c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5cb71cf1e98eaa58", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/nutrition/tracking-cards.tsx:344"}, "properties": {"repobilityId": "f717400598eedbd7", "scanner": "scanner-primary", "fingerprint": "5cb71cf1e98eaa58", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a4cc991596acb0c7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/cook/[slug]/layout.tsx:39"}, "properties": {"repobilityId": "33ab99a1140ec7e0", "scanner": "scanner-primary", "fingerprint": "a4cc991596acb0c7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e8a7bb31ed4f6e43", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/sides/page.tsx:171"}, "properties": {"repobilityId": "1fa5d077b9548698", "scanner": "scanner-primary", "fingerprint": "e8a7bb31ed4f6e43", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8519f59e8634344f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/eat-out/page.tsx:157"}, "properties": {"repobilityId": "ac157bd4c8410dfd", "scanner": "scanner-primary", "fingerprint": "8519f59e8634344f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82b49d5c68531a87", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/recap/page.tsx:249"}, "properties": {"repobilityId": "e740905acb1770f1", "scanner": "scanner-primary", "fingerprint": "82b49d5c68531a87", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1bb5292b7d4b143e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/shopping-list/page.tsx:389"}, "properties": {"repobilityId": "22ca7775e9745074", "scanner": "scanner-primary", "fingerprint": "1bb5292b7d4b143e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04248182ae1aa465", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/(path)/path/plan/week/page.tsx:177"}, "properties": {"repobilityId": "6241714834be49d8", "scanner": "scanner-primary", "fingerprint": "04248182ae1aa465", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7692c1260aeef231", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/db/validate-guided-cook.ts:31"}, "properties": {"repobilityId": "d27a8dd2b7b22c6e", "scanner": "scanner-primary", "fingerprint": "7692c1260aeef231", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44c68d9afefe3839", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/db/seed/run-seed.ts:51"}, "properties": {"repobilityId": "ddc6d4daeea821d3", "scanner": "scanner-primary", "fingerprint": "44c68d9afefe3839", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-550f16a8731d1ffb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/nutrition/ocr-pipeline.integration.ts:22"}, "properties": {"repobilityId": "aa0712c4f6557f69", "scanner": "scanner-primary", "fingerprint": "550f16a8731d1ffb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af893055e71fb64d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/charity/stripe-charge.ts:167"}, "properties": {"repobilityId": "8f9e418117a02c76", "scanner": "scanner-primary", "fingerprint": "af893055e71fb64d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c290cfe663ecc4ab", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in skills/qmd-sessions/hook.js:8"}, "properties": {"repobilityId": "e9b6e05a0f823d30", "scanner": "scanner-primary", "fingerprint": "c290cfe663ecc4ab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/qmd-sessions/hook.js"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-c2363662c58d6a19", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in skills/qmd-sessions/lib.js:3"}, "properties": {"repobilityId": "1a5fd00c2bfd02e7", "scanner": "scanner-primary", "fingerprint": "c2363662c58d6a19", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/qmd-sessions/lib.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-9ee1c49b0b99eba5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/cook/[slug]/layout.tsx:39"}, "properties": {"repobilityId": "12a73dcd35d89694", "scanner": "scanner-primary", "fingerprint": "9ee1c49b0b99eba5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/cook/[slug]/layout.tsx"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-d90afafb4a06fdd4", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in e2e/phase-20-new-features.spec.ts:119"}, "properties": {"repobilityId": "36f8e272fadbcba7", "scanner": "scanner-primary", "fingerprint": "d90afafb4a06fdd4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "e2e/phase-20-new-features.spec.ts"}, "region": {"startLine": 119}}}]}, {"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-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "bba22942a401fbbb", "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": "b21776222fc946dc", "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": "6651b08de666f4ae", "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": "1327742de5f2e233", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "c3354f3eb7db7ac8", "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": "1036ee1d4880e555", "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": "d49da47303d7ae56", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-03e41a2b2cb245ef", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: skills/qmd-sessions/SKILL.md"}, "properties": {"repobilityId": "052e2be21075888b", "scanner": "scanner-primary", "fingerprint": "03e41a2b2cb245ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/qmd-sessions/SKILL.md"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-44b3a5f2761d3b51", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: skills/qmd/SKILL.md"}, "properties": {"repobilityId": "ce02546bd9f70f32", "scanner": "scanner-primary", "fingerprint": "44b3a5f2761d3b51", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/qmd/SKILL.md"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-e417dc05d95ef0fa", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/super-save/SKILL.md"}, "properties": {"repobilityId": "dd1f6a60932d346c", "scanner": "scanner-primary", "fingerprint": "e417dc05d95ef0fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/super-save/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0edbd83fd00ff98a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/super-search/SKILL.md"}, "properties": {"repobilityId": "bcaab06b37be9cb6", "scanner": "scanner-primary", "fingerprint": "0edbd83fd00ff98a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/super-search/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-5950e53edf45d61f", "level": "none", "message": {"text": "Commented-code block (7 lines) in drizzle.config.ts:3"}, "properties": {"repobilityId": "7aad574d3f84a035", "scanner": "scanner-primary", "fingerprint": "5950e53edf45d61f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-94906dee19b7ba13", "level": "none", "message": {"text": "Commented-code block (6 lines) in next.config.ts:29"}, "properties": {"repobilityId": "90090c6cc7f593f8", "scanner": "scanner-primary", "fingerprint": "94906dee19b7ba13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-367d16508618460d", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/lint-safe-phrasings.ts:124"}, "properties": {"repobilityId": "2ee19fc82e3e68c3", "scanner": "scanner-primary", "fingerprint": "367d16508618460d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4283c33edc5d0b1a", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/bulk-add-reduced-motion-import.mjs:31"}, "properties": {"repobilityId": "3adcc9421f0c1c0f", "scanner": "scanner-primary", "fingerprint": "4283c33edc5d0b1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-441e8a0fb2fcb915", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/content/save-stanford-image.ts:79"}, "properties": {"repobilityId": "712ba2f7aeadb415", "scanner": "scanner-primary", "fingerprint": "441e8a0fb2fcb915", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ead4fba3881f0da", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/today/quest-pool.ts:260"}, "properties": {"repobilityId": "1f49896095160dba", "scanner": "scanner-primary", "fingerprint": "2ead4fba3881f0da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f254ea3abb1a81fe", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/today/quest-card-phase5.test.ts:4"}, "properties": {"repobilityId": "c62877a236cbd01c", "scanner": "scanner-primary", "fingerprint": "f254ea3abb1a81fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63f3f5adfa21e1bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/shared/headroom-header.tsx:128"}, "properties": {"repobilityId": "8359c57eb497847c", "scanner": "scanner-primary", "fingerprint": "63f3f5adfa21e1bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd8c60a8b5d5da48", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketing/startup-landing.tsx:136"}, "properties": {"repobilityId": "ff44b3aa3c555e6a", "scanner": "scanner-primary", "fingerprint": "cd8c60a8b5d5da48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d946a2d4ae81eb75", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/marketing/landing-hero-chart.tsx:62"}, "properties": {"repobilityId": "dfd8a8cca0707255", "scanner": "scanner-primary", "fingerprint": "d946a2d4ae81eb75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da63732227a5f23a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/community/active-challenge-banner.tsx:90"}, "properties": {"repobilityId": "215968c50ca4aad5", "scanner": "scanner-primary", "fingerprint": "da63732227a5f23a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-220cf2b9d663fd61", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/content/reel-card.tsx:66"}, "properties": {"repobilityId": "1194408d5a18b94f", "scanner": "scanner-primary", "fingerprint": "220cf2b9d663fd61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64810972687a1e1d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/cook/[slug]/page.tsx:125"}, "properties": {"repobilityId": "c25188f9e78f42d2", "scanner": "scanner-primary", "fingerprint": "64810972687a1e1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb99cfebec61dd3d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/(today)/today/page.tsx:42"}, "properties": {"repobilityId": "222e0e3f1f795a36", "scanner": "scanner-primary", "fingerprint": "eb99cfebec61dd3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-835e8c946857cd2f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(today)/today/simplicity-budget.test.ts:24"}, "properties": {"repobilityId": "d9b9161a912300f9", "scanner": "scanner-primary", "fingerprint": "835e8c946857cd2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32a6cf2e6c54bd8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/(today)/today/search/page.tsx:75"}, "properties": {"repobilityId": "dd5311260e3632b3", "scanner": "scanner-primary", "fingerprint": "32a6cf2e6c54bd8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5eadb34254acbe0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/cook/combined-shapers.test.ts:155"}, "properties": {"repobilityId": "6d8648506ca305d2", "scanner": "scanner-primary", "fingerprint": "5eadb34254acbe0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fe4d66dc281b9df", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/lib/eco/seasonal-challenges.ts:140"}, "properties": {"repobilityId": "63ffa383201e5331", "scanner": "scanner-primary", "fingerprint": "8fe4d66dc281b9df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c86cf5a46accf092", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/voice/conversation-fallback.ts:142"}, "properties": {"repobilityId": "40a3df2a10730598", "scanner": "scanner-primary", "fingerprint": "c86cf5a46accf092", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-add05cb2b0cfdb49", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/trpc/server.ts:33"}, "properties": {"repobilityId": "3bd08ac7d937665d", "scanner": "scanner-primary", "fingerprint": "add05cb2b0cfdb49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf557e769002ed6e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-cook-sessions.ts:164"}, "properties": {"repobilityId": "b601a19ec5d78332", "scanner": "scanner-primary", "fingerprint": "bf557e769002ed6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd8ecdbcf4bc2ecb", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/hooks/use-user-weights.ts:145"}, "properties": {"repobilityId": "8ac6f93f291b97ce", "scanner": "scanner-primary", "fingerprint": "cd8ecdbcf4bc2ecb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8953b47a75b5e6a3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/hooks/use-cook-store.ts:174"}, "properties": {"repobilityId": "e0300815a148912f", "scanner": "scanner-primary", "fingerprint": "8953b47a75b5e6a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0b0551ad3cb6fb6", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/hooks/use-nutrition-diary.ts:482"}, "properties": {"repobilityId": "24562774b9e44a02", "scanner": "scanner-primary", "fingerprint": "d0b0551ad3cb6fb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8261b562e8fb9d42", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/engine/time-rerank.ts:118"}, "properties": {"repobilityId": "824b356431ca01a4", "scanner": "scanner-primary", "fingerprint": "8261b562e8fb9d42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b515269897bf1c2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/engine/therapeutic-fit.ts:77"}, "properties": {"repobilityId": "b7af01618d7016a4", "scanner": "scanner-primary", "fingerprint": "1b515269897bf1c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b0a0a472cab64f4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/engine/v3-eval.test.ts:271"}, "properties": {"repobilityId": "6306a2d747f71aee", "scanner": "scanner-primary", "fingerprint": "5b0a0a472cab64f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0be85141010d92d0", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/db/schema.ts:163"}, "properties": {"repobilityId": "f1b5f8032799c276", "scanner": "scanner-primary", "fingerprint": "0be85141010d92d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3d8e07b0d2ee476", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/nutrition/resolve-dish-lines.ts:51"}, "properties": {"repobilityId": "cf761fd5fdfb9586", "scanner": "scanner-primary", "fingerprint": "d3d8e07b0d2ee476", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a39b4b83d4e626b4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/therapeutics/feature-flag.ts:35"}, "properties": {"repobilityId": "f63f57f7d05716f6", "scanner": "scanner-primary", "fingerprint": "a39b4b83d4e626b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}