{"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-02e95756b43f6423", "name": "`truncate` class without `title=` for hover reveal \u2014 src/App.tsx:1445", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/App.tsx:1445"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dacedd17b8a188f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/KitsModal.tsx:142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/KitsModal.tsx:142"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27b1ca20bb528a78", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ActivityLogModal.tsx:85", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ActivityLogModal.tsx:85"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ade47a52cfe50de2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/PreviewModal.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PreviewModal.tsx:87"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb7598bdb647b87e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/DocumentDetailModal.tsx:257", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DocumentDetailModal.tsx:257"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-912b818b7c3df95d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/AccountModal.tsx:104", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AccountModal.tsx:104"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15f44911e83c97c2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/AddDocumentModal.tsx:370", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AddDocumentModal.tsx:370"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe48fe5f78d86e5c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/landing/LandingPage.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/landing/LandingPage.tsx:242"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d7dc7e0b72ea20ec", "name": "Very large file: src/App.tsx (2931 lines)", "shortDescription": {"text": "Very large file: src/App.tsx (2931 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 23 placeholder/mock markers across 11 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-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-1e217fe0bfca6b49", "name": "Commented-code block (5 lines) in src/lib/syncQueue.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/syncQueue.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d840a1281b4de05b", "name": "Commented-code block (6 lines) in src/lib/crypto.ts:109", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/crypto.ts:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-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: `TAURI_DEV_HOST`, `TAURI_ENV_PLATFORM`. 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}}]}}, "automationDetails": {"id": "repobility/18091"}, "properties": {"repository": "Rhaf1203/FileVault", "repoUrl": "https://github.com/Rhaf1203/FileVault", "branch": "main"}, "results": [{"ruleId": "scanner-02e95756b43f6423", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/App.tsx:1445"}, "properties": {"repobilityId": "903e15ea3fb71cd0", "scanner": "scanner-primary", "fingerprint": "02e95756b43f6423", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dacedd17b8a188f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/KitsModal.tsx:142"}, "properties": {"repobilityId": "f45e243b26fce20e", "scanner": "scanner-primary", "fingerprint": "dacedd17b8a188f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-27b1ca20bb528a78", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ActivityLogModal.tsx:85"}, "properties": {"repobilityId": "59e3b32e73d1e9b8", "scanner": "scanner-primary", "fingerprint": "27b1ca20bb528a78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ade47a52cfe50de2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/PreviewModal.tsx:87"}, "properties": {"repobilityId": "e61f7791bb8d9f5b", "scanner": "scanner-primary", "fingerprint": "ade47a52cfe50de2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb7598bdb647b87e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/DocumentDetailModal.tsx:257"}, "properties": {"repobilityId": "5f3e082e2fb59637", "scanner": "scanner-primary", "fingerprint": "fb7598bdb647b87e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-912b818b7c3df95d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AccountModal.tsx:104"}, "properties": {"repobilityId": "1fb7cf21c183af38", "scanner": "scanner-primary", "fingerprint": "912b818b7c3df95d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-15f44911e83c97c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/AddDocumentModal.tsx:370"}, "properties": {"repobilityId": "285e441cf3502a65", "scanner": "scanner-primary", "fingerprint": "15f44911e83c97c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe48fe5f78d86e5c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/landing/LandingPage.tsx:242"}, "properties": {"repobilityId": "fecddfe03251e89b", "scanner": "scanner-primary", "fingerprint": "fe48fe5f78d86e5c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d7dc7e0b72ea20ec", "level": "note", "message": {"text": "Very large file: src/App.tsx (2931 lines)"}, "properties": {"repobilityId": "57bfc71b44f5048a", "scanner": "scanner-primary", "fingerprint": "d7dc7e0b72ea20ec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "bf20536278740f4e", "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": "efb1b0f0b2377761", "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": "59a8696502062e43", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "367d96018350ba51", "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": "2469dc12964a440c", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-1e217fe0bfca6b49", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/syncQueue.ts:7"}, "properties": {"repobilityId": "82ab82d6d6dd3da7", "scanner": "scanner-primary", "fingerprint": "1e217fe0bfca6b49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d840a1281b4de05b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/crypto.ts:109"}, "properties": {"repobilityId": "df6a473dc3e49c89", "scanner": "scanner-primary", "fingerprint": "d840a1281b4de05b", "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"]}}]}]}