{"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_assumption_check", "name": "Foundry mined assumption checks: YirehSA/Cardtly", "shortDescription": {"text": "Foundry mined assumption checks: YirehSA/Cardtly"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: YirehSA/Cardtly\nThread: YirehSA/Cardtly#1\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: YirehSA/Cardtly#1\nRepo: YirehSA/Cardtly\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-9d7bf6d8b0f2f7f9\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    "}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_auth_guardrail_gap", "name": "Foundry mined security auth guardrail gaps: YirehSA/Cardtly", "shortDescription": {"text": "Foundry mined security auth guardrail gaps: YirehSA/Cardtly"}, "fullDescription": {"text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: YirehSA/Cardtly\nThread: YirehSA/Cardtly#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: YirehSA/Cardtly\nThread: YirehSA/Cardtly#1\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YirehSA/Cardtly#1\nRepo: YirehSA/Cardtly\nIssue/PR number: 1\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 26\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcom"}, "properties": {"scanner": "foundry_dataset", "category": "auth", "severity": "critical", "confidence": 0.78, "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-fcbaf531e8319a7a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/TeammatesCard.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/TeammatesCard.tsx:98"}, "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-baac0bda13be6b33", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/Sidebar.tsx:261", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/Sidebar.tsx:261"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d371c28ec3d587d8", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/Header.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/Header.tsx:63"}, "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-320b330b06cc8e2f", "name": "`truncate` class without `title=` for hover reveal \u2014 components/virtual-bg/VirtualBGBuilder.tsx:445", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/virtual-bg/VirtualBGBuilder.tsx:445"}, "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-4391636f400ec3dd", "name": "`truncate` class without `title=` for hover reveal \u2014 components/team/TeamDashboard.tsx:532", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/team/TeamDashboard.tsx:532"}, "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-c77125d5ef269e1c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/marketing/TemplatesShowcase.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/marketing/TemplatesShowcase.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe8720201f77472b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/marketing/StructuredData.tsx:68", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/marketing/StructuredData.tsx:68"}, "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-7015f78c947cf82e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/marketing/FaqSection.tsx:78", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/marketing/FaqSection.tsx:78"}, "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-58c917a013e20bc4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/marketing/FeaturedCards.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/marketing/FeaturedCards.tsx:204"}, "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-ec3f59f2001b0d2d", "name": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminDashboard.tsx:499", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminDashboard.tsx:499"}, "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-ea447b1ef813dd24", "name": "`truncate` class without `title=` for hover reveal \u2014 components/card/PublicCardView.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/card/PublicCardView.tsx:103"}, "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-ef92645d4c811c95", "name": "`truncate` class without `title=` for hover reveal \u2014 components/card/CardPreview.tsx:207", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/card/CardPreview.tsx:207"}, "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-8ac86b2143a19faf", "name": "`truncate` class without `title=` for hover reveal \u2014 components/card/DesignPanel.tsx:376", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/card/DesignPanel.tsx:376"}, "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-5a18d04d7560e1c3", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/card/FlippableCardPreview.tsx:90", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/card/FlippableCardPreview.tsx:90"}, "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-e52a79a93071309e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/card/PublicCard.tsx:252", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/card/PublicCard.tsx:252"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a95fc25e02997cd6", "name": "`truncate` class without `title=` for hover reveal \u2014 components/nfc/NFCOrderPage.tsx:337", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/nfc/NFCOrderPage.tsx:337"}, "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-fc087914669cd482", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:103", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:103"}, "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-7a056e9e9a04de4c", "name": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/paystack/route.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/paystack/route.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-92ce4b13a6cebba0", "name": "`truncate` class without `title=` for hover reveal \u2014 app/signup/page.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/signup/page.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-cc26cbaa2a929edc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/nfc/page.tsx:89", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/nfc/page.tsx:89"}, "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-1489840502b51ef6", "name": "Insecure pattern 'dangerous_innerhtml' in components/marketing/StructuredData.tsx:68", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/marketing/StructuredData.tsx:68"}, "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-7f0332390e25c900", "name": "Insecure pattern 'dangerous_innerhtml' in components/marketing/FaqSection.tsx:78", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/marketing/FaqSection.tsx:78"}, "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-358879b959b31650", "name": "Insecure pattern 'dangerous_innerhtml' in components/card/FlippableCardPreview.tsx:90", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in components/card/FlippableCardPreview.tsx:90"}, "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-891e23c3a97d2b87", "name": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:103", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:103"}, "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-24d9adb567a8d2ef", "name": "Insecure pattern 'dangerous_innerhtml' in app/nfc/page.tsx:89", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/nfc/page.tsx:89"}, "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-f19f12f33878f06a", "name": "Very large file: components/admin/AdminDashboard.tsx (980 lines)", "shortDescription": {"text": "Very large file: components/admin/AdminDashboard.tsx (980 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-194e8d284bbf7cef", "name": "Very large file: components/card/PublicCardView.tsx (1365 lines)", "shortDescription": {"text": "Very large file: components/card/PublicCardView.tsx (1365 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": "0 test file(s) for 177 source file(s) (ratio 0.00). 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 126 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-de93c73849fd831e", "name": "Commented-code block (6 lines) in capacitor.config.ts:39", "shortDescription": {"text": "Commented-code block (6 lines) in capacitor.config.ts:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4254a58c8d2720a", "name": "Commented-code block (6 lines) in types/design.ts:39", "shortDescription": {"text": "Commented-code block (6 lines) in types/design.ts:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11099073531b219c", "name": "Commented-code block (8 lines) in components/CapacitorSessionRefresh.tsx:14", "shortDescription": {"text": "Commented-code block (8 lines) in components/CapacitorSessionRefresh.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d59ddf280fb53100", "name": "Commented-code block (5 lines) in components/AnnouncementBanner.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in components/AnnouncementBanner.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79df996b1426ad29", "name": "Commented-code block (6 lines) in components/AnnouncementModal.tsx:16", "shortDescription": {"text": "Commented-code block (6 lines) in components/AnnouncementModal.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b27af07d911647e3", "name": "Commented-code block (5 lines) in components/CapacitorBackButton.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in components/CapacitorBackButton.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-63043eb9f3a7329a", "name": "Commented-code block (7 lines) in components/NativeAppRedirect.tsx:8", "shortDescription": {"text": "Commented-code block (7 lines) in components/NativeAppRedirect.tsx: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-9398d2294a5c163b", "name": "Commented-code block (6 lines) in components/InAppBackButton.tsx:16", "shortDescription": {"text": "Commented-code block (6 lines) in components/InAppBackButton.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d1c09bd96b42818", "name": "Commented-code block (5 lines) in components/CapacitorDeepLinks.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in components/CapacitorDeepLinks.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-631e2cb76ea69d59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/settings/SettingsTabs.tsx:115", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/settings/SettingsTabs.tsx:115"}, "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-305b047079d4b937", "name": "Commented-code block (5 lines) in components/dashboard/TeammatesCard.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in components/dashboard/TeammatesCard.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-0476d9c9e48cd173", "name": "Commented-code block (5 lines) in components/dashboard/MobileBottomNav.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in components/dashboard/MobileBottomNav.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f2859dc3fac07b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/team/TeamDashboard.tsx:174", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/team/TeamDashboard.tsx:174"}, "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-f8aedbc1d1511018", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/team/TeamCardEditor.tsx:166", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/team/TeamCardEditor.tsx:166"}, "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-610dbf6870ee008a", "name": "Commented-code block (5 lines) in components/marketing/StructuredData.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in components/marketing/StructuredData.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bce54e863a53e166", "name": "Commented-code block (6 lines) in components/marketing/CustomizeShowcase.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in components/marketing/CustomizeShowcase.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-e5ccb7677cc98c8c", "name": "Commented-code block (5 lines) in components/marketing/FaqSection.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in components/marketing/FaqSection.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bede023968d819ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/marketing/FeaturedCards.tsx:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/marketing/FeaturedCards.tsx:32"}, "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-04daf065ee42ec81", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/AdminDashboard.tsx:138", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/AdminDashboard.tsx:138"}, "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-87b8accce0edcae2", "name": "Commented-code block (5 lines) in components/card/PublicCardView.tsx:485", "shortDescription": {"text": "Commented-code block (5 lines) in components/card/PublicCardView.tsx:485"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-226e5b3ff776a802", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/card/CardEditor.tsx:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/card/CardEditor.tsx:97"}, "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-6195fc5c98b60e53", "name": "Commented-code block (8 lines) in components/card/BookingModal.tsx:79", "shortDescription": {"text": "Commented-code block (8 lines) in components/card/BookingModal.tsx:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab9669cf7157fd9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/nfc/NFCOrderPage.tsx:250", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/nfc/NFCOrderPage.tsx:250"}, "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-4d76d0db57dbb304", "name": "Commented-code block (5 lines) in app/opengraph-image.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in app/opengraph-image.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d61d6d50103a67c2", "name": "Commented-code block (13 lines) in app/page.tsx:38", "shortDescription": {"text": "Commented-code block (13 lines) in app/page.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b03a8c1cc3e1d78", "name": "Commented-code block (10 lines) in app/reset-password/page.tsx:33", "shortDescription": {"text": "Commented-code block (10 lines) in app/reset-password/page.tsx: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-fc5ba38d4e2ea433", "name": "Commented-code block (5 lines) in app/login/page.tsx:75", "shortDescription": {"text": "Commented-code block (5 lines) in app/login/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-b1408c5d852f28dd", "name": "Commented-code block (7 lines) in app/api/bookings/request/route.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/bookings/request/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1de1ae6791ec076", "name": "Commented-code block (5 lines) in app/api/promotions/grant-entry/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/promotions/grant-entry/route.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-b853d81223e63add", "name": "Commented-code block (6 lines) in app/api/track-signup/route.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/track-signup/route.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-3666626b7ec1ed62", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/team/route.ts:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/team/route.ts:77"}, "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-e89a65dc6e8c9788", "name": "Commented-code block (8 lines) in app/api/team/invite/route.ts:83", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/team/invite/route.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bcf10ae52866361", "name": "Commented-code block (6 lines) in app/api/team/claim/route.ts:132", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/team/claim/route.ts:132"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-501c24ed90c739c6", "name": "Commented-code block (7 lines) in app/api/team/mates/route.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/team/mates/route.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-6428c12e5ce8a00c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/paystack/initialize/route.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/paystack/initialize/route.ts:30"}, "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-3cadc1a58f27a199", "name": "Commented-code block (6 lines) in app/api/admin/route.ts:22", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/route.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-053ee30001657be1", "name": "Commented-code block (5 lines) in app/api/admin/promotions/draw/route.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/promotions/draw/route.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c958cc3d2a56f440", "name": "Commented-code block (8 lines) in app/api/og/card/[slug]/route.tsx:6", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/og/card/[slug]/route.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-08d95475bd250c5f", "name": "Commented-code block (5 lines) in app/api/webhooks/paystack/route.ts:78", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/webhooks/paystack/route.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b5344912cef2d3b", "name": "Commented-code block (5 lines) in app/dashboard/team/card/[id]/page.tsx:38", "shortDescription": {"text": "Commented-code block (5 lines) in app/dashboard/team/card/[id]/page.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6eaa00f8d42be1e", "name": "Commented-code block (5 lines) in app/dashboard/card/page.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in app/dashboard/card/page.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5388ff1de3c6c0e", "name": "Commented-code block (5 lines) in app/admin/page.tsx:86", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin/page.tsx:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46f2834bfbf3b7a7", "name": "Commented-code block (6 lines) in app/upgrade/verify/page.tsx:17", "shortDescription": {"text": "Commented-code block (6 lines) in app/upgrade/verify/page.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-7c4c2e4835571b4e", "name": "Commented-code block (7 lines) in app/card/[slug]/page.tsx:81", "shortDescription": {"text": "Commented-code block (7 lines) in app/card/[slug]/page.tsx:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75115c677c369fca", "name": "Commented-code block (5 lines) in lib/biometric.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in lib/biometric.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-45eae11d33943fe8", "name": "Commented-code block (8 lines) in lib/password-reset.ts:7", "shortDescription": {"text": "Commented-code block (8 lines) in lib/password-reset.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-3f1b3421ce7ac0ad", "name": "Commented-code block (8 lines) in lib/card-owner.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in lib/card-owner.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-45b98b2f05b86d06", "name": "Commented-code block (8 lines) in lib/google-wallet.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in lib/google-wallet.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-5adfd367d76a7287", "name": "Commented-code block (7 lines) in lib/card-server.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in lib/card-server.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}}]}}, "automationDetails": {"id": "repobility/23239"}, "properties": {"repository": "YirehSA/Cardtly", "repoUrl": "https://github.com/YirehSA/Cardtly", "branch": "main"}, "results": [{"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: YirehSA/Cardtly"}, "properties": {"repobilityId": 301430, "scanner": "foundry_dataset", "fingerprint": "6bc30b98fb282cec232bdf409ce0ded467481ad011e7ee3aa8f37ae1831ba92d", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "YirehSA/Cardtly#1", "human_labels": ["dependency_or_build", "deployment_env_gap", "security_auth_secret"], "issue_number": "1", "thread_label": "thread_has_human_issue_and_fix_context", "outcome_label": "claimed_resolved_unverified", "source_backed": true, "max_confidence": 0.6, "repo_full_name": "YirehSA/Cardtly", "training_usage": "weak_supervision", "confidence_tier": "weak_supervision", "source_chain_id": "evidence-chain-issue_chain-dfce5523ee81f1bd", "helicopter_views": {"graphs": 2, "schemas": 2}, "artifact_families": {"ci": 1, "docs": 3, "routes_api": 4}, "source_chain_kind": "issue_chain", "changed_file_count": 2, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"dependency_or_build": 2}, "linked_commit_count": 2, "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": 4}, "text": "Comment chain pattern product: assumption_checks\nRepo: YirehSA/Cardtly\nThread: YirehSA/Cardtly#1\nOutcome: claimed_resolved_unverified\nThread label: thread_has_human_issue_and_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_weak_supervision, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: YirehSA/Cardtly#1\nRepo: YirehSA/Cardtly\nThread label: thread_has_human_issue_and_fix_context\nOutcome: claimed_resolved_unverified\nComment count: 2\nLinked commit count: 2\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 2\nLabels: {'security_auth_secret': 1, 'deployment_env_gap': 1}\nPolarities: {'bad': 2}\nChanged file labels: {'dependency_or_build': 2}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-9d7bf6d8b0f2f7f9\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"security_auth_secret\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/YirehSA/Cardtly/pull/1\",\n    \"text\": \"GitHub feedback: security_auth_secret\\nPolarity: bad\\nKind: pull_request_body\\nRepo: YirehSA/Cardtly\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/YirehSA/Cardtly/pull/1\\nTitle: Fix React Server Components CVE vulnerabilities\\nBody:\\n> [!IMPORTANT]\\n> This is an automatic PR generated by Vercel to help you with patching efforts. We can't guarantee it's comprehensive, and it may contain mistakes. Please review our [guidance](https://vercel.link/additional-checks) before merging these changes.\\n\\nA critical remote code execution (RCE) vulnerability in React Server Components, impacting frameworks such as Next.js, was identified in the project [cardtly](https://vercel.com/yirehsas-projects/cardtly). The vulnerability enables unauthenticated RCE on the server via insecure deserialization in the React Flight protocol.\\n\\nThis issue is tracked under:\\n\\n- GitHub Security Advisory: [GHSA-9qr9-h5gf-34mp](https://github.com/vercel/next.js/security/advisories/GHSA-9qr9-h5gf-34mp)\\n- React Advisory: [CVE-2025-55182](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)\\n- Next.js Advisory: [CVE-2025-66478](https://nextjs.org/blog/CVE-2025-66478)\\n\\nThis automated pu\"\n  },\n  {\n    \"id\": \"github-feedback-comment-695ae4f8c7c8e68c\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/YirehSA/Cardtly/pull/1#issuecomment-4370847736\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: YirehSA/Cardtly\\nAuthor: vercel[bot] (Bot)\\nURL: https://github.com/YirehSA/Cardtly/pull/1#issuecomment-4370847736\\nTitle: \\nBody:\\n[vc]: #Lieiadh/behVWpD7PJghjL+RSc9bx2uJjRgMnfRc51M=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJjYXJkdGx5IiwicHJvamVjdElkIjoicHJqX0JzRjd4aTNkbHIxVTdmZTFDMUNWdktSVVdCck4iLCJpbnNwZWN0b3JVcmwiOiJodHRw\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YirehSA/Cardtly", "source_id": "comment-chain-pattern-assumption_checks-40e086a9f93d48d8", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YirehSA/Cardtly", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "weak_supervision"}}}, {"ruleId": "foundry_auth_guardrail_gap", "level": "error", "message": {"text": "Foundry mined security auth guardrail gaps: YirehSA/Cardtly"}, "properties": {"repobilityId": 332302, "scanner": "foundry_dataset", "fingerprint": "9ef25a593da99390711a84b04974fdd04d3dd6c9f2f50589b3ec4d82a0e4f77d", "category": "auth", "severity": "critical", "confidence": 0.78, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Security/auth changes without enough guardrails", "intent": "Assumption-check security/auth examples requiring stronger tests or CI.", "labels": {"ui_workflow": 1, "deployment_env_gap": 1, "dependency_or_build": 2, "security_auth_secret": 1, "claimed_resolved_unverified": 4, "issue_or_pull_request_thread": 1, "human_reported_issue_then_fix_attempt": 2, "thread_has_human_issue_and_fix_context": 2}, "source": "graph_query_export", "motif_id": "security_auth_without_guardrails", "outcomes": {"claimed_resolved_unverified": 8}, "polarity": "bad", "query_id": "security_auth_guardrail_gaps", "severity": "critical", "ci_labels": {}, "synthetic": false, "edge_count": 26, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 2, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 2, "thread_has_comment_chain": 2, "comment_chain_links_commit": 2, "comment_chain_touches_file": 4, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 15, "node_types": {"repo": 1, "commit": 1, "thread": 1, "comment": 2, "pr_file": 2, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "YirehSA/Cardtly#1", "issue_number": "1", "quality_tiers": {"weak_supervision": 4}, "repo_full_name": "YirehSA/Cardtly", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-04d34fea8fd17087", "graph_gold_label": "weak_supervision_needs_review", "changed_file_labels": {"dependency_or_build": 10}}, "text": "Graph query export: Security/auth changes without enough guardrails\nQuery id: security_auth_guardrail_gaps\nQuery type: motif_query\nIntent: Assumption-check security/auth examples requiring stronger tests or CI.\nMotif: security_auth_without_guardrails\nTraining usage: assumption_check\nGraph gold label: weak_supervision_needs_review\nRepo: YirehSA/Cardtly\nThread: YirehSA/Cardtly#1\nEvidence:\nGraph motif: Security/auth change without enough guardrails\nMotif id: security_auth_without_guardrails\nPolarity: bad\nTraining usage: assumption_check\nSeverity: critical\nRepo: YirehSA/Cardtly\nThread: YirehSA/Cardtly#1\nGraph gold label: weak_supervision_needs_review\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: YirehSA/Cardtly#1\nRepo: YirehSA/Cardtly\nIssue/PR number: 1\nGraph consistency label: weak_supervision_needs_review\nNodes: 15\nEdges: 26\nNode types: {'link_quality': 4, 'comment': 2, 'pr_file': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'commit': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'comment_chain_touches_file': 4, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_touches_file': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'comment_chain_links_commit': 2, 'issue_chain_has_comment_chain': 2, 'issue_chain_touches_file': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'claimed_resolved_unverified': 4, 'dependency_or_build': 2, 'human_reported_issue_then_fix_attempt': 2, 'thread_has_human_issue_and_fix_context': 2, 'issue_or_pull_request_thread': 1, 'security_auth_secret': 1, 'deployment_env_gap': 1, 'ui_workflow': 1}\nOutcomes: {'claimed_resolved_unverified': 8}\nQuality tiers: {'weak_supervision': 4}\nCI labels: {}\nCurriculum targets:\n- Train auth boundary repair with tests, permission matrices, and secret-handling checks.\n- Keep risky auth changes separate from ordinary bug-fix examples.\nAssumption checks:\n- Are auth/permission paths covered by tests?\n- Are secrets, CORS, or access rules verified rather than summarized?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/YirehSA/Cardtly", "source_id": "graph-query-motif_query-8e4ce114f13c6653", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/security_auth_guardrail_gaps/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "YirehSA/Cardtly", "source_dataset": "graph_queries/security_auth_guardrail_gaps", "training_usage": "assumption_check"}}}, {"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-fcbaf531e8319a7a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/TeammatesCard.tsx:98"}, "properties": {"repobilityId": "26bbee631a0e29be", "scanner": "scanner-primary", "fingerprint": "fcbaf531e8319a7a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-baac0bda13be6b33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/Sidebar.tsx:261"}, "properties": {"repobilityId": "1f641700c2f8ce50", "scanner": "scanner-primary", "fingerprint": "baac0bda13be6b33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d371c28ec3d587d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/Header.tsx:63"}, "properties": {"repobilityId": "1d090fc1cca2901d", "scanner": "scanner-primary", "fingerprint": "d371c28ec3d587d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-320b330b06cc8e2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/virtual-bg/VirtualBGBuilder.tsx:445"}, "properties": {"repobilityId": "f63e64084f4d0cf8", "scanner": "scanner-primary", "fingerprint": "320b330b06cc8e2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4391636f400ec3dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/team/TeamDashboard.tsx:532"}, "properties": {"repobilityId": "452ba5b49e7ddbf2", "scanner": "scanner-primary", "fingerprint": "4391636f400ec3dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c77125d5ef269e1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/marketing/TemplatesShowcase.tsx:180"}, "properties": {"repobilityId": "0a003fd397b9f205", "scanner": "scanner-primary", "fingerprint": "c77125d5ef269e1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe8720201f77472b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/marketing/StructuredData.tsx:68"}, "properties": {"repobilityId": "e1d7e203ebc840c4", "scanner": "scanner-primary", "fingerprint": "fe8720201f77472b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7015f78c947cf82e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/marketing/FaqSection.tsx:78"}, "properties": {"repobilityId": "2e267e0343ab0960", "scanner": "scanner-primary", "fingerprint": "7015f78c947cf82e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-58c917a013e20bc4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/marketing/FeaturedCards.tsx:204"}, "properties": {"repobilityId": "cb029686ae75472e", "scanner": "scanner-primary", "fingerprint": "58c917a013e20bc4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec3f59f2001b0d2d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/admin/AdminDashboard.tsx:499"}, "properties": {"repobilityId": "e3b87952e796ad41", "scanner": "scanner-primary", "fingerprint": "ec3f59f2001b0d2d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea447b1ef813dd24", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/card/PublicCardView.tsx:103"}, "properties": {"repobilityId": "c80d9e1c7bf880e2", "scanner": "scanner-primary", "fingerprint": "ea447b1ef813dd24", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef92645d4c811c95", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/card/CardPreview.tsx:207"}, "properties": {"repobilityId": "4170edab1e8d1e86", "scanner": "scanner-primary", "fingerprint": "ef92645d4c811c95", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ac86b2143a19faf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/card/DesignPanel.tsx:376"}, "properties": {"repobilityId": "d536e0564ae26e24", "scanner": "scanner-primary", "fingerprint": "8ac86b2143a19faf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a18d04d7560e1c3", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/card/FlippableCardPreview.tsx:90"}, "properties": {"repobilityId": "9207a9908abba7f2", "scanner": "scanner-primary", "fingerprint": "5a18d04d7560e1c3", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e52a79a93071309e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/card/PublicCard.tsx:252"}, "properties": {"repobilityId": "2e8bb51829660dbe", "scanner": "scanner-primary", "fingerprint": "e52a79a93071309e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a95fc25e02997cd6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/nfc/NFCOrderPage.tsx:337"}, "properties": {"repobilityId": "3bc15ada702c7a1e", "scanner": "scanner-primary", "fingerprint": "a95fc25e02997cd6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc087914669cd482", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/page.tsx:103"}, "properties": {"repobilityId": "6779a4843a9d41ee", "scanner": "scanner-primary", "fingerprint": "fc087914669cd482", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7a056e9e9a04de4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/webhooks/paystack/route.ts:22"}, "properties": {"repobilityId": "72d946ba0be5f1da", "scanner": "scanner-primary", "fingerprint": "7a056e9e9a04de4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92ce4b13a6cebba0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/signup/page.tsx:231"}, "properties": {"repobilityId": "de3d0740352bde31", "scanner": "scanner-primary", "fingerprint": "92ce4b13a6cebba0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc26cbaa2a929edc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/nfc/page.tsx:89"}, "properties": {"repobilityId": "2ad5612d039e2f2a", "scanner": "scanner-primary", "fingerprint": "cc26cbaa2a929edc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1489840502b51ef6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/marketing/StructuredData.tsx:68"}, "properties": {"repobilityId": "f9e5fdfcd4c1a505", "scanner": "scanner-primary", "fingerprint": "1489840502b51ef6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/marketing/StructuredData.tsx"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-7f0332390e25c900", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/marketing/FaqSection.tsx:78"}, "properties": {"repobilityId": "64578fd82bf86680", "scanner": "scanner-primary", "fingerprint": "7f0332390e25c900", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/marketing/FaqSection.tsx"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-358879b959b31650", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in components/card/FlippableCardPreview.tsx:90"}, "properties": {"repobilityId": "b84c66bfcb031e19", "scanner": "scanner-primary", "fingerprint": "358879b959b31650", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/card/FlippableCardPreview.tsx"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-891e23c3a97d2b87", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/page.tsx:103"}, "properties": {"repobilityId": "cfec9d1837258177", "scanner": "scanner-primary", "fingerprint": "891e23c3a97d2b87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/page.tsx"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-24d9adb567a8d2ef", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/nfc/page.tsx:89"}, "properties": {"repobilityId": "a11d29851baac6a9", "scanner": "scanner-primary", "fingerprint": "24d9adb567a8d2ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/nfc/page.tsx"}, "region": {"startLine": 89}}}]}, {"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-f19f12f33878f06a", "level": "note", "message": {"text": "Very large file: components/admin/AdminDashboard.tsx (980 lines)"}, "properties": {"repobilityId": "8dd08c5c4a3b25e1", "scanner": "scanner-primary", "fingerprint": "f19f12f33878f06a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-194e8d284bbf7cef", "level": "note", "message": {"text": "Very large file: components/card/PublicCardView.tsx (1365 lines)"}, "properties": {"repobilityId": "9d9db8880da41f88", "scanner": "scanner-primary", "fingerprint": "194e8d284bbf7cef", "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": "bf0bddba55098c6e", "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": "db563b1d0edbe7ef", "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": "34f02d56f33b4c55", "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": "0ec1ec8c7f068a27", "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": "b43839fa3979c9ef", "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": "43cf2eb0222599b4", "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": "b00a3a8a14fb3632", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-de93c73849fd831e", "level": "none", "message": {"text": "Commented-code block (6 lines) in capacitor.config.ts:39"}, "properties": {"repobilityId": "9ccc846ddf294103", "scanner": "scanner-primary", "fingerprint": "de93c73849fd831e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4254a58c8d2720a", "level": "none", "message": {"text": "Commented-code block (6 lines) in types/design.ts:39"}, "properties": {"repobilityId": "7960c8bdbd16ffcd", "scanner": "scanner-primary", "fingerprint": "e4254a58c8d2720a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11099073531b219c", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/CapacitorSessionRefresh.tsx:14"}, "properties": {"repobilityId": "4ccdc2a985723036", "scanner": "scanner-primary", "fingerprint": "11099073531b219c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d59ddf280fb53100", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/AnnouncementBanner.tsx:16"}, "properties": {"repobilityId": "e65b33ad3c5c7b49", "scanner": "scanner-primary", "fingerprint": "d59ddf280fb53100", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79df996b1426ad29", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/AnnouncementModal.tsx:16"}, "properties": {"repobilityId": "1d3e868f51754135", "scanner": "scanner-primary", "fingerprint": "79df996b1426ad29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b27af07d911647e3", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/CapacitorBackButton.tsx:9"}, "properties": {"repobilityId": "1e462ab64edfe1b3", "scanner": "scanner-primary", "fingerprint": "b27af07d911647e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63043eb9f3a7329a", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/NativeAppRedirect.tsx:8"}, "properties": {"repobilityId": "4423958f227b4ab5", "scanner": "scanner-primary", "fingerprint": "63043eb9f3a7329a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9398d2294a5c163b", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/InAppBackButton.tsx:16"}, "properties": {"repobilityId": "0a87547800e5aadd", "scanner": "scanner-primary", "fingerprint": "9398d2294a5c163b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d1c09bd96b42818", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/CapacitorDeepLinks.tsx:6"}, "properties": {"repobilityId": "ef5b53f39503a6a0", "scanner": "scanner-primary", "fingerprint": "6d1c09bd96b42818", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-631e2cb76ea69d59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/settings/SettingsTabs.tsx:115"}, "properties": {"repobilityId": "166f2057c7caf4f6", "scanner": "scanner-primary", "fingerprint": "631e2cb76ea69d59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-305b047079d4b937", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/dashboard/TeammatesCard.tsx:17"}, "properties": {"repobilityId": "cef506570aa90db0", "scanner": "scanner-primary", "fingerprint": "305b047079d4b937", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0476d9c9e48cd173", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/dashboard/MobileBottomNav.tsx:16"}, "properties": {"repobilityId": "5e56a4fd5646b5fd", "scanner": "scanner-primary", "fingerprint": "0476d9c9e48cd173", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f2859dc3fac07b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/team/TeamDashboard.tsx:174"}, "properties": {"repobilityId": "3e52e6745dbe039e", "scanner": "scanner-primary", "fingerprint": "3f2859dc3fac07b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f8aedbc1d1511018", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/team/TeamCardEditor.tsx:166"}, "properties": {"repobilityId": "5763c46eecd851fd", "scanner": "scanner-primary", "fingerprint": "f8aedbc1d1511018", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-610dbf6870ee008a", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/marketing/StructuredData.tsx:1"}, "properties": {"repobilityId": "13f563babef4592d", "scanner": "scanner-primary", "fingerprint": "610dbf6870ee008a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bce54e863a53e166", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/marketing/CustomizeShowcase.tsx:6"}, "properties": {"repobilityId": "d105873fbd4621e4", "scanner": "scanner-primary", "fingerprint": "bce54e863a53e166", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5ccb7677cc98c8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/marketing/FaqSection.tsx:3"}, "properties": {"repobilityId": "4c404f596bbd1ef8", "scanner": "scanner-primary", "fingerprint": "e5ccb7677cc98c8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bede023968d819ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/marketing/FeaturedCards.tsx:32"}, "properties": {"repobilityId": "8d0023bdfb8fe1ef", "scanner": "scanner-primary", "fingerprint": "bede023968d819ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-04daf065ee42ec81", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/admin/AdminDashboard.tsx:138"}, "properties": {"repobilityId": "86ae84845ef47429", "scanner": "scanner-primary", "fingerprint": "04daf065ee42ec81", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87b8accce0edcae2", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/card/PublicCardView.tsx:485"}, "properties": {"repobilityId": "cf4b9f8d87781b36", "scanner": "scanner-primary", "fingerprint": "87b8accce0edcae2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-226e5b3ff776a802", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/card/CardEditor.tsx:97"}, "properties": {"repobilityId": "77c1d3e2bb89e494", "scanner": "scanner-primary", "fingerprint": "226e5b3ff776a802", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6195fc5c98b60e53", "level": "none", "message": {"text": "Commented-code block (8 lines) in components/card/BookingModal.tsx:79"}, "properties": {"repobilityId": "5f346cd25e307f13", "scanner": "scanner-primary", "fingerprint": "6195fc5c98b60e53", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab9669cf7157fd9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/nfc/NFCOrderPage.tsx:250"}, "properties": {"repobilityId": "0d44ed0765de1c7c", "scanner": "scanner-primary", "fingerprint": "ab9669cf7157fd9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d76d0db57dbb304", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/opengraph-image.tsx:3"}, "properties": {"repobilityId": "14dfbc2af807c476", "scanner": "scanner-primary", "fingerprint": "4d76d0db57dbb304", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d61d6d50103a67c2", "level": "none", "message": {"text": "Commented-code block (13 lines) in app/page.tsx:38"}, "properties": {"repobilityId": "686221383ba799f3", "scanner": "scanner-primary", "fingerprint": "d61d6d50103a67c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b03a8c1cc3e1d78", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/reset-password/page.tsx:33"}, "properties": {"repobilityId": "6b233d7084b270b4", "scanner": "scanner-primary", "fingerprint": "1b03a8c1cc3e1d78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc5ba38d4e2ea433", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/login/page.tsx:75"}, "properties": {"repobilityId": "394e8d0379e1bfca", "scanner": "scanner-primary", "fingerprint": "fc5ba38d4e2ea433", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1408c5d852f28dd", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/bookings/request/route.ts:6"}, "properties": {"repobilityId": "8dadbf0841397641", "scanner": "scanner-primary", "fingerprint": "b1408c5d852f28dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1de1ae6791ec076", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/promotions/grant-entry/route.ts:7"}, "properties": {"repobilityId": "afc8a1ac2d0f5070", "scanner": "scanner-primary", "fingerprint": "b1de1ae6791ec076", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b853d81223e63add", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/track-signup/route.ts:4"}, "properties": {"repobilityId": "aa28a9a5736e41fe", "scanner": "scanner-primary", "fingerprint": "b853d81223e63add", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3666626b7ec1ed62", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/team/route.ts:77"}, "properties": {"repobilityId": "914d26f507c55079", "scanner": "scanner-primary", "fingerprint": "3666626b7ec1ed62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e89a65dc6e8c9788", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/team/invite/route.ts:83"}, "properties": {"repobilityId": "d3793aa59b430430", "scanner": "scanner-primary", "fingerprint": "e89a65dc6e8c9788", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bcf10ae52866361", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/team/claim/route.ts:132"}, "properties": {"repobilityId": "2e1535b5845e7e26", "scanner": "scanner-primary", "fingerprint": "9bcf10ae52866361", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-501c24ed90c739c6", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/team/mates/route.ts:5"}, "properties": {"repobilityId": "368c309bbcc09dec", "scanner": "scanner-primary", "fingerprint": "501c24ed90c739c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6428c12e5ce8a00c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/paystack/initialize/route.ts:30"}, "properties": {"repobilityId": "28dbfef5eb11ab5f", "scanner": "scanner-primary", "fingerprint": "6428c12e5ce8a00c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3cadc1a58f27a199", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/route.ts:22"}, "properties": {"repobilityId": "228a78de8adba9e1", "scanner": "scanner-primary", "fingerprint": "3cadc1a58f27a199", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-053ee30001657be1", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/promotions/draw/route.ts:17"}, "properties": {"repobilityId": "156f28f76cbe5a55", "scanner": "scanner-primary", "fingerprint": "053ee30001657be1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c958cc3d2a56f440", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/og/card/[slug]/route.tsx:6"}, "properties": {"repobilityId": "00ecfe62f8195258", "scanner": "scanner-primary", "fingerprint": "c958cc3d2a56f440", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08d95475bd250c5f", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/webhooks/paystack/route.ts:78"}, "properties": {"repobilityId": "92ab102d5f986739", "scanner": "scanner-primary", "fingerprint": "08d95475bd250c5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b5344912cef2d3b", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/dashboard/team/card/[id]/page.tsx:38"}, "properties": {"repobilityId": "ae708f92c61e50df", "scanner": "scanner-primary", "fingerprint": "5b5344912cef2d3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6eaa00f8d42be1e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/dashboard/card/page.tsx:14"}, "properties": {"repobilityId": "865a5df83e82949e", "scanner": "scanner-primary", "fingerprint": "f6eaa00f8d42be1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5388ff1de3c6c0e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin/page.tsx:86"}, "properties": {"repobilityId": "d1de79173d8c33c3", "scanner": "scanner-primary", "fingerprint": "e5388ff1de3c6c0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46f2834bfbf3b7a7", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/upgrade/verify/page.tsx:17"}, "properties": {"repobilityId": "bf80269d31e70ab0", "scanner": "scanner-primary", "fingerprint": "46f2834bfbf3b7a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c4c2e4835571b4e", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/card/[slug]/page.tsx:81"}, "properties": {"repobilityId": "dc9c9a3ba803be58", "scanner": "scanner-primary", "fingerprint": "7c4c2e4835571b4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75115c677c369fca", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/biometric.ts:5"}, "properties": {"repobilityId": "ac13232fb8496532", "scanner": "scanner-primary", "fingerprint": "75115c677c369fca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45eae11d33943fe8", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/password-reset.ts:7"}, "properties": {"repobilityId": "64a1826b790da4bf", "scanner": "scanner-primary", "fingerprint": "45eae11d33943fe8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f1b3421ce7ac0ad", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/card-owner.ts:1"}, "properties": {"repobilityId": "5f6bf12bd307c26b", "scanner": "scanner-primary", "fingerprint": "3f1b3421ce7ac0ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45b98b2f05b86d06", "level": "none", "message": {"text": "Commented-code block (8 lines) in lib/google-wallet.ts:3"}, "properties": {"repobilityId": "566cc74f9d3bf6ab", "scanner": "scanner-primary", "fingerprint": "45b98b2f05b86d06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5adfd367d76a7287", "level": "none", "message": {"text": "Commented-code block (7 lines) in lib/card-server.ts:5"}, "properties": {"repobilityId": "b150ee02c29e5bf4", "scanner": "scanner-primary", "fingerprint": "5adfd367d76a7287", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}