{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: tagparkingboh/tagparkingboh.github.io", "shortDescription": {"text": "Foundry mined unresolved feedback: tagparkingboh/tagparkingboh.github.io"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: tagparkingboh/tagparkingboh.github.io\nThread: tagparkingboh/tagparkingboh.github.io#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: tagparkingboh/tagparkingboh.github.io\nThread: tagparkingboh/tagparkingboh.github.io#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tagparkingboh/tagparkingboh.github.io#1\nRepo: tagparkingboh/tagparkingboh.github.io\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 73\nEdges: 113\nNode types: {'pr_file': 61, 'link_quality': 4, 'co"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_bad_chain", "name": "Foundry mined bad chains: tagparkingboh/tagparkingboh.github.io", "shortDescription": {"text": "Foundry mined bad chains: tagparkingboh/tagparkingboh.github.io"}, "fullDescription": {"text": "Comment chain pattern product: bad_chains\nRepo: tagparkingboh/tagparkingboh.github.io\nThread: tagparkingboh/tagparkingboh.github.io#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: tagparkingboh/tagparkingboh.github.io#1\nRepo: tagparkingboh/tagparkingboh.github.io\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 61\nLabels: {'deployment_env_gap': 2}\nPolarities: {'bad': 2}\nChanged file labels: {'test_or_ci': 14, 'source_or_other': 3, 'api_or_backend': 30, 'schema_or_data': 1, 'dependency_or_build': 2, 'ui_or_frontend': 11}\nExa"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "high", "confidence": 0.84, "cwe": "", "owasp": ""}}, {"id": "scanner-d722fe91790ed0ca", "name": "Possibly dead Python function: update_booking_status", "shortDescription": {"text": "Possibly dead Python function: update_booking_status"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-06b3bb88e2406878", "name": "Possibly dead Python function: pickup_led_start_buffer", "shortDescription": {"text": "Possibly dead Python function: pickup_led_start_buffer"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07bf578c62691ac1", "name": "Possibly dead Python function: score", "shortDescription": {"text": "Possibly dead Python function: score"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0b9e230fe2b22e22", "name": "Possibly dead Python function: run_one", "shortDescription": {"text": "Possibly dead Python function: run_one"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-682a9362b15835ec", "name": "Possibly dead Python function: to_uk_time", "shortDescription": {"text": "Possibly dead Python function: to_uk_time"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db8bb15db6c8e490", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d16d7364e7974b5", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28cc21c7955d6c03", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-022ad63fae2da78a", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a7dc5c29b0eb3e7", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37cadbce8afd0a4d", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-756f369c5f52e00d", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db06d6b4ba7584b2", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25cf07407d13b3ef", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e187c51587e13fd3", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7aec84d967a7aef5", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b88a94aa5bd16a0b", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91aeb5ee67b69ebd", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0504249433900f4", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3a4e35d7c8c997e1", "name": "Stray `console.log` in TS/JS \u2014 tag-website/tests/waitlist-signup.spec.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/waitlist-signup.spec.ts:39"}, "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-0fc036035872a002", "name": "Stray `console.log` in TS/JS \u2014 tag-website/tests/promo-discount-types.spec.ts:408", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/promo-discount-types.spec.ts:408"}, "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-b91aa3455b54813d", "name": "Stray `console.log` in TS/JS \u2014 tag-website/tests/flight-arrival-date.spec.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/flight-arrival-date.spec.ts:120"}, "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-babf0c73af427083", "name": "Stray `console.log` in TS/JS \u2014 tag-website/tests/booking-flow.spec.ts:338", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/booking-flow.spec.ts:338"}, "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-51f80eaeb51b802a", "name": "Stray `console.log` in TS/JS \u2014 tag-website/tests/pricing-comprehensive.spec.ts:327", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/pricing-comprehensive.spec.ts:327"}, "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-06165edf8410237b", "name": "Stray `console.log` in TS/JS \u2014 tag-website/tests/utils/custom-reporter.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/utils/custom-reporter.ts:49"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f5e3be09e2891a6c", "name": "Stray `console.log` in TS/JS \u2014 tag-website/tests/pages/PaymentPage.ts:356", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/pages/PaymentPage.ts:356"}, "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-4b575f0dc92e15f3", "name": "Stray `console.log` in TS/JS \u2014 tag-website/src/LandingPage.jsx:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/LandingPage.jsx:77"}, "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-e19361de088cc1ee", "name": "Stray `console.log` in TS/JS \u2014 tag-website/src/Bookings.jsx:567", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/Bookings.jsx:567"}, "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-82986ed7f1dab225", "name": "Stray `console.log` in TS/JS \u2014 tag-website/src/HomePage.jsx:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/HomePage.jsx:168"}, "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-fa940d93fd4fd9d7", "name": "Icon-only button without accessible name \u2014 tag-website/src/Admin.jsx:7268", "shortDescription": {"text": "Icon-only button without accessible name \u2014 tag-website/src/Admin.jsx:7268"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-801de845a79222aa", "name": "Stray `console.log` in TS/JS \u2014 tag-website/src/BookingsNew.jsx:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/BookingsNew.jsx:113"}, "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-797340f1ce1ee118", "name": "Icon-only button without accessible name \u2014 tag-website/src/components/RosterCalendar.jsx:3766", "shortDescription": {"text": "Icon-only button without accessible name \u2014 tag-website/src/components/RosterCalendar.jsx:3766"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b9af2d14c90c8a36", "name": "Stray `console.log` in TS/JS \u2014 tag-website/src/components/StripePayment.jsx:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/components/StripePayment.jsx:109"}, "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-993808fa884d51a2", "name": "Stray `console.log` in TS/JS \u2014 tag-website/src/components/ManualBooking.jsx:694", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/components/ManualBooking.jsx:694"}, "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-e689048c7fe8e05a", "name": "Insecure pattern 'dangerous_innerhtml' in tag-website/playwright-report/index.html:58", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in tag-website/playwright-report/index.html:58"}, "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-7aece24522f6c9e3", "name": "Insecure pattern 'direct_innerhtml_assignment' in tag-website/playwright-report/index.html:57", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tag-website/playwright-report/index.html:57"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f4869fa401a125d2", "name": "Insecure pattern 'local_storage_auth_token' in tag-website/src/AuthContext.jsx:47", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in tag-website/src/AuthContext.jsx:47"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d7dfca986e30e925", "name": "Insecure pattern 'document_write' in tag-website/src/Admin.jsx:2021", "shortDescription": {"text": "Insecure pattern 'document_write' in tag-website/src/Admin.jsx:2021"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d57c100fffa54813", "name": "Insecure pattern 'local_storage_auth_token' in tag-website/src/Admin.jsx:1846", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in tag-website/src/Admin.jsx:1846"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7304793764d984c", "name": "Insecure pattern 'local_storage_auth_token' in tag-website/src/BookingsNew.jsx:158", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in tag-website/src/BookingsNew.jsx:158"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-94578708ea2741ed", "name": "Insecure pattern 'document_write' in tag-website/src/components/Payroll.jsx:338", "shortDescription": {"text": "Insecure pattern 'document_write' in tag-website/src/components/Payroll.jsx:338"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4fe0bfbb5652fce3", "name": "Insecure pattern 'document_write' in tag-website/src/components/EmployeePayroll.jsx:190", "shortDescription": {"text": "Insecure pattern 'document_write' in tag-website/src/components/EmployeePayroll.jsx:190"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-036deb24e2a58a2e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-617b5e434dfd0a6c", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6529fd323efdff07", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad6701f0a8405e22", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ed9af56c788f16d", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-920e30469946171f", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2d4f031ebdffd7e", "name": "Very large file: tag-website/src/Bookings.jsx (2092 lines)", "shortDescription": {"text": "Very large file: tag-website/src/Bookings.jsx (2092 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-5836ab23a3fbb491", "name": "Very large file: tag-website/src/Admin.jsx (17707 lines)", "shortDescription": {"text": "Very large file: tag-website/src/Admin.jsx (17707 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-5475f319b9735203", "name": "Very large file: tag-website/src/BookingsNew.jsx (3765 lines)", "shortDescription": {"text": "Very large file: tag-website/src/BookingsNew.jsx (3765 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-855b78577bbd0334", "name": "Very large file: tag-website/src/Employee.jsx (1333 lines)", "shortDescription": {"text": "Very large file: tag-website/src/Employee.jsx (1333 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-14e41a66ec8d0fa9", "name": "Very large file: tag-website/src/test/BookingsPersistence.test.jsx (1579 lines)", "shortDescription": {"text": "Very large file: tag-website/src/test/BookingsPersistence.test.jsx (1579 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-4d1671539ea59dad", "name": "Very large file: tag-website/src/test/BookingsNew.test.jsx (2948 lines)", "shortDescription": {"text": "Very large file: tag-website/src/test/BookingsNew.test.jsx (2948 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-a5bbae65c605af06", "name": "Very large file: tag-website/src/components/RosterCalendar.jsx (6021 lines)", "shortDescription": {"text": "Very large file: tag-website/src/components/RosterCalendar.jsx (6021 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-412c7be2f975d3db", "name": "Very large file: tag-website/src/components/ManualBooking.jsx (1483 lines)", "shortDescription": {"text": "Very large file: tag-website/src/components/ManualBooking.jsx (1483 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-be426d5ca4ef4147", "name": "Very large file: tag-website/src/components/qa/PlannedRosterCalendar.jsx (2536 lines)", "shortDescription": {"text": "Very large file: tag-website/src/components/qa/PlannedRosterCalendar.jsx (2536 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-7cf7739745698a6b", "name": "Very large file: backend/create_test_bookings.py (1348 lines)", "shortDescription": {"text": "Very large file: backend/create_test_bookings.py (1348 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-4eb95a3ab43ac2c0", "name": "Very large file: backend/auto_roster.py (1418 lines)", "shortDescription": {"text": "Very large file: backend/auto_roster.py (1418 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-8e44eae7d7d33cb1", "name": "Very large file: backend/roster_planner.py (1256 lines)", "shortDescription": {"text": "Very large file: backend/roster_planner.py (1256 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-1794dfb59f323b6f", "name": "Very large file: backend/db_models.py (1935 lines)", "shortDescription": {"text": "Very large file: backend/db_models.py (1935 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-df4ea511b733cb22", "name": "Very large file: backend/main.py (20394 lines)", "shortDescription": {"text": "Very large file: backend/main.py (20394 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-af9eb0194aa836f6", "name": "Very large file: backend/email_service.py (1338 lines)", "shortDescription": {"text": "Very large file: backend/email_service.py (1338 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-7a1b32254e72297c", "name": "Very large file: backend/tests/mocked/test_integration.py (1853 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_integration.py (1853 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-7095ee4df8d9d6e3", "name": "Very large file: backend/tests/mocked/test_manual_booking.py (1448 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_manual_booking.py (1448 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-f5493786f5a8035c", "name": "Very large file: backend/tests/mocked/test_roster_actions_v3.py (1549 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_roster_actions_v3.py (1549 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-74de3a43467dfa68", "name": "Very large file: backend/tests/mocked/test_referrals.py (1578 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_referrals.py (1578 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-9e3535758dd0c39b", "name": "Very large file: backend/tests/mocked/test_booking_stats_integration.py (1925 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_booking_stats_integration.py (1925 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-a24fd48f31b9cce9", "name": "Very large file: backend/tests/mocked/test_auto_roster.py (2944 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_auto_roster.py (2944 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-9613a7c7724b81d0", "name": "Very large file: backend/tests/mocked/test_promotions.py (3308 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_promotions.py (3308 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-1ee30f90eabc9c66", "name": "Very large file: backend/tests/mocked/test_booking_stats.py (2100 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_booking_stats.py (2100 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-a0cbe7d67eda2146", "name": "Very large file: backend/tests/mocked/test_dvla_compliance.py (1198 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_dvla_compliance.py (1198 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-4cfbaf2ecd0b28b0", "name": "Very large file: backend/tests/mocked/test_roster_planner_integration.py (2719 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_roster_planner_integration.py (2719 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-17ad36c4c4229e90", "name": "Very large file: backend/tests/mocked/test_main_coverage_hueb.py (1684 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_main_coverage_hueb.py (1684 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-091d70a69486a21b", "name": "Very large file: backend/tests/mocked/test_sms_integration.py (2493 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_sms_integration.py (2493 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-9a642a1ea59653ea", "name": "Very large file: backend/tests/mocked/test_admin_marketing_promo.py (1459 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_admin_marketing_promo.py (1459 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-e2315af6e993cf21", "name": "Very large file: backend/tests/mocked/test_roster_hueb_integration.py (1832 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_roster_hueb_integration.py (1832 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-ee5ff4be65cb2224", "name": "Very large file: backend/tests/mocked/test_roster_planner_engine.py (2279 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_roster_planner_engine.py (2279 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-d4d6a7f6be2db3ab", "name": "Very large file: backend/tests/mocked/test_blocked_dates.py (2688 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_blocked_dates.py (2688 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-ddaa33f2019ba3a8", "name": "Very large file: backend/tests/mocked/test_admin_bookings.py (1727 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_admin_bookings.py (1727 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-860e13919e98bb27", "name": "Very large file: backend/tests/mocked/test_financial_report.py (1851 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_financial_report.py (1851 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-8d4ea99fdc05b323", "name": "Very large file: backend/tests/mocked/test_admin_flights.py (1753 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_admin_flights.py (1753 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-111cea3de00662bb", "name": "Very large file: backend/tests/mocked/test_roster_helpers_and_hours_hueb.py (2593 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_roster_helpers_and_hours_hueb.py (2593 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-3b532e8c6e9c58ab", "name": "Very large file: backend/tests/mocked/test_edit_flight_details.py (1444 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_edit_flight_details.py (1444 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-6d716537f232d0cc", "name": "Very large file: backend/tests/mocked/test_weekly_hours.py (1773 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_weekly_hours.py (1773 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-33ad4a75d8e4a285", "name": "Very large file: backend/tests/mocked/test_vehicle_inspection.py (1785 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_vehicle_inspection.py (1785 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-3fb2a6f782b54b0c", "name": "Very large file: backend/tests/mocked/test_pricing.py (1446 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_pricing.py (1446 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-eefc1014d4089dba", "name": "Very large file: backend/tests/mocked/test_roster.py (3044 lines)", "shortDescription": {"text": "Very large file: backend/tests/mocked/test_roster.py (3044 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-586794370271ac38", "name": "Very large file: backend/routers/roster.py (5205 lines)", "shortDescription": {"text": "Very large file: backend/routers/roster.py (5205 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 676 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 104 placeholder/mock markers across 14 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-78aa64d71395caad", "name": "Commented-code block (7 lines) in tag-website/playwright.config.ts:81", "shortDescription": {"text": "Commented-code block (7 lines) in tag-website/playwright.config.ts: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-32abcb9c8afe07d6", "name": "Commented-code block (5 lines) in tag-website/tests/promo-discount-types.spec.ts:39", "shortDescription": {"text": "Commented-code block (5 lines) in tag-website/tests/promo-discount-types.spec.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-39ab8dc2b8f6b320", "name": "Commented-code block (5 lines) in tag-website/tests/flight-arrival-date.spec.ts:351", "shortDescription": {"text": "Commented-code block (5 lines) in tag-website/tests/flight-arrival-date.spec.ts:351"}, "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-ca4ced3883f10073", "name": "Commented-code block (9 lines) in tag-website/tests/booking-flow.spec.ts:107", "shortDescription": {"text": "Commented-code block (9 lines) in tag-website/tests/booking-flow.spec.ts:107"}, "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-72d8a729c0b6cc47", "name": "Commented-code block (6 lines) in tag-website/src/AuthContext.jsx:114", "shortDescription": {"text": "Commented-code block (6 lines) in tag-website/src/AuthContext.jsx:114"}, "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-70ba2c52c16614ac", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/AuthContext.jsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/AuthContext.jsx:67"}, "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-6cb0d042e8ed309a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Bookings.jsx:485", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Bookings.jsx:485"}, "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-2d2152bf25cf5f3c", "name": "Commented-code block (8 lines) in tag-website/src/HomePage.jsx:10", "shortDescription": {"text": "Commented-code block (8 lines) in tag-website/src/HomePage.jsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49d73755b0cb9307", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/HomePage.jsx:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/HomePage.jsx:89"}, "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-f711428911e8d2fb", "name": "Commented-code block (5 lines) in tag-website/src/Admin.jsx:5883", "shortDescription": {"text": "Commented-code block (5 lines) in tag-website/src/Admin.jsx:5883"}, "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-b484627024e1868f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Admin.jsx:1316", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Admin.jsx:1316"}, "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-475cb01be94d17a8", "name": "Commented-code block (7 lines) in tag-website/src/BookingsNew.jsx:163", "shortDescription": {"text": "Commented-code block (7 lines) in tag-website/src/BookingsNew.jsx:163"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8374a585f4708f82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/BookingsNew.jsx:209", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/BookingsNew.jsx:209"}, "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-e573d44aea06960d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Employee.jsx:703", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Employee.jsx:703"}, "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-aa2030b8616ddea6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/PromoModal.jsx:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/PromoModal.jsx:16"}, "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-d829f288c8ce8241", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/Pricing.test.jsx:594", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/Pricing.test.jsx:594"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e8ca657b0a0ec19", "name": "Commented-code block (6 lines) in tag-website/src/test/StripePayment.test.jsx:1388", "shortDescription": {"text": "Commented-code block (6 lines) in tag-website/src/test/StripePayment.test.jsx:1388"}, "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-67e69270b4af1e4c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminPopularRoutes.test.jsx:336", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminPopularRoutes.test.jsx:336"}, "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-faafa80d17b62ffc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/Employee.test.jsx:154", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/Employee.test.jsx:154"}, "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-c630757075c54a79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/TestimonialsCarousel.test.jsx:435", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/TestimonialsCarousel.test.jsx:435"}, "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-67b0ae5aee2fe8be", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminDropoffInspection.test.jsx:371", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminDropoffInspection.test.jsx:371"}, "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-fa380bc7d0358455", "name": "Commented-code block (9 lines) in tag-website/src/test/RosterCalendar.test.jsx:296", "shortDescription": {"text": "Commented-code block (9 lines) in tag-website/src/test/RosterCalendar.test.jsx:296"}, "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-3307021f5a82eeb0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminTestimonials.test.jsx:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminTestimonials.test.jsx:74"}, "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-33df3341bf10badb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminLeadsFounderEmail.test.jsx:213", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminLeadsFounderEmail.test.jsx:213"}, "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-33f704a7eabca977", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/auditLogsAutoRefresh.test.jsx:437", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/auditLogsAutoRefresh.test.jsx:437"}, "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-8f8646c0307121c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminReturnInspection.test.jsx:386", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminReturnInspection.test.jsx:386"}, "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-cc23230349cb19e8", "name": "Commented-code block (5 lines) in tag-website/src/test/capacity.test.js:121", "shortDescription": {"text": "Commented-code block (5 lines) in tag-website/src/test/capacity.test.js:121"}, "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-ffd3e7c7f7dbfab7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminFounderEmail.test.jsx:320", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminFounderEmail.test.jsx:320"}, "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-c471c4e06262fb75", "name": "Commented-code block (5 lines) in tag-website/src/utils/arrivalDate.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in tag-website/src/utils/arrivalDate.js: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-c3e6588855b4bc71", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/Payroll.jsx:194", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/Payroll.jsx:194"}, "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-ad9ad5cfe8b0610e", "name": "Legacy-named symbol `date_copy` in tag-website/src/components/RosterCalendar.jsx:2244", "shortDescription": {"text": "Legacy-named symbol `date_copy` in tag-website/src/components/RosterCalendar.jsx:2244"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-062edc3c290d7718", "name": "Commented-code block (9 lines) in tag-website/src/components/RosterCalendar.jsx:160", "shortDescription": {"text": "Commented-code block (9 lines) in tag-website/src/components/RosterCalendar.jsx:160"}, "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-c19f29eb7ee5f9f4", "name": "Commented-code block (5 lines) in tag-website/src/components/StripePayment.jsx:354", "shortDescription": {"text": "Commented-code block (5 lines) in tag-website/src/components/StripePayment.jsx:354"}, "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-a281cc0160d1b61e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/StripePayment.jsx:407", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/StripePayment.jsx:407"}, "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-68974ac8efc41cdd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/ManualBooking.jsx:223", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/ManualBooking.jsx:223"}, "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-cfc9a7a15645440d", "name": "Commented-code block (8 lines) in tag-website/src/components/qa/PlannedRosterCalendar.jsx:40", "shortDescription": {"text": "Commented-code block (8 lines) in tag-website/src/components/qa/PlannedRosterCalendar.jsx:40"}, "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-1d924e06703d43ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/qa/PlannedRosterCalendar.jsx:921", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/qa/PlannedRosterCalendar.jsx:921"}, "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-5b9092ce33be14b5", "name": "Commented-code block (6 lines) in backend/email_scheduler.py:580", "shortDescription": {"text": "Commented-code block (6 lines) in backend/email_scheduler.py:580"}, "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-9f7478a283c17d6a", "name": "Commented-code block (7 lines) in backend/database.py:197", "shortDescription": {"text": "Commented-code block (7 lines) in backend/database.py:197"}, "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-d2cb91ff0e06d114", "name": "Commented-code block (9 lines) in backend/db_service.py:773", "shortDescription": {"text": "Commented-code block (9 lines) in backend/db_service.py:773"}, "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-e025682fa6ebc868", "name": "Commented-code block (7 lines) in backend/create_test_bookings.py:701", "shortDescription": {"text": "Commented-code block (7 lines) in backend/create_test_bookings.py:701"}, "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-34418dff82871e86", "name": "Commented-code block (7 lines) in backend/roster_planner_runner.py:370", "shortDescription": {"text": "Commented-code block (7 lines) in backend/roster_planner_runner.py:370"}, "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-2c5f48a5e7d710a3", "name": "Commented-code block (8 lines) in backend/auto_roster.py:428", "shortDescription": {"text": "Commented-code block (8 lines) in backend/auto_roster.py:428"}, "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-c7c79c8f06fa24c7", "name": "Commented-code block (5 lines) in backend/booking_service.py:176", "shortDescription": {"text": "Commented-code block (5 lines) in backend/booking_service.py:176"}, "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-8d4a7a4975180cd6", "name": "Commented-code block (5 lines) in backend/models.py:868", "shortDescription": {"text": "Commented-code block (5 lines) in backend/models.py:868"}, "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-cb2f191450f7dcf8", "name": "Commented-code block (5 lines) in backend/roster_planner.py:114", "shortDescription": {"text": "Commented-code block (5 lines) in backend/roster_planner.py:114"}, "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-7acb00f54313c3c7", "name": "Commented-code block (5 lines) in backend/db_models.py:850", "shortDescription": {"text": "Commented-code block (5 lines) in backend/db_models.py:850"}, "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-d45936479dc6a4eb", "name": "Commented-code block (5 lines) in backend/run_staging_batches.py:43", "shortDescription": {"text": "Commented-code block (5 lines) in backend/run_staging_batches.py:43"}, "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-9b62fca7c21b0124", "name": "Commented-code block (5 lines) in backend/main.py:1619", "shortDescription": {"text": "Commented-code block (5 lines) in backend/main.py:1619"}, "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-15cb7154899f73c2", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_booking_admin_misc_hueb.py:246", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_booking_admin_misc_hueb.py:246"}, "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-eb4737fa6777fd83", "name": "Commented-code block (7 lines) in backend/tests/mocked/test_pr5_legacy_post_bookings_closed.py:49", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_pr5_legacy_post_bookings_closed.py:49"}, "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-78ab7aa2d60e2085", "name": "Commented-code block (5 lines) in backend/tests/mocked/test_promo_with_flexible_pricing.py:39", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_promo_with_flexible_pricing.py: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-cb40d3be0512a30f", "name": "Commented-code block (8 lines) in backend/tests/mocked/test_pr6_sms_webhook_auth_hueb.py:181", "shortDescription": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_pr6_sms_webhook_auth_hueb.py:181"}, "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-4af6f45701e85a36", "name": "Commented-code block (8 lines) in backend/tests/mocked/test_shift_buffer_extensions.py:176", "shortDescription": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_shift_buffer_extensions.py:176"}, "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-ee3c46d3b688113e", "name": "Commented-code block (5 lines) in backend/tests/mocked/test_pr4a_idor_closures_hueb.py:192", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_pr4a_idor_closures_hueb.py:192"}, "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-47cfe44f9ffbab44", "name": "Legacy-named symbol `test_target_equal_source_creates_literal_copy` in backend/tests/mocked/test_roster_actions_v3.py:34", "shortDescription": {"text": "Legacy-named symbol `test_target_equal_source_creates_literal_copy` in backend/tests/mocked/test_roster_actions_v3.py:344"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afba0c75a06fbe92", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_roster_actions_v3.py:152", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_roster_actions_v3.py:152"}, "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-b2b1aa5f7f5ee8ac", "name": "Commented-code block (8 lines) in backend/tests/mocked/test_pr4c_missed_gates_hueb.py:209", "shortDescription": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_pr4c_missed_gates_hueb.py:209"}, "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-4e24a5aa75d1ba30", "name": "Legacy-named symbol `test_dropoff_recent_pickup_old` in backend/tests/mocked/test_admin_bookings_optimization_integratio", "shortDescription": {"text": "Legacy-named symbol `test_dropoff_recent_pickup_old` in backend/tests/mocked/test_admin_bookings_optimization_integration.py:406"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-edae03ca0e91d118", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_auto_roster.py:227", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_auto_roster.py:227"}, "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-b9a6798a0350c1d3", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_stripe_webhook_refunds_hueb.py:153", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_stripe_webhook_refunds_hueb.py:153"}, "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-0a39e90f703887b5", "name": "Commented-code block (5 lines) in backend/tests/mocked/test_pr4b_draft_token_hueb.py:507", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_pr4b_draft_token_hueb.py:507"}, "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-90b2e89323fc44ff", "name": "Commented-code block (7 lines) in backend/tests/mocked/test_capacity_lock_hueb.py:372", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_capacity_lock_hueb.py:372"}, "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-296efe5643dfa551", "name": "Legacy-named symbol `test_founder_promo_defaults_to_unused` in backend/tests/mocked/test_founder_promo_code.py:692", "shortDescription": {"text": "Legacy-named symbol `test_founder_promo_defaults_to_unused` in backend/tests/mocked/test_founder_promo_code.py:692"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-806253ab2d052778", "name": "Commented-code block (5 lines) in backend/tests/mocked/test_auth_throttle_hueb.py:299", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_auth_throttle_hueb.py:299"}, "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-fa7455669539e8ee", "name": "Commented-code block (5 lines) in backend/tests/mocked/test_post_confirmation_task_order_hueb.py:163", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_post_confirmation_task_order_hueb.py:163"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52afbe246c3fda55", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_weekly_hours_breakdown.py:44", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_weekly_hours_breakdown.py:44"}, "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-0b014ee6ea727dcd", "name": "Commented-code block (5 lines) in backend/tests/mocked/test_dvla_compliance.py:874", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_dvla_compliance.py:874"}, "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-81a39abf650a1cb9", "name": "Commented-code block (5 lines) in backend/tests/mocked/test_roster_planner_integration.py:535", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_roster_planner_integration.py:535"}, "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-7df02be36fe0fc1f", "name": "Commented-code block (7 lines) in backend/tests/mocked/test_pr7_sql_console_hardening_hueb.py:129", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_pr7_sql_console_hardening_hueb.py:129"}, "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-7de63b0ef8843699", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_customers_auth_hueb.py:545", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_customers_auth_hueb.py:545"}, "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-e9adf1d10dd38823", "name": "Legacy-named symbol `secret_old` in backend/tests/mocked/test_main_coverage_hueb.py:490", "shortDescription": {"text": "Legacy-named symbol `secret_old` in backend/tests/mocked/test_main_coverage_hueb.py:490"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91d17b4cfd7e4ffa", "name": "Commented-code block (7 lines) in backend/tests/mocked/test_sms_webhooks_stats_hueb.py:23", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_sms_webhooks_stats_hueb.py:23"}, "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-88c67be47cf2d1b8", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_stripe_webhook_hueb_integration.py:162", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_stripe_webhook_hueb_integration.py:162"}, "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-3c7efb8b635d6005", "name": "Legacy-named symbol `test_promo_code_defaults_to_unused` in backend/tests/mocked/test_promo_code.py:365", "shortDescription": {"text": "Legacy-named symbol `test_promo_code_defaults_to_unused` in backend/tests/mocked/test_promo_code.py:365"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b739fee696e732b", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_roster_planner_engine.py:1588", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_roster_planner_engine.py:1588"}, "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-cc17cd165e9b6fac", "name": "Commented-code block (8 lines) in backend/tests/mocked/test_promo_modal_code.py:438", "shortDescription": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_promo_modal_code.py:438"}, "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-d601defc0512c229", "name": "Commented-code block (5 lines) in backend/tests/mocked/test_manual_booking_hueb.py:356", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_manual_booking_hueb.py:356"}, "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-0992a93fb9702778", "name": "Commented-code block (7 lines) in backend/tests/mocked/test_financial_report.py:1352", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_financial_report.py:1352"}, "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-7e320718dc88c1ba", "name": "Commented-code block (7 lines) in backend/tests/mocked/test_api.py:205", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_api.py:205"}, "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-62fa5450058a5cbe", "name": "Legacy-named symbol `pi_old` in backend/tests/mocked/test_promotion_code_prefix.py:528", "shortDescription": {"text": "Legacy-named symbol `pi_old` in backend/tests/mocked/test_promotion_code_prefix.py:528"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-48d4ea924e660eaf", "name": "Legacy-named symbol `existing_legacy` in backend/tests/mocked/test_marketing_subscriber_emails.py:459", "shortDescription": {"text": "Legacy-named symbol `existing_legacy` in backend/tests/mocked/test_marketing_subscriber_emails.py:459"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9e53f0be05218113", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_pickup_date_rollover.py:60", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_pickup_date_rollover.py:60"}, "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-524cef9034efa7a9", "name": "Legacy-named symbol `test_H_deletes_unused` in backend/tests/mocked/test_admin_promotions_hueb.py:411", "shortDescription": {"text": "Legacy-named symbol `test_H_deletes_unused` in backend/tests/mocked/test_admin_promotions_hueb.py:411"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-80d4bc38a3406276", "name": "Commented-code block (8 lines) in backend/tests/mocked/test_create_intent_hueb.py:295", "shortDescription": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_create_intent_hueb.py:295"}, "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-f25602295a00c935", "name": "Legacy-named symbol `should_send_old` in backend/tests/mocked/test_email_scheduler_mocked.py:420", "shortDescription": {"text": "Legacy-named symbol `should_send_old` in backend/tests/mocked/test_email_scheduler_mocked.py:420"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6bac8b550393383f", "name": "Legacy-named symbol `pricing_v1` in backend/tests/mocked/test_pricing.py:1269", "shortDescription": {"text": "Legacy-named symbol `pricing_v1` in backend/tests/mocked/test_pricing.py:1269"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e204056abae36be0", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_pr8_select_only_hueb.py:223", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_pr8_select_only_hueb.py:223"}, "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-06d7a8490a365c80", "name": "Legacy-named symbol `test_social_invite_can_use_neutral_intro_copy` in backend/tests/mocked/test_email_service_hueb.py:4", "shortDescription": {"text": "Legacy-named symbol `test_social_invite_can_use_neutral_intro_copy` in backend/tests/mocked/test_email_service_hueb.py:445"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf752d79abe45842", "name": "Commented-code block (6 lines) in backend/tests/mocked/test_session_tracking_integration.py:413", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_session_tracking_integration.py:413"}, "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-700ece13cee69caa", "name": "Legacy-named symbol `test_new_system_takes_precedence_over_legacy` in backend/tests/mocked/test_admin_bookings_promo_cod", "shortDescription": {"text": "Legacy-named symbol `test_new_system_takes_precedence_over_legacy` in backend/tests/mocked/test_admin_bookings_promo_code.py:617"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-34a9f3d41979e9e6", "name": "Legacy-named symbol `model_copy` in backend/tests/mocked/test_booking_service.py:149", "shortDescription": {"text": "Legacy-named symbol `model_copy` in backend/tests/mocked/test_booking_service.py:149"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b2c06768faf1ca9b", "name": "Legacy-named symbol `found_legacy` in backend/scripts/reset_test_promo.py:218", "shortDescription": {"text": "Legacy-named symbol `found_legacy` in backend/scripts/reset_test_promo.py:218"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-db6a1c90a64667d6", "name": "Commented-code block (6 lines) in backend/alembic/versions/c4ps3tt_add_parking_capacity_settings.py:22", "shortDescription": {"text": "Commented-code block (6 lines) in backend/alembic/versions/c4ps3tt_add_parking_capacity_settings.py: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-aac249c706664771", "name": "Commented-code block (5 lines) in backend/routers/roster.py:770", "shortDescription": {"text": "Commented-code block (5 lines) in backend/routers/roster.py:770"}, "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-ef22fd58bfde6f76", "name": "51 env vars used in code but missing from .env.example", "shortDescription": {"text": "51 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_SECRET`, `API_BASE_URL`, `BASE_URL`, `BROWSER`, `CI`, `DATABASE_URL`, `DEVICE`, `E2E_SOURCE_BRANCH` + 43 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/db_service.py:find_overcapacity_day_in_stay, backend/db_service.py:find_overcapacity_day_in_stay_locked\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/main.py:delete_booking, backend/main.py:resend_booking_confirmation_email, backend/main.py:send_cancellation_email_endpoint, backend/main.py:send_refund_email_endpoint\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/main.py:admin_cancel_customer_referral_code, backend/main.py:admin_generate_customer_referral_code, backend/main.py:admin_resend_customer_referral_code\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99b4419451f71123", "name": "Frontend route `/book-original` has no Link/navigate to it \u2014 tag-website/src/main.jsx", "shortDescription": {"text": "Frontend route `/book-original` has no Link/navigate to it \u2014 tag-website/src/main.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b8bf07c89f01f799", "name": "Frontend route `/admin` has no Link/navigate to it \u2014 tag-website/src/main.jsx", "shortDescription": {"text": "Frontend route `/admin` has no Link/navigate to it \u2014 tag-website/src/main.jsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-800c6d1470a92a68", "name": "Dangling fetch: GET /api/employee/bookings/${bookingId}/inspections (tag-website/src/test/Employee.test.jsx:213)", "shortDescription": {"text": "Dangling fetch: GET /api/employee/bookings/${bookingId}/inspections (tag-website/src/test/Employee.test.jsx:213)"}, "fullDescription": {"text": "`tag-website/src/test/Employee.test.jsx:213` calls `GET /api/employee/bookings/${bookingId}/inspections` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/employee/bookings/<p>/inspections`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd1d09b1b70e8ae4", "name": "Dangling fetch: GET /api/employee/bookings/${bookingId}/inspections (tag-website/src/test/Employee.test.jsx:238)", "shortDescription": {"text": "Dangling fetch: GET /api/employee/bookings/${bookingId}/inspections (tag-website/src/test/Employee.test.jsx:238)"}, "fullDescription": {"text": "`tag-website/src/test/Employee.test.jsx:238` calls `GET /api/employee/bookings/${bookingId}/inspections` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/employee/bookings/<p>/inspections`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`backend/main.py` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e501906e92fb6d87", "name": "Unused endpoint: POST /api/slots/available", "shortDescription": {"text": "Unused endpoint: POST /api/slots/available"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/slots/available` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a7845586da33e0fd", "name": "Unused endpoint: POST /api/slots/summary", "shortDescription": {"text": "Unused endpoint: POST /api/slots/summary"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/slots/summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-471bae46d24facce", "name": "Unused endpoint: POST /api/pickup/summary", "shortDescription": {"text": "Unused endpoint: POST /api/pickup/summary"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/pickup/summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43b470e0cbba53ca", "name": "Unused endpoint: POST /api/capacity/check", "shortDescription": {"text": "Unused endpoint: POST /api/capacity/check"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/capacity/check` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e2dd9e90f11f5bc", "name": "Unused endpoint: GET /api/capacity/daily", "shortDescription": {"text": "Unused endpoint: GET /api/capacity/daily"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/capacity/daily` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-edceebad82a59233", "name": "Unused endpoint: GET /api/capacity/check-slot", "shortDescription": {"text": "Unused endpoint: GET /api/capacity/check-slot"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/capacity/check-slot` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1dbecc7a7a65538", "name": "Unused endpoint: POST /api/pricing/calculate", "shortDescription": {"text": "Unused endpoint: POST /api/pricing/calculate"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/pricing/calculate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-11b47f2c26ddeec2", "name": "Unused endpoint: GET /api/pricing/tiers", "shortDescription": {"text": "Unused endpoint: GET /api/pricing/tiers"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/pricing/tiers` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f1b4275710b6a71", "name": "Unused endpoint: GET /api/prices/durations", "shortDescription": {"text": "Unused endpoint: GET /api/prices/durations"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/prices/durations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ad12bd153f07440", "name": "Unused endpoint: POST /api/promo/validate", "shortDescription": {"text": "Unused endpoint: POST /api/promo/validate"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/promo/validate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e40eaec7f11d60f9", "name": "Unused endpoint: GET /api/referrals/respond", "shortDescription": {"text": "Unused endpoint: GET /api/referrals/respond"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/referrals/respond` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e0fb7dc5056eceb", "name": "Unused endpoint: DELETE /api/bookings/{booking_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/bookings/{booking_id}"}, "fullDescription": {"text": "`backend/main.py` declares `DELETE /api/bookings/{booking_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f60559775ca3e13a", "name": "Unused endpoint: GET /api/admin/bookings", "shortDescription": {"text": "Unused endpoint: GET /api/admin/bookings"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/bookings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-88acb09f32e8cf5c", "name": "Unused endpoint: GET /api/admin/occupancy/{target_date}", "shortDescription": {"text": "Unused endpoint: GET /api/admin/occupancy/{target_date}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/occupancy/{target_date}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84b8569ae94e6c6a", "name": "Unused endpoint: GET /api/admin/bookings/stats", "shortDescription": {"text": "Unused endpoint: GET /api/admin/bookings/stats"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/bookings/stats` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c860ed2501d80f1e", "name": "Unused endpoint: POST /api/admin/bookings", "shortDescription": {"text": "Unused endpoint: POST /api/admin/bookings"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/bookings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3443be83a0e0bbb9", "name": "Unused endpoint: POST /api/admin/manual-booking", "shortDescription": {"text": "Unused endpoint: POST /api/admin/manual-booking"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/manual-booking` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5fb11905b9589bb2", "name": "Unused endpoint: POST /api/admin/bookings/{booking_id}/mark-paid", "shortDescription": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/mark-paid"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/bookings/{booking_id}/mark-paid` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7b5905921bd34b8", "name": "Unused endpoint: POST /api/admin/bookings/{booking_id}/cancel", "shortDescription": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/cancel"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/bookings/{booking_id}/cancel` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-321f8cfc275580a7", "name": "Unused endpoint: DELETE /api/admin/bookings/{booking_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/admin/bookings/{booking_id}"}, "fullDescription": {"text": "`backend/main.py` declares `DELETE /api/admin/bookings/{booking_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5a2d6910061cb79", "name": "Unused endpoint: PUT /api/admin/bookings/{booking_id}", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/bookings/{booking_id}"}, "fullDescription": {"text": "`backend/main.py` declares `PUT /api/admin/bookings/{booking_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7467a8036e98b16b", "name": "Unused endpoint: POST /api/admin/fix-overnight-arrivals", "shortDescription": {"text": "Unused endpoint: POST /api/admin/fix-overnight-arrivals"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/fix-overnight-arrivals` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae6af7287767a983", "name": "Unused endpoint: POST /api/admin/fix-customer-names", "shortDescription": {"text": "Unused endpoint: POST /api/admin/fix-customer-names"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/fix-customer-names` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f54af7a0648af377", "name": "Unused endpoint: POST /api/admin/bookings/{booking_id}/resend-email", "shortDescription": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/resend-email"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/bookings/{booking_id}/resend-email` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4c3881be2cb0ef7", "name": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-parking-update", "shortDescription": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-parking-update"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/bookings/{booking_id}/send-parking-update` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f50c22902a786162", "name": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-cancellation-email", "shortDescription": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-cancellation-email"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/bookings/{booking_id}/send-cancellation-email` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8638ccd4546b1be", "name": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-refund-email", "shortDescription": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-refund-email"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/bookings/{booking_id}/send-refund-email` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f23bb0c0aa6fd253", "name": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/swap-vehicle", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/swap-vehicle"}, "fullDescription": {"text": "`backend/main.py` declares `PUT /api/admin/bookings/{booking_id}/swap-vehicle` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1dd094262bc878d", "name": "Unused endpoint: GET /api/admin/marketing-subscribers", "shortDescription": {"text": "Unused endpoint: GET /api/admin/marketing-subscribers"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/marketing-subscribers` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e4b2e633b278b92", "name": "Unused endpoint: GET /api/admin/customers", "shortDescription": {"text": "Unused endpoint: GET /api/admin/customers"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/customers` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2254764ef4511322", "name": "Unused endpoint: PATCH /api/admin/customers/{customer_id}", "shortDescription": {"text": "Unused endpoint: PATCH /api/admin/customers/{customer_id}"}, "fullDescription": {"text": "`backend/main.py` declares `PATCH /api/admin/customers/{customer_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bc9125c5917a8fe", "name": "Unused endpoint: DELETE /api/admin/customers/{customer_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api/admin/customers/{customer_id}"}, "fullDescription": {"text": "`backend/main.py` declares `DELETE /api/admin/customers/{customer_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f3c27fb23b19acdc", "name": "Unused endpoint: GET /api/admin/marketing/referrals", "shortDescription": {"text": "Unused endpoint: GET /api/admin/marketing/referrals"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/marketing/referrals` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd607825f3559dc2", "name": "Unused endpoint: POST /api/admin/marketing/referrals/manual-invite", "shortDescription": {"text": "Unused endpoint: POST /api/admin/marketing/referrals/manual-invite"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/marketing/referrals/manual-invite` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79a899387dd4469a", "name": "Unused endpoint: GET /api/admin/customers/{customer_id}", "shortDescription": {"text": "Unused endpoint: GET /api/admin/customers/{customer_id}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/customers/{customer_id}` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54d2f1aa1a8bd48c", "name": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/cancel-code", "shortDescription": {"text": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/cancel-code"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/customers/{customer_id}/referral/cancel-code` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8513a334adf3fc6e", "name": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/generate-new-code", "shortDescription": {"text": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/generate-new-code"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/customers/{customer_id}/referral/generate-new-code` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52b52edb6a56b8b7", "name": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/resend-code", "shortDescription": {"text": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/resend-code"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/customers/{customer_id}/referral/resend-code` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-822e0157936f4145", "name": "Unused endpoint: POST /api/admin/customers/{customer_id}/vehicles", "shortDescription": {"text": "Unused endpoint: POST /api/admin/customers/{customer_id}/vehicles"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/admin/customers/{customer_id}/vehicles` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3a2502a0dc5269c", "name": "Unused endpoint: GET /api/admin/reports/booking-locations", "shortDescription": {"text": "Unused endpoint: GET /api/admin/reports/booking-locations"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/reports/booking-locations` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1c3a0fa892d04fd", "name": "Unused endpoint: GET /api/admin/capacity-settings", "shortDescription": {"text": "Unused endpoint: GET /api/admin/capacity-settings"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/capacity-settings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f73019ac5932def1", "name": "Unused endpoint: PUT /api/admin/capacity-settings", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/capacity-settings"}, "fullDescription": {"text": "`backend/main.py` declares `PUT /api/admin/capacity-settings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b3e8bb9e99605e43", "name": "Unused endpoint: GET /api/admin/reports/secondary-carpark", "shortDescription": {"text": "Unused endpoint: GET /api/admin/reports/secondary-carpark"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/reports/secondary-carpark` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d208619d0708f04", "name": "Unused endpoint: GET /api/admin/reports/occupancy", "shortDescription": {"text": "Unused endpoint: GET /api/admin/reports/occupancy"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/reports/occupancy` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-61c7a95950af462e", "name": "Unused endpoint: GET /api/admin/reports/fun-facts", "shortDescription": {"text": "Unused endpoint: GET /api/admin/reports/fun-facts"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/reports/fun-facts` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c02c01cc5df6c390", "name": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/financial-override", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/financial-override"}, "fullDescription": {"text": "`backend/main.py` declares `PUT /api/admin/bookings/{booking_id}/financial-override` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8189a3db2654ffd2", "name": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/refund-sync", "shortDescription": {"text": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/refund-sync"}, "fullDescription": {"text": "`backend/main.py` declares `PUT /api/admin/bookings/{booking_id}/refund-sync` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8af0579b55e2494a", "name": "Unused endpoint: GET /api/admin/reports/financial", "shortDescription": {"text": "Unused endpoint: GET /api/admin/reports/financial"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/reports/financial` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abbadc4aa1d35d0a", "name": "Unused endpoint: GET /api/admin/reports/financial/export", "shortDescription": {"text": "Unused endpoint: GET /api/admin/reports/financial/export"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/admin/reports/financial/export` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/20745"}, "properties": {"repository": "tagparkingboh/tagparkingboh.github.io", "repoUrl": "https://github.com/tagparkingboh/tagparkingboh.github.io", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: tagparkingboh/tagparkingboh.github.io"}, "properties": {"repobilityId": 370674, "scanner": "foundry_dataset", "fingerprint": "4a44cd7b514d080a429dd58bf4b3aff547b79a12dafbe73178f384a1bc8791c8", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"test_or_ci": 14, "api_or_backend": 30, "schema_or_data": 1, "ui_or_frontend": 11, "source_or_other": 3, "deployment_env_gap": 2, "dependency_or_build": 2, "issue_or_pull_request_thread": 1, "not_resolved_or_not_observed": 4, "human_reported_issue_no_linked_fix": 2, "thread_has_human_issue_without_fix_context": 2}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"not_resolved_or_not_observed": 8}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 113, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 2, "thread_has_comment": 2, "thread_touches_file": 61, "chain_has_link_quality": 4, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 2, "comment_chain_touches_file": 24, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 2}, "node_count": 73, "node_types": {"repo": 1, "thread": 1, "comment": 2, "pr_file": 61, "fix_outcome": 1, "issue_chain": 1, "link_quality": 4, "comment_chain": 2}, "query_type": "motif_query", "thread_key": "tagparkingboh/tagparkingboh.github.io#1", "issue_number": "1", "quality_tiers": {"unresolved": 4}, "repo_full_name": "tagparkingboh/tagparkingboh.github.io", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-e90bf335b3fca891", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"test_or_ci": 70, "api_or_backend": 150, "schema_or_data": 5, "ui_or_frontend": 55, "source_or_other": 15, "dependency_or_build": 10}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: tagparkingboh/tagparkingboh.github.io\nThread: tagparkingboh/tagparkingboh.github.io#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: tagparkingboh/tagparkingboh.github.io\nThread: tagparkingboh/tagparkingboh.github.io#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: tagparkingboh/tagparkingboh.github.io#1\nRepo: tagparkingboh/tagparkingboh.github.io\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 73\nEdges: 113\nNode types: {'pr_file': 61, 'link_quality': 4, 'comment': 2, 'comment_chain': 2, 'thread': 1, 'repo': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 61, 'comment_chain_touches_file': 24, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 4, 'thread_has_comment': 2, 'thread_has_comment_chain': 2, 'comment_has_chain': 2, 'issue_chain_has_comment_chain': 2, 'repo_has_thread': 1, 'thread_has_issue_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'api_or_backend': 30, 'test_or_ci': 14, 'ui_or_frontend': 11, 'not_resolved_or_not_observed': 4, 'source_or_other': 3, 'deployment_env_gap': 2, 'dependency_or_build': 2, 'human_reported_issue_no_linked_fix': 2, 'thread_has_human_issue_without_fix_context': 2, 'issue_or_pull_request_thread': 1, 'schema_or_data': 1}\nOutcomes: {'not_resolved_or_not_observed': 8}\nQuality tiers: {'unresolved': 4}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tagparkingboh/tagparkingboh.github.io", "source_id": "graph-query-motif_query-52f6ffdea35e1a24", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tagparkingboh/tagparkingboh.github.io", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_bad_chain", "level": "error", "message": {"text": "Foundry mined bad chains: tagparkingboh/tagparkingboh.github.io"}, "properties": {"repobilityId": 323288, "scanner": "foundry_dataset", "fingerprint": "a80d50d0d104fb62d1880bbc91930eed8b9ee9aabf7ebc9e3a6851fe7494f2a2", "category": "practices", "severity": "high", "confidence": 0.84, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "bad_chains", "synthetic": false, "thread_key": "tagparkingboh/tagparkingboh.github.io#1", "human_labels": ["api_or_backend", "dependency_or_build", "deployment_env_gap", "schema_or_data", "source_or_other", "test_or_ci", "ui_or_frontend"], "issue_number": "1", "thread_label": "thread_has_human_issue_without_fix_context", "outcome_label": "not_resolved_or_not_observed", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "tagparkingboh/tagparkingboh.github.io", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-b21cb112a5b1238d", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 5, "docs": 3}, "source_chain_kind": "issue_chain", "changed_file_count": 61, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"test_or_ci": 14, "api_or_backend": 30, "schema_or_data": 1, "ui_or_frontend": 11, "source_or_other": 3, "dependency_or_build": 2}, "linked_commit_count": 0, "helicopter_view_count": 2, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved", "high_risk_human_feedback_label"], "linked_ci_commit_count": 0, "verification_artifact_count": 5, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: bad_chains\nRepo: tagparkingboh/tagparkingboh.github.io\nThread: tagparkingboh/tagparkingboh.github.io#1\nOutcome: not_resolved_or_not_observed\nThread label: thread_has_human_issue_without_fix_context\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved, high_risk_human_feedback_label\nChain evidence:\nIssue/PR evidence chain: tagparkingboh/tagparkingboh.github.io#1\nRepo: tagparkingboh/tagparkingboh.github.io\nThread label: thread_has_human_issue_without_fix_context\nOutcome: not_resolved_or_not_observed\nComment count: 2\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 61\nLabels: {'deployment_env_gap': 2}\nPolarities: {'bad': 2}\nChanged file labels: {'test_or_ci': 14, 'source_or_other': 3, 'api_or_backend': 30, 'schema_or_data': 1, 'dependency_or_build': 2, 'ui_or_frontend': 11}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-12d1ed1235f12b20\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tagparkingboh/tagparkingboh.github.io/pull/1\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: pull_request_body\\nRepo: tagparkingboh/tagparkingboh.github.io\\nAuthor: tagparkingboh (User)\\nURL: https://github.com/tagparkingboh/tagparkingboh.github.io/pull/1\\nTitle: Merge homepage-updates to main for production launch\\nBody:\\n## Summary\\r\\n  - Updated homepage with Coming Soon buttons (booking system hidden)\\r\\n  - Fixed 100% off promo code flow\\r\\n  - Updated welcome and promo code email templates\\r\\n  - Fixed email links to point to tagparking.co.uk\\r\\n\\r\\n  ## Ready for production launch (booking system disabled\"\n  },\n  {\n    \"id\": \"github-feedback-comment-c3a68c4b92858f0e\",\n    \"kind\": \"issue_comment\",\n    \"label\": \"deployment_env_gap\",\n    \"polarity\": \"bad\",\n    \"url\": \"https://github.com/tagparkingboh/tagparkingboh.github.io/pull/1#issuecomment-3649572283\",\n    \"text\": \"GitHub feedback: deployment_env_gap\\nPolarity: bad\\nKind: issue_comment\\nRepo: tagparkingboh/tagparkingboh.github.io\\nAuthor: netlify[bot] (Bot)\\nURL: https://github.com/tagparkingboh/tagparkingboh.github.io/pull/1#issuecomment-3649572283\\nTitle: \\nBody:\\n### <span aria-hidden=\\\"true\\\">\u2705</span> Deploy Preview for *staging-tagparking* ready!\\n\\n\\n|  Name | Link |\\n|:-:|------------------------|\\n|<span aria-hidden=\\\"true\\\">\ud83d\udd28</span> Latest commit | 502372b17236efd028b411b91d4bce636ffc2141 |\\n|<span aria-hidden=\\\"true\\\">\ud83d\udd0d</span> Latest deploy log | https://app.netlify.com/projects/staging-tagparking/deploys/693d8efa0b134500083ae0e9 |\\n|<span aria-hidden=\\\"true\\\">\ud83d\ude0e</span> Deploy Preview | [https://deploy-preview-1--staging-tagparking.netlify.app](https://deploy-preview-1--staging-tagparking.netlify.app) |\\n|<span aria-hidden=\\\"true\\\">\ud83d\udcf1</span> Preview on mobile\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/tagparkingboh/tagparkingboh.github.io", "source_id": "comment-chain-pattern-bad_chains-0445b3d4b707c554", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/bad_chains/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "tagparkingboh/tagparkingboh.github.io", "source_dataset": "comment_chain_patterns/bad_chains", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "scanner-d722fe91790ed0ca", "level": "note", "message": {"text": "Possibly dead Python function: update_booking_status"}, "properties": {"repobilityId": "f6573cc81b54c330", "scanner": "scanner-primary", "fingerprint": "d722fe91790ed0ca", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/db_service.py:683"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-06b3bb88e2406878", "level": "note", "message": {"text": "Possibly dead Python function: pickup_led_start_buffer"}, "properties": {"repobilityId": "d42fcf7915681c85", "scanner": "scanner-primary", "fingerprint": "06b3bb88e2406878", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/roster_planner.py:252"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-07bf578c62691ac1", "level": "note", "message": {"text": "Possibly dead Python function: score"}, "properties": {"repobilityId": "379227b163d3203e", "scanner": "scanner-primary", "fingerprint": "07bf578c62691ac1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/roster_planner.py:854"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0b9e230fe2b22e22", "level": "note", "message": {"text": "Possibly dead Python function: run_one"}, "properties": {"repobilityId": "527a5104cdfde36f", "scanner": "scanner-primary", "fingerprint": "0b9e230fe2b22e22", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/run_staging_batches.py:90"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-682a9362b15835ec", "level": "note", "message": {"text": "Possibly dead Python function: to_uk_time"}, "properties": {"repobilityId": "08765aa8d4cc6709", "scanner": "scanner-primary", "fingerprint": "682a9362b15835ec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py:6571"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-db8bb15db6c8e490", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "db8bb15db6c8e490", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0b1751152310_add_marketing_subscribers_table.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d16d7364e7974b5", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "8d16d7364e7974b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/0b1751152310_add_marketing_subscribers_table.py:35"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28cc21c7955d6c03", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "28cc21c7955d6c03", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/r3t1nspd3c_add_return_inspection_declined.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-022ad63fae2da78a", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "022ad63fae2da78a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/r3t1nspd3c_add_return_inspection_declined.py:33"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8a7dc5c29b0eb3e7", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "8a7dc5c29b0eb3e7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/m4rk3m41l_add_marketing_email_campaigns.py:18"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-37cadbce8afd0a4d", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "37cadbce8afd0a4d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/m4rk3m41l_add_marketing_email_campaigns.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-756f369c5f52e00d", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "756f369c5f52e00d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/pr0m0m0dal_add_promo_modals_table.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-db06d6b4ba7584b2", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "db06d6b4ba7584b2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/pr0m0m0dal_add_promo_modals_table.py:45"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25cf07407d13b3ef", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "25cf07407d13b3ef", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/h34rd4b0ut_add_heard_about_us_feature.py:21"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e187c51587e13fd3", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "e187c51587e13fd3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/h34rd4b0ut_add_heard_about_us_feature.py:67"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7aec84d967a7aef5", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "7aec84d967a7aef5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/n4m3f13lds_add_name_fields_to_marketing_subscribers.py:30"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b88a94aa5bd16a0b", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "b88a94aa5bd16a0b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/n4m3f13lds_add_name_fields_to_marketing_subscribers.py:45"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-91aeb5ee67b69ebd", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "91aeb5ee67b69ebd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/pr0m0btntxt_add_button_text_color.py:19"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0504249433900f4", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "e0504249433900f4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/alembic/versions/pr0m0btntxt_add_button_text_color.py:23"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3a4e35d7c8c997e1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/waitlist-signup.spec.ts:39"}, "properties": {"repobilityId": "788699d7137855c7", "scanner": "scanner-primary", "fingerprint": "3a4e35d7c8c997e1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0fc036035872a002", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/promo-discount-types.spec.ts:408"}, "properties": {"repobilityId": "9c44d2d6f13ddc12", "scanner": "scanner-primary", "fingerprint": "0fc036035872a002", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b91aa3455b54813d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/flight-arrival-date.spec.ts:120"}, "properties": {"repobilityId": "ab318cea8f0cdf25", "scanner": "scanner-primary", "fingerprint": "b91aa3455b54813d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-babf0c73af427083", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/booking-flow.spec.ts:338"}, "properties": {"repobilityId": "2d863b68b4cc4a4b", "scanner": "scanner-primary", "fingerprint": "babf0c73af427083", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51f80eaeb51b802a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/pricing-comprehensive.spec.ts:327"}, "properties": {"repobilityId": "66b6207e26cada2d", "scanner": "scanner-primary", "fingerprint": "51f80eaeb51b802a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-06165edf8410237b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/utils/custom-reporter.ts:49"}, "properties": {"repobilityId": "f7f9a9082217e92c", "scanner": "scanner-primary", "fingerprint": "06165edf8410237b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5e3be09e2891a6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/tests/pages/PaymentPage.ts:356"}, "properties": {"repobilityId": "0a5b052c335fcc9b", "scanner": "scanner-primary", "fingerprint": "f5e3be09e2891a6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b575f0dc92e15f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/LandingPage.jsx:77"}, "properties": {"repobilityId": "70a87524564d20e9", "scanner": "scanner-primary", "fingerprint": "4b575f0dc92e15f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e19361de088cc1ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/Bookings.jsx:567"}, "properties": {"repobilityId": "968e5485d2609ea8", "scanner": "scanner-primary", "fingerprint": "e19361de088cc1ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-82986ed7f1dab225", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/HomePage.jsx:168"}, "properties": {"repobilityId": "ebe4983b43e84016", "scanner": "scanner-primary", "fingerprint": "82986ed7f1dab225", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa940d93fd4fd9d7", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 tag-website/src/Admin.jsx:7268"}, "properties": {"repobilityId": "c817eb24241d9abe", "scanner": "scanner-primary", "fingerprint": "fa940d93fd4fd9d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-801de845a79222aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/BookingsNew.jsx:113"}, "properties": {"repobilityId": "7741c0dc9b116ce7", "scanner": "scanner-primary", "fingerprint": "801de845a79222aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-797340f1ce1ee118", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 tag-website/src/components/RosterCalendar.jsx:3766"}, "properties": {"repobilityId": "7a2787c92436e146", "scanner": "scanner-primary", "fingerprint": "797340f1ce1ee118", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-b9af2d14c90c8a36", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/components/StripePayment.jsx:109"}, "properties": {"repobilityId": "e54c54deccb169ba", "scanner": "scanner-primary", "fingerprint": "b9af2d14c90c8a36", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-993808fa884d51a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tag-website/src/components/ManualBooking.jsx:694"}, "properties": {"repobilityId": "0a3e1cde1bcb9919", "scanner": "scanner-primary", "fingerprint": "993808fa884d51a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e689048c7fe8e05a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in tag-website/playwright-report/index.html:58"}, "properties": {"repobilityId": "ccf55f9cd542a933", "scanner": "scanner-primary", "fingerprint": "e689048c7fe8e05a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/playwright-report/index.html"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-7aece24522f6c9e3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in tag-website/playwright-report/index.html:57"}, "properties": {"repobilityId": "1473ecbed1239f8a", "scanner": "scanner-primary", "fingerprint": "7aece24522f6c9e3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/playwright-report/index.html"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-f4869fa401a125d2", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in tag-website/src/AuthContext.jsx:47"}, "properties": {"repobilityId": "0712196c57997db3", "scanner": "scanner-primary", "fingerprint": "f4869fa401a125d2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/src/AuthContext.jsx"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-d7dfca986e30e925", "level": "note", "message": {"text": "Insecure pattern 'document_write' in tag-website/src/Admin.jsx:2021"}, "properties": {"repobilityId": "76b849469f0a656f", "scanner": "scanner-primary", "fingerprint": "d7dfca986e30e925", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/src/Admin.jsx"}, "region": {"startLine": 2021}}}]}, {"ruleId": "scanner-d57c100fffa54813", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in tag-website/src/Admin.jsx:1846"}, "properties": {"repobilityId": "48d09290071ea24d", "scanner": "scanner-primary", "fingerprint": "d57c100fffa54813", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/src/Admin.jsx"}, "region": {"startLine": 1846}}}]}, {"ruleId": "scanner-c7304793764d984c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in tag-website/src/BookingsNew.jsx:158"}, "properties": {"repobilityId": "11f43c6a77bea5b4", "scanner": "scanner-primary", "fingerprint": "c7304793764d984c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/src/BookingsNew.jsx"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-94578708ea2741ed", "level": "note", "message": {"text": "Insecure pattern 'document_write' in tag-website/src/components/Payroll.jsx:338"}, "properties": {"repobilityId": "8e5e7cd81280310c", "scanner": "scanner-primary", "fingerprint": "94578708ea2741ed", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/src/components/Payroll.jsx"}, "region": {"startLine": 338}}}]}, {"ruleId": "scanner-4fe0bfbb5652fce3", "level": "note", "message": {"text": "Insecure pattern 'document_write' in tag-website/src/components/EmployeePayroll.jsx:190"}, "properties": {"repobilityId": "7aee6a2b6976e5b7", "scanner": "scanner-primary", "fingerprint": "4fe0bfbb5652fce3", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/src/components/EmployeePayroll.jsx"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-036deb24e2a58a2e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "568747abab9d125a", "scanner": "scanner-primary", "fingerprint": "036deb24e2a58a2e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/.github/workflows/deploy.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-036deb24e2a58a2e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a9c1d6c108503538", "scanner": "scanner-primary", "fingerprint": "036deb24e2a58a2e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/.github/workflows/deploy.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-036deb24e2a58a2e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "412d67e74ce8ea65", "scanner": "scanner-primary", "fingerprint": "036deb24e2a58a2e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/.github/workflows/deploy.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-036deb24e2a58a2e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "79e9e02ffc13b78a", "scanner": "scanner-primary", "fingerprint": "036deb24e2a58a2e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/.github/workflows/deploy.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-036deb24e2a58a2e", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6c0a613f9311a6d2", "scanner": "scanner-primary", "fingerprint": "036deb24e2a58a2e", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/.github/workflows/deploy.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-617b5e434dfd0a6c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "1f18eec543e046e4", "scanner": "scanner-primary", "fingerprint": "617b5e434dfd0a6c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tag-website/.github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6529fd323efdff07", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0729081163e87549", "scanner": "scanner-primary", "fingerprint": "6529fd323efdff07", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/smoke-tests.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-6529fd323efdff07", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8ac0b09eaf69f330", "scanner": "scanner-primary", "fingerprint": "6529fd323efdff07", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/smoke-tests.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2aee2e2d969c7c6b", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bee6b8956e03198c", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7368aacdd03a98e3", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b70dbcc8f54d72ab", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "419d1ec7943efec2", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-ad6701f0a8405e22", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "8384c23520d55657", "scanner": "scanner-primary", "fingerprint": "ad6701f0a8405e22", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9ed9af56c788f16d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "839e3a2305267436", "scanner": "scanner-primary", "fingerprint": "9ed9af56c788f16d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scheduled-tests.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-9ed9af56c788f16d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f8f232728010d632", "scanner": "scanner-primary", "fingerprint": "9ed9af56c788f16d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scheduled-tests.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-9ed9af56c788f16d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "93fe8902e1a74e3a", "scanner": "scanner-primary", "fingerprint": "9ed9af56c788f16d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scheduled-tests.yml"}, "region": {"startLine": 180}}}]}, {"ruleId": "scanner-920e30469946171f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "36836fc5a03595d7", "scanner": "scanner-primary", "fingerprint": "920e30469946171f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scheduled-e2e-staging.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-920e30469946171f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cc49f43f02e880c9", "scanner": "scanner-primary", "fingerprint": "920e30469946171f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scheduled-e2e-staging.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-920e30469946171f", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "af4a4fa2a6a9493f", "scanner": "scanner-primary", "fingerprint": "920e30469946171f", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/scheduled-e2e-staging.yml"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-e2d4f031ebdffd7e", "level": "note", "message": {"text": "Very large file: tag-website/src/Bookings.jsx (2092 lines)"}, "properties": {"repobilityId": "ad079ce3ff05f791", "scanner": "scanner-primary", "fingerprint": "e2d4f031ebdffd7e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5836ab23a3fbb491", "level": "note", "message": {"text": "Very large file: tag-website/src/Admin.jsx (17707 lines)"}, "properties": {"repobilityId": "acb07ab3a9b36542", "scanner": "scanner-primary", "fingerprint": "5836ab23a3fbb491", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5475f319b9735203", "level": "note", "message": {"text": "Very large file: tag-website/src/BookingsNew.jsx (3765 lines)"}, "properties": {"repobilityId": "2433e1a7dd45f435", "scanner": "scanner-primary", "fingerprint": "5475f319b9735203", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-855b78577bbd0334", "level": "note", "message": {"text": "Very large file: tag-website/src/Employee.jsx (1333 lines)"}, "properties": {"repobilityId": "be3c3c7c0bdb3513", "scanner": "scanner-primary", "fingerprint": "855b78577bbd0334", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-14e41a66ec8d0fa9", "level": "note", "message": {"text": "Very large file: tag-website/src/test/BookingsPersistence.test.jsx (1579 lines)"}, "properties": {"repobilityId": "6aba5a83c44b3d20", "scanner": "scanner-primary", "fingerprint": "14e41a66ec8d0fa9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d1671539ea59dad", "level": "note", "message": {"text": "Very large file: tag-website/src/test/BookingsNew.test.jsx (2948 lines)"}, "properties": {"repobilityId": "8cfb8bc8dc756198", "scanner": "scanner-primary", "fingerprint": "4d1671539ea59dad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a5bbae65c605af06", "level": "note", "message": {"text": "Very large file: tag-website/src/components/RosterCalendar.jsx (6021 lines)"}, "properties": {"repobilityId": "1e0f3a391cbc588f", "scanner": "scanner-primary", "fingerprint": "a5bbae65c605af06", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-412c7be2f975d3db", "level": "note", "message": {"text": "Very large file: tag-website/src/components/ManualBooking.jsx (1483 lines)"}, "properties": {"repobilityId": "f424fbe73bfdcc7a", "scanner": "scanner-primary", "fingerprint": "412c7be2f975d3db", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-be426d5ca4ef4147", "level": "note", "message": {"text": "Very large file: tag-website/src/components/qa/PlannedRosterCalendar.jsx (2536 lines)"}, "properties": {"repobilityId": "d98f96f2d64ea3d2", "scanner": "scanner-primary", "fingerprint": "be426d5ca4ef4147", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7cf7739745698a6b", "level": "note", "message": {"text": "Very large file: backend/create_test_bookings.py (1348 lines)"}, "properties": {"repobilityId": "363b7fe4f763a9fa", "scanner": "scanner-primary", "fingerprint": "7cf7739745698a6b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4eb95a3ab43ac2c0", "level": "note", "message": {"text": "Very large file: backend/auto_roster.py (1418 lines)"}, "properties": {"repobilityId": "ffe66eabb2bce97e", "scanner": "scanner-primary", "fingerprint": "4eb95a3ab43ac2c0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8e44eae7d7d33cb1", "level": "note", "message": {"text": "Very large file: backend/roster_planner.py (1256 lines)"}, "properties": {"repobilityId": "77d3e7800a2b202a", "scanner": "scanner-primary", "fingerprint": "8e44eae7d7d33cb1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1794dfb59f323b6f", "level": "note", "message": {"text": "Very large file: backend/db_models.py (1935 lines)"}, "properties": {"repobilityId": "253cced776920301", "scanner": "scanner-primary", "fingerprint": "1794dfb59f323b6f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-df4ea511b733cb22", "level": "note", "message": {"text": "Very large file: backend/main.py (20394 lines)"}, "properties": {"repobilityId": "fb764a5c13811891", "scanner": "scanner-primary", "fingerprint": "df4ea511b733cb22", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-af9eb0194aa836f6", "level": "note", "message": {"text": "Very large file: backend/email_service.py (1338 lines)"}, "properties": {"repobilityId": "1389993e0dbae9cd", "scanner": "scanner-primary", "fingerprint": "af9eb0194aa836f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7a1b32254e72297c", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_integration.py (1853 lines)"}, "properties": {"repobilityId": "828b961b781899b4", "scanner": "scanner-primary", "fingerprint": "7a1b32254e72297c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7095ee4df8d9d6e3", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_manual_booking.py (1448 lines)"}, "properties": {"repobilityId": "b136ea21742f675c", "scanner": "scanner-primary", "fingerprint": "7095ee4df8d9d6e3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f5493786f5a8035c", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_roster_actions_v3.py (1549 lines)"}, "properties": {"repobilityId": "aff55b483de0742f", "scanner": "scanner-primary", "fingerprint": "f5493786f5a8035c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-74de3a43467dfa68", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_referrals.py (1578 lines)"}, "properties": {"repobilityId": "ceb6a4cb4289fb46", "scanner": "scanner-primary", "fingerprint": "74de3a43467dfa68", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9e3535758dd0c39b", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_booking_stats_integration.py (1925 lines)"}, "properties": {"repobilityId": "134c2b7ee0ebc52c", "scanner": "scanner-primary", "fingerprint": "9e3535758dd0c39b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a24fd48f31b9cce9", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_auto_roster.py (2944 lines)"}, "properties": {"repobilityId": "56794f745ee38f2f", "scanner": "scanner-primary", "fingerprint": "a24fd48f31b9cce9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9613a7c7724b81d0", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_promotions.py (3308 lines)"}, "properties": {"repobilityId": "b2ef518a584c7ab1", "scanner": "scanner-primary", "fingerprint": "9613a7c7724b81d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1ee30f90eabc9c66", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_booking_stats.py (2100 lines)"}, "properties": {"repobilityId": "e96149cd732ad590", "scanner": "scanner-primary", "fingerprint": "1ee30f90eabc9c66", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a0cbe7d67eda2146", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_dvla_compliance.py (1198 lines)"}, "properties": {"repobilityId": "4086811e39c4fb7e", "scanner": "scanner-primary", "fingerprint": "a0cbe7d67eda2146", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4cfbaf2ecd0b28b0", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_roster_planner_integration.py (2719 lines)"}, "properties": {"repobilityId": "0dc7559c8d5b9398", "scanner": "scanner-primary", "fingerprint": "4cfbaf2ecd0b28b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-17ad36c4c4229e90", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_main_coverage_hueb.py (1684 lines)"}, "properties": {"repobilityId": "111218ec21e54907", "scanner": "scanner-primary", "fingerprint": "17ad36c4c4229e90", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-091d70a69486a21b", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_sms_integration.py (2493 lines)"}, "properties": {"repobilityId": "79756fadf86a35ce", "scanner": "scanner-primary", "fingerprint": "091d70a69486a21b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9a642a1ea59653ea", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_admin_marketing_promo.py (1459 lines)"}, "properties": {"repobilityId": "cec214e79923f67d", "scanner": "scanner-primary", "fingerprint": "9a642a1ea59653ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e2315af6e993cf21", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_roster_hueb_integration.py (1832 lines)"}, "properties": {"repobilityId": "86c2ffe2a416c35d", "scanner": "scanner-primary", "fingerprint": "e2315af6e993cf21", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ee5ff4be65cb2224", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_roster_planner_engine.py (2279 lines)"}, "properties": {"repobilityId": "ef48d4bfc4d6a061", "scanner": "scanner-primary", "fingerprint": "ee5ff4be65cb2224", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d4d6a7f6be2db3ab", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_blocked_dates.py (2688 lines)"}, "properties": {"repobilityId": "72690a4199594cf6", "scanner": "scanner-primary", "fingerprint": "d4d6a7f6be2db3ab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ddaa33f2019ba3a8", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_admin_bookings.py (1727 lines)"}, "properties": {"repobilityId": "51c929dbe3007f12", "scanner": "scanner-primary", "fingerprint": "ddaa33f2019ba3a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-860e13919e98bb27", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_financial_report.py (1851 lines)"}, "properties": {"repobilityId": "139c0d830dd4f0c3", "scanner": "scanner-primary", "fingerprint": "860e13919e98bb27", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8d4ea99fdc05b323", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_admin_flights.py (1753 lines)"}, "properties": {"repobilityId": "5583120a8410d37d", "scanner": "scanner-primary", "fingerprint": "8d4ea99fdc05b323", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-111cea3de00662bb", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_roster_helpers_and_hours_hueb.py (2593 lines)"}, "properties": {"repobilityId": "8e0b9ebc0c737580", "scanner": "scanner-primary", "fingerprint": "111cea3de00662bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b532e8c6e9c58ab", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_edit_flight_details.py (1444 lines)"}, "properties": {"repobilityId": "1c2ddd0459b9b566", "scanner": "scanner-primary", "fingerprint": "3b532e8c6e9c58ab", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6d716537f232d0cc", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_weekly_hours.py (1773 lines)"}, "properties": {"repobilityId": "9f8d75b3043d02be", "scanner": "scanner-primary", "fingerprint": "6d716537f232d0cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-33ad4a75d8e4a285", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_vehicle_inspection.py (1785 lines)"}, "properties": {"repobilityId": "139709d07ac11238", "scanner": "scanner-primary", "fingerprint": "33ad4a75d8e4a285", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3fb2a6f782b54b0c", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_pricing.py (1446 lines)"}, "properties": {"repobilityId": "5d7bd8d741761bc1", "scanner": "scanner-primary", "fingerprint": "3fb2a6f782b54b0c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-eefc1014d4089dba", "level": "note", "message": {"text": "Very large file: backend/tests/mocked/test_roster.py (3044 lines)"}, "properties": {"repobilityId": "4dc5bce48919f2d7", "scanner": "scanner-primary", "fingerprint": "eefc1014d4089dba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-586794370271ac38", "level": "note", "message": {"text": "Very large file: backend/routers/roster.py (5205 lines)"}, "properties": {"repobilityId": "444862fbde4a9e39", "scanner": "scanner-primary", "fingerprint": "586794370271ac38", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "37c3e377e4d466a9", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "50cff571652e084d", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "c44c11aea3ff3227", "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": "96c946a3306c8c1c", "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": "1736bf4a5f489888", "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": "dc5e35c393171e73", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-78aa64d71395caad", "level": "none", "message": {"text": "Commented-code block (7 lines) in tag-website/playwright.config.ts:81"}, "properties": {"repobilityId": "494c4f31a022bd85", "scanner": "scanner-primary", "fingerprint": "78aa64d71395caad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32abcb9c8afe07d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in tag-website/tests/promo-discount-types.spec.ts:39"}, "properties": {"repobilityId": "ce43444d7475b3c2", "scanner": "scanner-primary", "fingerprint": "32abcb9c8afe07d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39ab8dc2b8f6b320", "level": "none", "message": {"text": "Commented-code block (5 lines) in tag-website/tests/flight-arrival-date.spec.ts:351"}, "properties": {"repobilityId": "33d4620400cfadc5", "scanner": "scanner-primary", "fingerprint": "39ab8dc2b8f6b320", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca4ced3883f10073", "level": "none", "message": {"text": "Commented-code block (9 lines) in tag-website/tests/booking-flow.spec.ts:107"}, "properties": {"repobilityId": "987a6523a62ba61b", "scanner": "scanner-primary", "fingerprint": "ca4ced3883f10073", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72d8a729c0b6cc47", "level": "none", "message": {"text": "Commented-code block (6 lines) in tag-website/src/AuthContext.jsx:114"}, "properties": {"repobilityId": "d6dbef52b824610f", "scanner": "scanner-primary", "fingerprint": "72d8a729c0b6cc47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70ba2c52c16614ac", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/AuthContext.jsx:67"}, "properties": {"repobilityId": "923b7525b43103ac", "scanner": "scanner-primary", "fingerprint": "70ba2c52c16614ac", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6cb0d042e8ed309a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Bookings.jsx:485"}, "properties": {"repobilityId": "b7921b8c964cb75a", "scanner": "scanner-primary", "fingerprint": "6cb0d042e8ed309a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d2152bf25cf5f3c", "level": "none", "message": {"text": "Commented-code block (8 lines) in tag-website/src/HomePage.jsx:10"}, "properties": {"repobilityId": "16889db6f337dbb4", "scanner": "scanner-primary", "fingerprint": "2d2152bf25cf5f3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49d73755b0cb9307", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/HomePage.jsx:89"}, "properties": {"repobilityId": "f1aa60f4ede283f5", "scanner": "scanner-primary", "fingerprint": "49d73755b0cb9307", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f711428911e8d2fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in tag-website/src/Admin.jsx:5883"}, "properties": {"repobilityId": "f905981fc3ec8715", "scanner": "scanner-primary", "fingerprint": "f711428911e8d2fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b484627024e1868f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Admin.jsx:1316"}, "properties": {"repobilityId": "6d65aa75e113e1af", "scanner": "scanner-primary", "fingerprint": "b484627024e1868f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-475cb01be94d17a8", "level": "none", "message": {"text": "Commented-code block (7 lines) in tag-website/src/BookingsNew.jsx:163"}, "properties": {"repobilityId": "bb6d42ad46142675", "scanner": "scanner-primary", "fingerprint": "475cb01be94d17a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8374a585f4708f82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/BookingsNew.jsx:209"}, "properties": {"repobilityId": "112660b432f78fb0", "scanner": "scanner-primary", "fingerprint": "8374a585f4708f82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e573d44aea06960d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/Employee.jsx:703"}, "properties": {"repobilityId": "f53b20ca8975469d", "scanner": "scanner-primary", "fingerprint": "e573d44aea06960d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa2030b8616ddea6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/PromoModal.jsx:16"}, "properties": {"repobilityId": "416428e8edece71f", "scanner": "scanner-primary", "fingerprint": "aa2030b8616ddea6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d829f288c8ce8241", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/Pricing.test.jsx:594"}, "properties": {"repobilityId": "509fb92eec87506e", "scanner": "scanner-primary", "fingerprint": "d829f288c8ce8241", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e8ca657b0a0ec19", "level": "none", "message": {"text": "Commented-code block (6 lines) in tag-website/src/test/StripePayment.test.jsx:1388"}, "properties": {"repobilityId": "0ba79c8d7aa36475", "scanner": "scanner-primary", "fingerprint": "8e8ca657b0a0ec19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67e69270b4af1e4c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminPopularRoutes.test.jsx:336"}, "properties": {"repobilityId": "abc29774319de589", "scanner": "scanner-primary", "fingerprint": "67e69270b4af1e4c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-faafa80d17b62ffc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/Employee.test.jsx:154"}, "properties": {"repobilityId": "1e30868245a96272", "scanner": "scanner-primary", "fingerprint": "faafa80d17b62ffc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c630757075c54a79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/TestimonialsCarousel.test.jsx:435"}, "properties": {"repobilityId": "0898346f4d038f22", "scanner": "scanner-primary", "fingerprint": "c630757075c54a79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-67b0ae5aee2fe8be", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminDropoffInspection.test.jsx:371"}, "properties": {"repobilityId": "4082c15fe4bc5339", "scanner": "scanner-primary", "fingerprint": "67b0ae5aee2fe8be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fa380bc7d0358455", "level": "none", "message": {"text": "Commented-code block (9 lines) in tag-website/src/test/RosterCalendar.test.jsx:296"}, "properties": {"repobilityId": "11f1184e40a911dc", "scanner": "scanner-primary", "fingerprint": "fa380bc7d0358455", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3307021f5a82eeb0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminTestimonials.test.jsx:74"}, "properties": {"repobilityId": "55de9a5712a07c27", "scanner": "scanner-primary", "fingerprint": "3307021f5a82eeb0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33df3341bf10badb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminLeadsFounderEmail.test.jsx:213"}, "properties": {"repobilityId": "ded1e372229199a5", "scanner": "scanner-primary", "fingerprint": "33df3341bf10badb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33f704a7eabca977", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/auditLogsAutoRefresh.test.jsx:437"}, "properties": {"repobilityId": "031d3280939149e9", "scanner": "scanner-primary", "fingerprint": "33f704a7eabca977", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f8646c0307121c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminReturnInspection.test.jsx:386"}, "properties": {"repobilityId": "374de985b47e3229", "scanner": "scanner-primary", "fingerprint": "8f8646c0307121c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc23230349cb19e8", "level": "none", "message": {"text": "Commented-code block (5 lines) in tag-website/src/test/capacity.test.js:121"}, "properties": {"repobilityId": "9cf0d5779d94877d", "scanner": "scanner-primary", "fingerprint": "cc23230349cb19e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffd3e7c7f7dbfab7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/test/AdminFounderEmail.test.jsx:320"}, "properties": {"repobilityId": "d1575e3fb13226a3", "scanner": "scanner-primary", "fingerprint": "ffd3e7c7f7dbfab7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c471c4e06262fb75", "level": "none", "message": {"text": "Commented-code block (5 lines) in tag-website/src/utils/arrivalDate.js:4"}, "properties": {"repobilityId": "154ddda3430597af", "scanner": "scanner-primary", "fingerprint": "c471c4e06262fb75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3e6588855b4bc71", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/Payroll.jsx:194"}, "properties": {"repobilityId": "316ec34eac7713c3", "scanner": "scanner-primary", "fingerprint": "c3e6588855b4bc71", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ad9ad5cfe8b0610e", "level": "note", "message": {"text": "Legacy-named symbol `date_copy` in tag-website/src/components/RosterCalendar.jsx:2244"}, "properties": {"repobilityId": "168f71931f45001b", "scanner": "scanner-primary", "fingerprint": "ad9ad5cfe8b0610e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-062edc3c290d7718", "level": "none", "message": {"text": "Commented-code block (9 lines) in tag-website/src/components/RosterCalendar.jsx:160"}, "properties": {"repobilityId": "c76f7fc093050410", "scanner": "scanner-primary", "fingerprint": "062edc3c290d7718", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c19f29eb7ee5f9f4", "level": "none", "message": {"text": "Commented-code block (5 lines) in tag-website/src/components/StripePayment.jsx:354"}, "properties": {"repobilityId": "2cb33deeaf65dba2", "scanner": "scanner-primary", "fingerprint": "c19f29eb7ee5f9f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a281cc0160d1b61e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/StripePayment.jsx:407"}, "properties": {"repobilityId": "ff0141e693ca4b4d", "scanner": "scanner-primary", "fingerprint": "a281cc0160d1b61e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68974ac8efc41cdd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/ManualBooking.jsx:223"}, "properties": {"repobilityId": "3a90357162bfa9a5", "scanner": "scanner-primary", "fingerprint": "68974ac8efc41cdd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cfc9a7a15645440d", "level": "none", "message": {"text": "Commented-code block (8 lines) in tag-website/src/components/qa/PlannedRosterCalendar.jsx:40"}, "properties": {"repobilityId": "b8a22797af6ddcdb", "scanner": "scanner-primary", "fingerprint": "cfc9a7a15645440d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d924e06703d43ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 tag-website/src/components/qa/PlannedRosterCalendar.jsx:921"}, "properties": {"repobilityId": "ad213c13a56cbab3", "scanner": "scanner-primary", "fingerprint": "1d924e06703d43ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5b9092ce33be14b5", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/email_scheduler.py:580"}, "properties": {"repobilityId": "f3960a6e4541c181", "scanner": "scanner-primary", "fingerprint": "5b9092ce33be14b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f7478a283c17d6a", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/database.py:197"}, "properties": {"repobilityId": "f451ab7b8c84e02d", "scanner": "scanner-primary", "fingerprint": "9f7478a283c17d6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2cb91ff0e06d114", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/db_service.py:773"}, "properties": {"repobilityId": "8c9262d4ef17ebd0", "scanner": "scanner-primary", "fingerprint": "d2cb91ff0e06d114", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e025682fa6ebc868", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/create_test_bookings.py:701"}, "properties": {"repobilityId": "9c3cfb14c0cc0d17", "scanner": "scanner-primary", "fingerprint": "e025682fa6ebc868", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34418dff82871e86", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/roster_planner_runner.py:370"}, "properties": {"repobilityId": "417c5b4b9ab94049", "scanner": "scanner-primary", "fingerprint": "34418dff82871e86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c5f48a5e7d710a3", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/auto_roster.py:428"}, "properties": {"repobilityId": "a795612428806738", "scanner": "scanner-primary", "fingerprint": "2c5f48a5e7d710a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7c79c8f06fa24c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/booking_service.py:176"}, "properties": {"repobilityId": "43ece63627499231", "scanner": "scanner-primary", "fingerprint": "c7c79c8f06fa24c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d4a7a4975180cd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/models.py:868"}, "properties": {"repobilityId": "6e9fd8ac9e8ffc26", "scanner": "scanner-primary", "fingerprint": "8d4a7a4975180cd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb2f191450f7dcf8", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/roster_planner.py:114"}, "properties": {"repobilityId": "40a75a78127b3e1f", "scanner": "scanner-primary", "fingerprint": "cb2f191450f7dcf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7acb00f54313c3c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/db_models.py:850"}, "properties": {"repobilityId": "7d64328c3e6e8cea", "scanner": "scanner-primary", "fingerprint": "7acb00f54313c3c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d45936479dc6a4eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/run_staging_batches.py:43"}, "properties": {"repobilityId": "3d8fe838a0c82232", "scanner": "scanner-primary", "fingerprint": "d45936479dc6a4eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b62fca7c21b0124", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/main.py:1619"}, "properties": {"repobilityId": "d882cf3f03de638e", "scanner": "scanner-primary", "fingerprint": "9b62fca7c21b0124", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15cb7154899f73c2", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_booking_admin_misc_hueb.py:246"}, "properties": {"repobilityId": "c504b2e0b5626687", "scanner": "scanner-primary", "fingerprint": "15cb7154899f73c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb4737fa6777fd83", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_pr5_legacy_post_bookings_closed.py:49"}, "properties": {"repobilityId": "97fd8bb1ec9868e3", "scanner": "scanner-primary", "fingerprint": "eb4737fa6777fd83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78ab7aa2d60e2085", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_promo_with_flexible_pricing.py:39"}, "properties": {"repobilityId": "9127fb3bd79bd86e", "scanner": "scanner-primary", "fingerprint": "78ab7aa2d60e2085", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb40d3be0512a30f", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_pr6_sms_webhook_auth_hueb.py:181"}, "properties": {"repobilityId": "c3adc573f432d058", "scanner": "scanner-primary", "fingerprint": "cb40d3be0512a30f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4af6f45701e85a36", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_shift_buffer_extensions.py:176"}, "properties": {"repobilityId": "6035d2da4ad1eca2", "scanner": "scanner-primary", "fingerprint": "4af6f45701e85a36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee3c46d3b688113e", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_pr4a_idor_closures_hueb.py:192"}, "properties": {"repobilityId": "57e23fb5538e35a0", "scanner": "scanner-primary", "fingerprint": "ee3c46d3b688113e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47cfe44f9ffbab44", "level": "note", "message": {"text": "Legacy-named symbol `test_target_equal_source_creates_literal_copy` in backend/tests/mocked/test_roster_actions_v3.py:344"}, "properties": {"repobilityId": "6b4b596712aa7548", "scanner": "scanner-primary", "fingerprint": "47cfe44f9ffbab44", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-afba0c75a06fbe92", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_roster_actions_v3.py:152"}, "properties": {"repobilityId": "4f86047217740168", "scanner": "scanner-primary", "fingerprint": "afba0c75a06fbe92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2b1aa5f7f5ee8ac", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_pr4c_missed_gates_hueb.py:209"}, "properties": {"repobilityId": "7c11062f0d7a9d05", "scanner": "scanner-primary", "fingerprint": "b2b1aa5f7f5ee8ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e24a5aa75d1ba30", "level": "note", "message": {"text": "Legacy-named symbol `test_dropoff_recent_pickup_old` in backend/tests/mocked/test_admin_bookings_optimization_integration.py:406"}, "properties": {"repobilityId": "b62aa1a9a0f0e50f", "scanner": "scanner-primary", "fingerprint": "4e24a5aa75d1ba30", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-edae03ca0e91d118", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_auto_roster.py:227"}, "properties": {"repobilityId": "9151f597b7ad6336", "scanner": "scanner-primary", "fingerprint": "edae03ca0e91d118", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9a6798a0350c1d3", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_stripe_webhook_refunds_hueb.py:153"}, "properties": {"repobilityId": "1df444f34ee8e000", "scanner": "scanner-primary", "fingerprint": "b9a6798a0350c1d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a39e90f703887b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_pr4b_draft_token_hueb.py:507"}, "properties": {"repobilityId": "b67913a02d6852bc", "scanner": "scanner-primary", "fingerprint": "0a39e90f703887b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90b2e89323fc44ff", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_capacity_lock_hueb.py:372"}, "properties": {"repobilityId": "e1d52c6f80eda685", "scanner": "scanner-primary", "fingerprint": "90b2e89323fc44ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-296efe5643dfa551", "level": "note", "message": {"text": "Legacy-named symbol `test_founder_promo_defaults_to_unused` in backend/tests/mocked/test_founder_promo_code.py:692"}, "properties": {"repobilityId": "025b6635eeb1514f", "scanner": "scanner-primary", "fingerprint": "296efe5643dfa551", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-806253ab2d052778", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_auth_throttle_hueb.py:299"}, "properties": {"repobilityId": "4a6006576a49e7ab", "scanner": "scanner-primary", "fingerprint": "806253ab2d052778", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa7455669539e8ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_post_confirmation_task_order_hueb.py:163"}, "properties": {"repobilityId": "1e9629907a700e9b", "scanner": "scanner-primary", "fingerprint": "fa7455669539e8ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52afbe246c3fda55", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_weekly_hours_breakdown.py:44"}, "properties": {"repobilityId": "d1f65eafea71a087", "scanner": "scanner-primary", "fingerprint": "52afbe246c3fda55", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b014ee6ea727dcd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_dvla_compliance.py:874"}, "properties": {"repobilityId": "906ecb9448d872ec", "scanner": "scanner-primary", "fingerprint": "0b014ee6ea727dcd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-81a39abf650a1cb9", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_roster_planner_integration.py:535"}, "properties": {"repobilityId": "ee119249d939812c", "scanner": "scanner-primary", "fingerprint": "81a39abf650a1cb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7df02be36fe0fc1f", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_pr7_sql_console_hardening_hueb.py:129"}, "properties": {"repobilityId": "68488a3ff36b66cb", "scanner": "scanner-primary", "fingerprint": "7df02be36fe0fc1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7de63b0ef8843699", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_customers_auth_hueb.py:545"}, "properties": {"repobilityId": "79a62f21d07712dd", "scanner": "scanner-primary", "fingerprint": "7de63b0ef8843699", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9adf1d10dd38823", "level": "note", "message": {"text": "Legacy-named symbol `secret_old` in backend/tests/mocked/test_main_coverage_hueb.py:490"}, "properties": {"repobilityId": "6e6ae0db2e859133", "scanner": "scanner-primary", "fingerprint": "e9adf1d10dd38823", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-91d17b4cfd7e4ffa", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_sms_webhooks_stats_hueb.py:23"}, "properties": {"repobilityId": "b0b9a4d435f095da", "scanner": "scanner-primary", "fingerprint": "91d17b4cfd7e4ffa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88c67be47cf2d1b8", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_stripe_webhook_hueb_integration.py:162"}, "properties": {"repobilityId": "d17943effe608203", "scanner": "scanner-primary", "fingerprint": "88c67be47cf2d1b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c7efb8b635d6005", "level": "note", "message": {"text": "Legacy-named symbol `test_promo_code_defaults_to_unused` in backend/tests/mocked/test_promo_code.py:365"}, "properties": {"repobilityId": "ec28d452299eba0f", "scanner": "scanner-primary", "fingerprint": "3c7efb8b635d6005", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8b739fee696e732b", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_roster_planner_engine.py:1588"}, "properties": {"repobilityId": "efc7ebc01eb20745", "scanner": "scanner-primary", "fingerprint": "8b739fee696e732b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc17cd165e9b6fac", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_promo_modal_code.py:438"}, "properties": {"repobilityId": "f268075d5042effd", "scanner": "scanner-primary", "fingerprint": "cc17cd165e9b6fac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d601defc0512c229", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/mocked/test_manual_booking_hueb.py:356"}, "properties": {"repobilityId": "c2fd20e48adb796d", "scanner": "scanner-primary", "fingerprint": "d601defc0512c229", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0992a93fb9702778", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_financial_report.py:1352"}, "properties": {"repobilityId": "4f56f24837750442", "scanner": "scanner-primary", "fingerprint": "0992a93fb9702778", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e320718dc88c1ba", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/mocked/test_api.py:205"}, "properties": {"repobilityId": "4d8aa58fa35cb60b", "scanner": "scanner-primary", "fingerprint": "7e320718dc88c1ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62fa5450058a5cbe", "level": "note", "message": {"text": "Legacy-named symbol `pi_old` in backend/tests/mocked/test_promotion_code_prefix.py:528"}, "properties": {"repobilityId": "0041c876816c3d37", "scanner": "scanner-primary", "fingerprint": "62fa5450058a5cbe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-48d4ea924e660eaf", "level": "note", "message": {"text": "Legacy-named symbol `existing_legacy` in backend/tests/mocked/test_marketing_subscriber_emails.py:459"}, "properties": {"repobilityId": "2018db911426021e", "scanner": "scanner-primary", "fingerprint": "48d4ea924e660eaf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9e53f0be05218113", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_pickup_date_rollover.py:60"}, "properties": {"repobilityId": "2292deded4306a2d", "scanner": "scanner-primary", "fingerprint": "9e53f0be05218113", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-524cef9034efa7a9", "level": "note", "message": {"text": "Legacy-named symbol `test_H_deletes_unused` in backend/tests/mocked/test_admin_promotions_hueb.py:411"}, "properties": {"repobilityId": "1b2c8b16d5163b42", "scanner": "scanner-primary", "fingerprint": "524cef9034efa7a9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-80d4bc38a3406276", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/tests/mocked/test_create_intent_hueb.py:295"}, "properties": {"repobilityId": "9709504deb70cf26", "scanner": "scanner-primary", "fingerprint": "80d4bc38a3406276", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f25602295a00c935", "level": "note", "message": {"text": "Legacy-named symbol `should_send_old` in backend/tests/mocked/test_email_scheduler_mocked.py:420"}, "properties": {"repobilityId": "0d2f741d38fce45e", "scanner": "scanner-primary", "fingerprint": "f25602295a00c935", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6bac8b550393383f", "level": "note", "message": {"text": "Legacy-named symbol `pricing_v1` in backend/tests/mocked/test_pricing.py:1269"}, "properties": {"repobilityId": "6f812d57760e55ec", "scanner": "scanner-primary", "fingerprint": "6bac8b550393383f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e204056abae36be0", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_pr8_select_only_hueb.py:223"}, "properties": {"repobilityId": "e79a46804e207235", "scanner": "scanner-primary", "fingerprint": "e204056abae36be0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06d7a8490a365c80", "level": "note", "message": {"text": "Legacy-named symbol `test_social_invite_can_use_neutral_intro_copy` in backend/tests/mocked/test_email_service_hueb.py:445"}, "properties": {"repobilityId": "e676d20114445de3", "scanner": "scanner-primary", "fingerprint": "06d7a8490a365c80", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cf752d79abe45842", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/mocked/test_session_tracking_integration.py:413"}, "properties": {"repobilityId": "fb46ec3b9001a1cb", "scanner": "scanner-primary", "fingerprint": "cf752d79abe45842", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-700ece13cee69caa", "level": "note", "message": {"text": "Legacy-named symbol `test_new_system_takes_precedence_over_legacy` in backend/tests/mocked/test_admin_bookings_promo_code.py:617"}, "properties": {"repobilityId": "54964d3e612cd827", "scanner": "scanner-primary", "fingerprint": "700ece13cee69caa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-34a9f3d41979e9e6", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in backend/tests/mocked/test_booking_service.py:149"}, "properties": {"repobilityId": "4d4afd459a80efdf", "scanner": "scanner-primary", "fingerprint": "34a9f3d41979e9e6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b2c06768faf1ca9b", "level": "note", "message": {"text": "Legacy-named symbol `found_legacy` in backend/scripts/reset_test_promo.py:218"}, "properties": {"repobilityId": "cc750c7ad1a917db", "scanner": "scanner-primary", "fingerprint": "b2c06768faf1ca9b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-db6a1c90a64667d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/alembic/versions/c4ps3tt_add_parking_capacity_settings.py:22"}, "properties": {"repobilityId": "e88b3d8f5af8121c", "scanner": "scanner-primary", "fingerprint": "db6a1c90a64667d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aac249c706664771", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/routers/roster.py:770"}, "properties": {"repobilityId": "4beaccc3294cc23e", "scanner": "scanner-primary", "fingerprint": "aac249c706664771", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef22fd58bfde6f76", "level": "note", "message": {"text": "51 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "3022eac3b673b267", "scanner": "scanner-primary", "fingerprint": "ef22fd58bfde6f76", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "7a0c0059ef460a8d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0c9022ea23a1df95", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ca6ee65f0466e874", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "14c61a176bb27d58", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6c68c18ac82939fe", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6e30c026295930cc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "d52e43ffd340e85b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "cae1af9aad8787a9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "04b1fa84b9e6d804", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ffeae26c2d898a42", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c2f42c958e5f82f1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2d53b4b836b49a49", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "9bea7961361267dd", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "e62b38dbb999ef5c", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8d7bc72aa2ba7440", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "87feeca5953b7b0a", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5f1e0fabd5e549af", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c9e6bd6a9639e9b6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "827db8aa27fe38e4", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8cacd6ca43ad0dc2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-99b4419451f71123", "level": "warning", "message": {"text": "Frontend route `/book-original` has no Link/navigate to it \u2014 tag-website/src/main.jsx"}, "properties": {"repobilityId": "dc5143b2804db0f9", "scanner": "scanner-primary", "fingerprint": "99b4419451f71123", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b8bf07c89f01f799", "level": "warning", "message": {"text": "Frontend route `/admin` has no Link/navigate to it \u2014 tag-website/src/main.jsx"}, "properties": {"repobilityId": "acc88be1fdbaaa14", "scanner": "scanner-primary", "fingerprint": "b8bf07c89f01f799", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-800c6d1470a92a68", "level": "error", "message": {"text": "Dangling fetch: GET /api/employee/bookings/${bookingId}/inspections (tag-website/src/test/Employee.test.jsx:213)"}, "properties": {"repobilityId": "5ca6634fa2ac9599", "scanner": "scanner-primary", "fingerprint": "800c6d1470a92a68", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd1d09b1b70e8ae4", "level": "error", "message": {"text": "Dangling fetch: GET /api/employee/bookings/${bookingId}/inspections (tag-website/src/test/Employee.test.jsx:238)"}, "properties": {"repobilityId": "f8ad74255a6c164e", "scanner": "scanner-primary", "fingerprint": "bd1d09b1b70e8ae4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "9266ee3970fba636", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e501906e92fb6d87", "level": "note", "message": {"text": "Unused endpoint: POST /api/slots/available"}, "properties": {"repobilityId": "c504b368019c2963", "scanner": "scanner-primary", "fingerprint": "e501906e92fb6d87", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a7845586da33e0fd", "level": "note", "message": {"text": "Unused endpoint: POST /api/slots/summary"}, "properties": {"repobilityId": "aac567546743b5b0", "scanner": "scanner-primary", "fingerprint": "a7845586da33e0fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-471bae46d24facce", "level": "note", "message": {"text": "Unused endpoint: POST /api/pickup/summary"}, "properties": {"repobilityId": "d1bf1c599bd6175e", "scanner": "scanner-primary", "fingerprint": "471bae46d24facce", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43b470e0cbba53ca", "level": "note", "message": {"text": "Unused endpoint: POST /api/capacity/check"}, "properties": {"repobilityId": "dd28c630a06c180d", "scanner": "scanner-primary", "fingerprint": "43b470e0cbba53ca", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5e2dd9e90f11f5bc", "level": "note", "message": {"text": "Unused endpoint: GET /api/capacity/daily"}, "properties": {"repobilityId": "0c632ba1733aba09", "scanner": "scanner-primary", "fingerprint": "5e2dd9e90f11f5bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-edceebad82a59233", "level": "note", "message": {"text": "Unused endpoint: GET /api/capacity/check-slot"}, "properties": {"repobilityId": "4c4d3793aab50be9", "scanner": "scanner-primary", "fingerprint": "edceebad82a59233", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1dbecc7a7a65538", "level": "note", "message": {"text": "Unused endpoint: POST /api/pricing/calculate"}, "properties": {"repobilityId": "4a3c18c4a9f1d961", "scanner": "scanner-primary", "fingerprint": "c1dbecc7a7a65538", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-11b47f2c26ddeec2", "level": "note", "message": {"text": "Unused endpoint: GET /api/pricing/tiers"}, "properties": {"repobilityId": "b5647e776d904b39", "scanner": "scanner-primary", "fingerprint": "11b47f2c26ddeec2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5f1b4275710b6a71", "level": "note", "message": {"text": "Unused endpoint: GET /api/prices/durations"}, "properties": {"repobilityId": "4933f3e689b7768f", "scanner": "scanner-primary", "fingerprint": "5f1b4275710b6a71", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ad12bd153f07440", "level": "note", "message": {"text": "Unused endpoint: POST /api/promo/validate"}, "properties": {"repobilityId": "1707b765f22ec7f1", "scanner": "scanner-primary", "fingerprint": "9ad12bd153f07440", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e40eaec7f11d60f9", "level": "note", "message": {"text": "Unused endpoint: GET /api/referrals/respond"}, "properties": {"repobilityId": "0d372197fec56f4e", "scanner": "scanner-primary", "fingerprint": "e40eaec7f11d60f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5e0fb7dc5056eceb", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/bookings/{booking_id}"}, "properties": {"repobilityId": "ca0347c6682bc7f7", "scanner": "scanner-primary", "fingerprint": "5e0fb7dc5056eceb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f60559775ca3e13a", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/bookings"}, "properties": {"repobilityId": "9348fa77103181da", "scanner": "scanner-primary", "fingerprint": "f60559775ca3e13a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88acb09f32e8cf5c", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/occupancy/{target_date}"}, "properties": {"repobilityId": "c49f90ec1193bc6f", "scanner": "scanner-primary", "fingerprint": "88acb09f32e8cf5c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84b8569ae94e6c6a", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/bookings/stats"}, "properties": {"repobilityId": "1c18cb9017bb6137", "scanner": "scanner-primary", "fingerprint": "84b8569ae94e6c6a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c860ed2501d80f1e", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/bookings"}, "properties": {"repobilityId": "6f044019a7085210", "scanner": "scanner-primary", "fingerprint": "c860ed2501d80f1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3443be83a0e0bbb9", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/manual-booking"}, "properties": {"repobilityId": "746f4faee8a25811", "scanner": "scanner-primary", "fingerprint": "3443be83a0e0bbb9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5fb11905b9589bb2", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/mark-paid"}, "properties": {"repobilityId": "0696d82b05e32ad9", "scanner": "scanner-primary", "fingerprint": "5fb11905b9589bb2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7b5905921bd34b8", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/cancel"}, "properties": {"repobilityId": "c717079781146f6f", "scanner": "scanner-primary", "fingerprint": "d7b5905921bd34b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-321f8cfc275580a7", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/admin/bookings/{booking_id}"}, "properties": {"repobilityId": "13c46b4b982228a1", "scanner": "scanner-primary", "fingerprint": "321f8cfc275580a7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5a2d6910061cb79", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/bookings/{booking_id}"}, "properties": {"repobilityId": "7b08ef67294de561", "scanner": "scanner-primary", "fingerprint": "c5a2d6910061cb79", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7467a8036e98b16b", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/fix-overnight-arrivals"}, "properties": {"repobilityId": "52cdc52d6c829c15", "scanner": "scanner-primary", "fingerprint": "7467a8036e98b16b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ae6af7287767a983", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/fix-customer-names"}, "properties": {"repobilityId": "95d52f0c073c380d", "scanner": "scanner-primary", "fingerprint": "ae6af7287767a983", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f54af7a0648af377", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/resend-email"}, "properties": {"repobilityId": "81e5d507179aafc9", "scanner": "scanner-primary", "fingerprint": "f54af7a0648af377", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4c3881be2cb0ef7", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-parking-update"}, "properties": {"repobilityId": "1b444e1a40d00f30", "scanner": "scanner-primary", "fingerprint": "a4c3881be2cb0ef7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f50c22902a786162", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-cancellation-email"}, "properties": {"repobilityId": "2b88239d616347ba", "scanner": "scanner-primary", "fingerprint": "f50c22902a786162", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8638ccd4546b1be", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/bookings/{booking_id}/send-refund-email"}, "properties": {"repobilityId": "fffbc5d9ade6e506", "scanner": "scanner-primary", "fingerprint": "a8638ccd4546b1be", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f23bb0c0aa6fd253", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/swap-vehicle"}, "properties": {"repobilityId": "73e6d69bfc90344c", "scanner": "scanner-primary", "fingerprint": "f23bb0c0aa6fd253", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1dd094262bc878d", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/marketing-subscribers"}, "properties": {"repobilityId": "9ef8e11612b6ac0d", "scanner": "scanner-primary", "fingerprint": "b1dd094262bc878d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4e4b2e633b278b92", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/customers"}, "properties": {"repobilityId": "471f0e869e5ecd15", "scanner": "scanner-primary", "fingerprint": "4e4b2e633b278b92", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2254764ef4511322", "level": "note", "message": {"text": "Unused endpoint: PATCH /api/admin/customers/{customer_id}"}, "properties": {"repobilityId": "0ed68a1c98481b57", "scanner": "scanner-primary", "fingerprint": "2254764ef4511322", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3bc9125c5917a8fe", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/admin/customers/{customer_id}"}, "properties": {"repobilityId": "eb4d484ffbe66f0b", "scanner": "scanner-primary", "fingerprint": "3bc9125c5917a8fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f3c27fb23b19acdc", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/marketing/referrals"}, "properties": {"repobilityId": "fd1692f6e72af0c3", "scanner": "scanner-primary", "fingerprint": "f3c27fb23b19acdc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd607825f3559dc2", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/marketing/referrals/manual-invite"}, "properties": {"repobilityId": "6bcedf4735a5dfc6", "scanner": "scanner-primary", "fingerprint": "cd607825f3559dc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-79a899387dd4469a", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/customers/{customer_id}"}, "properties": {"repobilityId": "11831fb0b771ec9c", "scanner": "scanner-primary", "fingerprint": "79a899387dd4469a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-54d2f1aa1a8bd48c", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/cancel-code"}, "properties": {"repobilityId": "5c94b7506be30eab", "scanner": "scanner-primary", "fingerprint": "54d2f1aa1a8bd48c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8513a334adf3fc6e", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/generate-new-code"}, "properties": {"repobilityId": "46e72b12e94bd84d", "scanner": "scanner-primary", "fingerprint": "8513a334adf3fc6e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-52b52edb6a56b8b7", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/customers/{customer_id}/referral/resend-code"}, "properties": {"repobilityId": "2029c6cf92ad67a0", "scanner": "scanner-primary", "fingerprint": "52b52edb6a56b8b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-822e0157936f4145", "level": "note", "message": {"text": "Unused endpoint: POST /api/admin/customers/{customer_id}/vehicles"}, "properties": {"repobilityId": "1a77e485f496e206", "scanner": "scanner-primary", "fingerprint": "822e0157936f4145", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b3a2502a0dc5269c", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/reports/booking-locations"}, "properties": {"repobilityId": "28ca979839e38015", "scanner": "scanner-primary", "fingerprint": "b3a2502a0dc5269c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1c3a0fa892d04fd", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/capacity-settings"}, "properties": {"repobilityId": "d02ec4729baaaefc", "scanner": "scanner-primary", "fingerprint": "d1c3a0fa892d04fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f73019ac5932def1", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/capacity-settings"}, "properties": {"repobilityId": "863c8da27306ad1c", "scanner": "scanner-primary", "fingerprint": "f73019ac5932def1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b3e8bb9e99605e43", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/reports/secondary-carpark"}, "properties": {"repobilityId": "37657048f449e304", "scanner": "scanner-primary", "fingerprint": "b3e8bb9e99605e43", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0d208619d0708f04", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/reports/occupancy"}, "properties": {"repobilityId": "6c06e41862387254", "scanner": "scanner-primary", "fingerprint": "0d208619d0708f04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61c7a95950af462e", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/reports/fun-facts"}, "properties": {"repobilityId": "cb3667be9657c154", "scanner": "scanner-primary", "fingerprint": "61c7a95950af462e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c02c01cc5df6c390", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/financial-override"}, "properties": {"repobilityId": "8483ff18cf560212", "scanner": "scanner-primary", "fingerprint": "c02c01cc5df6c390", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8189a3db2654ffd2", "level": "note", "message": {"text": "Unused endpoint: PUT /api/admin/bookings/{booking_id}/refund-sync"}, "properties": {"repobilityId": "fed8290bf6661721", "scanner": "scanner-primary", "fingerprint": "8189a3db2654ffd2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8af0579b55e2494a", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/reports/financial"}, "properties": {"repobilityId": "dcfa1d784362315d", "scanner": "scanner-primary", "fingerprint": "8af0579b55e2494a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abbadc4aa1d35d0a", "level": "note", "message": {"text": "Unused endpoint: GET /api/admin/reports/financial/export"}, "properties": {"repobilityId": "f256a9d70238b046", "scanner": "scanner-primary", "fingerprint": "abbadc4aa1d35d0a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}