{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-ade294bbd2df959a", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/auto-analyze-applicant/index.ts:425", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/auto-analyze-applicant/index.ts:425"}, "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-962e2311fca97c61", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DepartmentComparison.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DepartmentComparison.tsx:219"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e21ab4b8f9df1ee5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/JobCard.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/JobCard.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b58a49de2f97f2f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/ApplicantsListView.tsx:432", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/ApplicantsListView.tsx:432"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc885a0f8b2913a5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DepartmentHeatmap.tsx:172", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DepartmentHeatmap.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-734abdfa19e3d77b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/HrTeam.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/HrTeam.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-215446f855d052d9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/WhyThisScore.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/WhyThisScore.tsx:213"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ce5835a91908653", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/PipelineCandidateCard.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/PipelineCandidateCard.tsx:78"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-763d870d184eed81", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/CandidateProfile.tsx:177", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/CandidateProfile.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-92d0b4ec8194c1b6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/AIAnalysisResults.tsx:258", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/AIAnalysisResults.tsx:258"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-532518f78707721c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DashboardOverview.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DashboardOverview.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-75e1e902ea0d8cd5", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/JobFormModal.tsx:589", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/JobFormModal.tsx:589"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0443d024d1f7b678", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/CVLibrary.tsx:925", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/CVLibrary.tsx:925"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6905ef495619d75", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/InterviewPrep.tsx:186", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/InterviewPrep.tsx:186"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2072ba6028eef3bc", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/TimeToHire.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/TimeToHire.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-c638898bc125128f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/BulkComparison.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/BulkComparison.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-977bb719babf2162", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/CandidateCompareView.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/CandidateCompareView.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57da9f82355db45f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/SmartRankingRefresh.tsx:508", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/SmartRankingRefresh.tsx:508"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a1c909c7f1b8b4f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/TrashBin.tsx:123", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/TrashBin.tsx:123"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ebf2070cf395eb8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/GDPRRetention.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/GDPRRetention.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5e1cda6e1f4ccf9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/CandidateAnalysis.tsx:278", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/CandidateAnalysis.tsx:278"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a34edf8fe4e103e6", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/DuplicateDetection.tsx:130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/DuplicateDetection.tsx:130"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfa1f513e112cc82", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/TalentPoolInsights.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/TalentPoolInsights.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a97b3990b4d1dc9a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/DataCompleteness.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/DataCompleteness.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-a25c433b88ffeb54", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/sections/WhatWeBuildSection.tsx:197", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/sections/WhatWeBuildSection.tsx:197"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b209c77e83b119fd", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70"}, "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-e8c975d653d37623", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard.tsx:485", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard.tsx:485"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6a3e6eb90831f2f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/JobsPage.tsx:111", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/JobsPage.tsx:111"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8443711782be5a17", "name": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ApplyPage.tsx:694", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ApplyPage.tsx:694"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93d0283845aa2c2d", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a1769fc54efdd7d4", "name": "Very large file: src/components/careers/CVLibrary.tsx (1225 lines)", "shortDescription": {"text": "Very large file: src/components/careers/CVLibrary.tsx (1225 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "10 test file(s) for 185 source file(s) (ratio 0.05). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 71 placeholder/mock markers across 27 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c5f98b152cddb6d", "name": "Agent authority lacks a verifier contract: .claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83d5ccdbb239eb07", "name": "Commented-code block (5 lines) in supabase/functions/ai-job-assist/index.ts:271", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/ai-job-assist/index.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-22e3f6fa0399bda8", "name": "Commented-code block (10 lines) in supabase/functions/admin-data/index.ts:8", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/admin-data/index.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0def70ee0d7c77ef", "name": "Commented-code block (7 lines) in supabase/functions/analyze-cv/index.ts:70", "shortDescription": {"text": "Commented-code block (7 lines) in supabase/functions/analyze-cv/index.ts:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed161f34943ff4c7", "name": "Commented-code block (10 lines) in supabase/functions/submit-application/index.ts:5", "shortDescription": {"text": "Commented-code block (10 lines) in supabase/functions/submit-application/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-088e86f50827a7ed", "name": "Commented-code block (6 lines) in supabase/functions/get-cv-url/index.ts:29", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/get-cv-url/index.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-48aa83d8483c0c56", "name": "Commented-code block (5 lines) in supabase/functions/verify-password/index.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/verify-password/index.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cd2a384adea3581", "name": "Commented-code block (5 lines) in supabase/functions/_shared/ai.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/ai.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-9feb2db6e1759dcf", "name": "Commented-code block (5 lines) in supabase/functions/_shared/cors.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/cors.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c4004db594a4a74", "name": "Commented-code block (6 lines) in supabase/functions/_shared/seniority.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/seniority.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6de01b31f3285c4", "name": "Commented-code block (5 lines) in supabase/functions/_shared/validate-session.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/validate-session.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-edb7f85907116ddb", "name": "Commented-code block (6 lines) in src/App.tsx:58", "shortDescription": {"text": "Commented-code block (6 lines) in src/App.tsx:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29f4c6e6564e3422", "name": "Commented-code block (6 lines) in src/integrations/supabase/client.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in src/integrations/supabase/client.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e1a59ecbdf9ac7d1", "name": "Commented-code block (6 lines) in src/components/careers/AIAnalysisPanel.tsx:17", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/careers/AIAnalysisPanel.tsx:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-776d0a68ee1a34a4", "name": "Commented-code block (6 lines) in src/components/careers/WorkforceSignal.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/careers/WorkforceSignal.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-115c04deb6e970c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/careers/CVLibrary.tsx:200", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/careers/CVLibrary.tsx:200"}, "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-ee879e68ef6f4e79", "name": "Commented-code block (8 lines) in src/components/careers/sections/WhyItMattersSection.tsx:9", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/careers/sections/WhyItMattersSection.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27d128e8967b55e2", "name": "Commented-code block (6 lines) in src/components/careers/sections/GrowthExperienceSection.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/careers/sections/GrowthExperienceSection.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21d478a556208c1c", "name": "Commented-code block (9 lines) in src/components/careers/sections/WhatWeBuildSection.tsx:12", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/careers/sections/WhatWeBuildSection.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95cd3080bc3c3f9f", "name": "Commented-code block (7 lines) in src/components/careers/sections/HeroSection.tsx:9", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/careers/sections/HeroSection.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de4ac70ef07f3d4c", "name": "Commented-code block (5 lines) in src/contexts/CareersContext.tsx:179", "shortDescription": {"text": "Commented-code block (5 lines) in src/contexts/CareersContext.tsx:179"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb9a53629bbad62d", "name": "Commented-code block (5 lines) in src/lib/deptColor.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/deptColor.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ad899a7f86343c2", "name": "Commented-code block (5 lines) in src/pages/Dashboard.tsx:57", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/Dashboard.tsx:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2659acaa49bd33d", "name": "Commented-code block (5 lines) in src/pages/ApplyPage.tsx:294", "shortDescription": {"text": "Commented-code block (5 lines) in src/pages/ApplyPage.tsx:294"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-319e66a630e14977", "name": "2 env vars used in code but missing from .env.example", "shortDescription": {"text": "2 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DEV`, `VITE_SITE_URL`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be53176d3f806105", "name": "Frontend route `/jobs/:id` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/jobs/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f8c0871d59597a62", "name": "Frontend route `/jobs/:id/apply` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/jobs/:id/apply` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-82239dbed16e75b5", "name": "Frontend route `/hr/join` has no Link/navigate to it \u2014 src/App.tsx", "shortDescription": {"text": "Frontend route `/hr/join` has no Link/navigate to it \u2014 src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19015"}, "properties": {"repository": "sayedjehad2002/Lumofy-Careers", "repoUrl": "https://github.com/sayedjehad2002/Lumofy-Careers", "branch": "main"}, "results": [{"ruleId": "scanner-ade294bbd2df959a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/auto-analyze-applicant/index.ts:425"}, "properties": {"repobilityId": "1d2038671a1eadf8", "scanner": "scanner-primary", "fingerprint": "ade294bbd2df959a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-962e2311fca97c61", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DepartmentComparison.tsx:219"}, "properties": {"repobilityId": "a101557f86c57c0e", "scanner": "scanner-primary", "fingerprint": "962e2311fca97c61", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e21ab4b8f9df1ee5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/JobCard.tsx:62"}, "properties": {"repobilityId": "64f9f08a2ffc90ff", "scanner": "scanner-primary", "fingerprint": "e21ab4b8f9df1ee5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8b58a49de2f97f2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/ApplicantsListView.tsx:432"}, "properties": {"repobilityId": "712dbf5eda550437", "scanner": "scanner-primary", "fingerprint": "8b58a49de2f97f2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc885a0f8b2913a5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DepartmentHeatmap.tsx:172"}, "properties": {"repobilityId": "13f1b63991fde8f9", "scanner": "scanner-primary", "fingerprint": "fc885a0f8b2913a5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-734abdfa19e3d77b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/HrTeam.tsx:134"}, "properties": {"repobilityId": "258ce644cb04f741", "scanner": "scanner-primary", "fingerprint": "734abdfa19e3d77b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-215446f855d052d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/WhyThisScore.tsx:213"}, "properties": {"repobilityId": "d72ba682190650e7", "scanner": "scanner-primary", "fingerprint": "215446f855d052d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9ce5835a91908653", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/PipelineCandidateCard.tsx:78"}, "properties": {"repobilityId": "a0dadb10eeafa24a", "scanner": "scanner-primary", "fingerprint": "9ce5835a91908653", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-763d870d184eed81", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/CandidateProfile.tsx:177"}, "properties": {"repobilityId": "7bda25b89fdb3904", "scanner": "scanner-primary", "fingerprint": "763d870d184eed81", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-92d0b4ec8194c1b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/AIAnalysisResults.tsx:258"}, "properties": {"repobilityId": "d6f2d59595b6fa58", "scanner": "scanner-primary", "fingerprint": "92d0b4ec8194c1b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-532518f78707721c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/DashboardOverview.tsx:279"}, "properties": {"repobilityId": "a3ce6f49863bff20", "scanner": "scanner-primary", "fingerprint": "532518f78707721c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75e1e902ea0d8cd5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/JobFormModal.tsx:589"}, "properties": {"repobilityId": "115fe8c33e550e2e", "scanner": "scanner-primary", "fingerprint": "75e1e902ea0d8cd5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0443d024d1f7b678", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/CVLibrary.tsx:925"}, "properties": {"repobilityId": "a9fdcf874a4ea428", "scanner": "scanner-primary", "fingerprint": "0443d024d1f7b678", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6905ef495619d75", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/InterviewPrep.tsx:186"}, "properties": {"repobilityId": "0f731dfbacf96c51", "scanner": "scanner-primary", "fingerprint": "d6905ef495619d75", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2072ba6028eef3bc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/TimeToHire.tsx:86"}, "properties": {"repobilityId": "071c561fe4c58123", "scanner": "scanner-primary", "fingerprint": "2072ba6028eef3bc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c638898bc125128f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/BulkComparison.tsx:96"}, "properties": {"repobilityId": "d3a378c6fb91d3db", "scanner": "scanner-primary", "fingerprint": "c638898bc125128f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-977bb719babf2162", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/CandidateCompareView.tsx:151"}, "properties": {"repobilityId": "870b77e58e65705b", "scanner": "scanner-primary", "fingerprint": "977bb719babf2162", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-57da9f82355db45f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/applicants/SmartRankingRefresh.tsx:508"}, "properties": {"repobilityId": "5abaa5c84fee3e0a", "scanner": "scanner-primary", "fingerprint": "57da9f82355db45f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8a1c909c7f1b8b4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/TrashBin.tsx:123"}, "properties": {"repobilityId": "7cf8fe51796ab0dd", "scanner": "scanner-primary", "fingerprint": "8a1c909c7f1b8b4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4ebf2070cf395eb8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/GDPRRetention.tsx:97"}, "properties": {"repobilityId": "db31c879ec32bbee", "scanner": "scanner-primary", "fingerprint": "4ebf2070cf395eb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a5e1cda6e1f4ccf9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/CandidateAnalysis.tsx:278"}, "properties": {"repobilityId": "fc1ed964ac427740", "scanner": "scanner-primary", "fingerprint": "a5e1cda6e1f4ccf9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a34edf8fe4e103e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/DuplicateDetection.tsx:130"}, "properties": {"repobilityId": "620913926a0feee2", "scanner": "scanner-primary", "fingerprint": "a34edf8fe4e103e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dfa1f513e112cc82", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/TalentPoolInsights.tsx:90"}, "properties": {"repobilityId": "491349b9193c7a30", "scanner": "scanner-primary", "fingerprint": "dfa1f513e112cc82", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a97b3990b4d1dc9a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/cvlibrary/DataCompleteness.tsx:153"}, "properties": {"repobilityId": "5c11497397b00aaf", "scanner": "scanner-primary", "fingerprint": "a97b3990b4d1dc9a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a25c433b88ffeb54", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/careers/sections/WhatWeBuildSection.tsx:197"}, "properties": {"repobilityId": "d01358b5d3a88cfc", "scanner": "scanner-primary", "fingerprint": "a25c433b88ffeb54", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b209c77e83b119fd", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/chart.tsx:70"}, "properties": {"repobilityId": "b8c68f17a4018107", "scanner": "scanner-primary", "fingerprint": "b209c77e83b119fd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e8c975d653d37623", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/Dashboard.tsx:485"}, "properties": {"repobilityId": "ef6dffe971709383", "scanner": "scanner-primary", "fingerprint": "e8c975d653d37623", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a6a3e6eb90831f2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/JobsPage.tsx:111"}, "properties": {"repobilityId": "3f160e2ad50e300a", "scanner": "scanner-primary", "fingerprint": "a6a3e6eb90831f2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8443711782be5a17", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/pages/ApplyPage.tsx:694"}, "properties": {"repobilityId": "9a5b3054b777f197", "scanner": "scanner-primary", "fingerprint": "8443711782be5a17", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93d0283845aa2c2d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/chart.tsx:70"}, "properties": {"repobilityId": "33f10636e53b4298", "scanner": "scanner-primary", "fingerprint": "93d0283845aa2c2d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/chart.tsx"}, "region": {"startLine": 70}}}]}, {"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-a1769fc54efdd7d4", "level": "note", "message": {"text": "Very large file: src/components/careers/CVLibrary.tsx (1225 lines)"}, "properties": {"repobilityId": "02cc78436f04de4d", "scanner": "scanner-primary", "fingerprint": "a1769fc54efdd7d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "3d68c00a16f1d366", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "ce073633c7a49e4c", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "da85f065dc448d94", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "31f0429df2797390", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "84b7fd24a180b20a", "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": "e8fec51838da5192", "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": "37b5b8a1cc10a96e", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-2c5f98b152cddb6d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/launch.json"}, "properties": {"repobilityId": "0de48c0f4ab303d8", "scanner": "scanner-primary", "fingerprint": "2c5f98b152cddb6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-83d5ccdbb239eb07", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/ai-job-assist/index.ts:271"}, "properties": {"repobilityId": "9cf6e8c60a6fbf3e", "scanner": "scanner-primary", "fingerprint": "83d5ccdbb239eb07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22e3f6fa0399bda8", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/admin-data/index.ts:8"}, "properties": {"repobilityId": "325e65b4209518d2", "scanner": "scanner-primary", "fingerprint": "22e3f6fa0399bda8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0def70ee0d7c77ef", "level": "none", "message": {"text": "Commented-code block (7 lines) in supabase/functions/analyze-cv/index.ts:70"}, "properties": {"repobilityId": "aa421457456dbb44", "scanner": "scanner-primary", "fingerprint": "0def70ee0d7c77ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed161f34943ff4c7", "level": "none", "message": {"text": "Commented-code block (10 lines) in supabase/functions/submit-application/index.ts:5"}, "properties": {"repobilityId": "4063fe76b4d06535", "scanner": "scanner-primary", "fingerprint": "ed161f34943ff4c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-088e86f50827a7ed", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/get-cv-url/index.ts:29"}, "properties": {"repobilityId": "451ddfbc34ab8ebd", "scanner": "scanner-primary", "fingerprint": "088e86f50827a7ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48aa83d8483c0c56", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/verify-password/index.ts:5"}, "properties": {"repobilityId": "6af974bbacc26ebd", "scanner": "scanner-primary", "fingerprint": "48aa83d8483c0c56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1cd2a384adea3581", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/ai.ts:3"}, "properties": {"repobilityId": "92011899811f59bc", "scanner": "scanner-primary", "fingerprint": "1cd2a384adea3581", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9feb2db6e1759dcf", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/cors.ts:1"}, "properties": {"repobilityId": "935c33c08c4aec06", "scanner": "scanner-primary", "fingerprint": "9feb2db6e1759dcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c4004db594a4a74", "level": "none", "message": {"text": "Commented-code block (6 lines) in supabase/functions/_shared/seniority.ts:8"}, "properties": {"repobilityId": "154a95d47c3ba2c3", "scanner": "scanner-primary", "fingerprint": "7c4004db594a4a74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6de01b31f3285c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in supabase/functions/_shared/validate-session.ts:3"}, "properties": {"repobilityId": "25cd7ba095f27445", "scanner": "scanner-primary", "fingerprint": "b6de01b31f3285c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edb7f85907116ddb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/App.tsx:58"}, "properties": {"repobilityId": "8699adee748c13e2", "scanner": "scanner-primary", "fingerprint": "edb7f85907116ddb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29f4c6e6564e3422", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/integrations/supabase/client.ts:5"}, "properties": {"repobilityId": "788488a25cc82775", "scanner": "scanner-primary", "fingerprint": "29f4c6e6564e3422", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e1a59ecbdf9ac7d1", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/careers/AIAnalysisPanel.tsx:17"}, "properties": {"repobilityId": "d7b1f8620e867a4a", "scanner": "scanner-primary", "fingerprint": "e1a59ecbdf9ac7d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-776d0a68ee1a34a4", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/careers/WorkforceSignal.tsx:6"}, "properties": {"repobilityId": "aa19749b6cb21f4d", "scanner": "scanner-primary", "fingerprint": "776d0a68ee1a34a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-115c04deb6e970c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/careers/CVLibrary.tsx:200"}, "properties": {"repobilityId": "1664b477bb53a321", "scanner": "scanner-primary", "fingerprint": "115c04deb6e970c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ee879e68ef6f4e79", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/careers/sections/WhyItMattersSection.tsx:9"}, "properties": {"repobilityId": "9d6d8427a01394f8", "scanner": "scanner-primary", "fingerprint": "ee879e68ef6f4e79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27d128e8967b55e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/careers/sections/GrowthExperienceSection.tsx:9"}, "properties": {"repobilityId": "29072dc144c108a2", "scanner": "scanner-primary", "fingerprint": "27d128e8967b55e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21d478a556208c1c", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/careers/sections/WhatWeBuildSection.tsx:12"}, "properties": {"repobilityId": "74073474f117796e", "scanner": "scanner-primary", "fingerprint": "21d478a556208c1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95cd3080bc3c3f9f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/careers/sections/HeroSection.tsx:9"}, "properties": {"repobilityId": "661371ce1b385119", "scanner": "scanner-primary", "fingerprint": "95cd3080bc3c3f9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de4ac70ef07f3d4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/contexts/CareersContext.tsx:179"}, "properties": {"repobilityId": "93bc943990be95c9", "scanner": "scanner-primary", "fingerprint": "de4ac70ef07f3d4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb9a53629bbad62d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/deptColor.ts:1"}, "properties": {"repobilityId": "9d6b84b4cc819e2f", "scanner": "scanner-primary", "fingerprint": "cb9a53629bbad62d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ad899a7f86343c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/Dashboard.tsx:57"}, "properties": {"repobilityId": "9d7623177c8423bc", "scanner": "scanner-primary", "fingerprint": "8ad899a7f86343c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2659acaa49bd33d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/pages/ApplyPage.tsx:294"}, "properties": {"repobilityId": "a43a2d9c3381ba67", "scanner": "scanner-primary", "fingerprint": "b2659acaa49bd33d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-319e66a630e14977", "level": "none", "message": {"text": "2 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "d838d1fc5d8231c9", "scanner": "scanner-primary", "fingerprint": "319e66a630e14977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be53176d3f806105", "level": "warning", "message": {"text": "Frontend route `/jobs/:id` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "62cf3da8440d3860", "scanner": "scanner-primary", "fingerprint": "be53176d3f806105", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-f8c0871d59597a62", "level": "warning", "message": {"text": "Frontend route `/jobs/:id/apply` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "23e4ade309e7be44", "scanner": "scanner-primary", "fingerprint": "f8c0871d59597a62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-82239dbed16e75b5", "level": "warning", "message": {"text": "Frontend route `/hr/join` has no Link/navigate to it \u2014 src/App.tsx"}, "properties": {"repobilityId": "81bad9d9bd6e36e6", "scanner": "scanner-primary", "fingerprint": "82239dbed16e75b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}