{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-f908af8c2829233a", "name": "Possibly dead Python function: require_internal_key", "shortDescription": {"text": "Possibly dead Python function: require_internal_key"}, "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-a5778f68ea8da84a", "name": "Possibly dead Python function: run_solver", "shortDescription": {"text": "Possibly dead Python function: run_solver"}, "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-ed4801e21069a9d5", "name": "Possibly dead Python function: invalidate", "shortDescription": {"text": "Possibly dead Python function: invalidate"}, "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-404788da5b8b982a", "name": "Possibly dead Python function: require_internal_key", "shortDescription": {"text": "Possibly dead Python function: require_internal_key"}, "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-eef31fb605759199", "name": "Possibly dead Python function: to_minutes", "shortDescription": {"text": "Possibly dead Python function: to_minutes"}, "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-4f2c543aff15039f", "name": "Possibly dead Python function: require_internal_key", "shortDescription": {"text": "Possibly dead Python function: require_internal_key"}, "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-e471ccb27b385d9d", "name": "Possibly dead Python function: build_aircraft_network", "shortDescription": {"text": "Possibly dead Python function: build_aircraft_network"}, "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-797fd3a9b06f978b", "name": "Possibly dead Python function: require_internal_key", "shortDescription": {"text": "Possibly dead Python function: require_internal_key"}, "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-97a164d82d1aabb1", "name": "Possibly dead Python function: feature_column_names", "shortDescription": {"text": "Possibly dead Python function: feature_column_names"}, "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-f726b67a736ea021", "name": "Possibly dead Python function: categorical_indices", "shortDescription": {"text": "Possibly dead Python function: categorical_indices"}, "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-e562cffacd12dad8", "name": "Possibly dead Python function: require_internal_key", "shortDescription": {"text": "Possibly dead Python function: require_internal_key"}, "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-f966c4ff23a39a53", "name": "Possibly dead Python function: covered_flight_ids", "shortDescription": {"text": "Possibly dead Python function: covered_flight_ids"}, "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-1229b9fc20f261b7", "name": "Possibly dead Python function: require_internal_key", "shortDescription": {"text": "Possibly dead Python function: require_internal_key"}, "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-a08ad08b3fe74e45", "name": "Possibly dead Python function: feature_column_names", "shortDescription": {"text": "Possibly dead Python function: feature_column_names"}, "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-ecc063cb2364851a", "name": "Possibly dead Python function: categorical_indices", "shortDescription": {"text": "Possibly dead Python function: categorical_indices"}, "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-9041ed99b0cd83fc", "name": "Possibly dead Python function: piecewise_linearise", "shortDescription": {"text": "Possibly dead Python function: piecewise_linearise"}, "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-d348dc2a2248b15e", "name": "Stray `console.log` in TS/JS \u2014 apps/mobile/utils/api-url.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile/utils/api-url.ts:38"}, "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-6320b33e8ebc0095", "name": "Stray `console.log` in TS/JS \u2014 apps/mobile/app/login.tsx:177", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile/app/login.tsx:177"}, "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-6af203cd91112727", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/wallpaper-bg.tsx:119", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/wallpaper-bg.tsx:119"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef5bf581337b6dfe", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/UserMenu.tsx:183", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/UserMenu.tsx:183"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97328caf6559d00f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/settings/ProfileHero.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/settings/ProfileHero.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bceb102b4985dec6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/settings/profile/security-card.tsx:50", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/settings/profile/security-card.tsx:50"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f5be45904ef49dc", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/user-detail.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/user-detail.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-164a1c19281e58ff", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/user-list.tsx:184", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/user-list.tsx:184"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48842d89ccae8993", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/tabs/security-tab.tsx:367", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/tabs/security-tab.tsx:367"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70ec2ebddddcaf9f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/roles/permission-tree.tsx:243", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/roles/permission-tree.tsx:243"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85986d012b4f9424", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/roles/role-detail.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/roles/role-detail.tsx:76"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fbc63d9ad71381d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licens", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licensing-changelog.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-691a4ac69a29ab89", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licens", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licensing-proposals.tsx:735"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70da2a4118b7bd7b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licens", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licensing-shell.tsx:1071"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7c249be0a6b7616", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/price-b", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/price-book-editor.tsx:111"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3520df0eae8df5c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/capacit", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/capacity-panel.tsx:197"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be740268ee4f8147", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/control", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/controls.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9220ada01a957c2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/rate-ca", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/rate-card-editor.tsx:237"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e60314e0cd789722", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/audit-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/audit-panel.tsx:104"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8034579c32b3646", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/paymen", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/payments-panel.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3e5ff40546e9af1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/overvi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/overview-panel.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14f66f3d11d2c727", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/editor", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/editor-modules-panel.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05507936b3cfdb9f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/invoic", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/invoices-table-panel.tsx:265"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdbc8e996decbdb1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/access-rights/skyai-access-matrix.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/access-rights/skyai-access-matrix.tsx:213"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-031c41be09ebc6d3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/access-rights/access-sidebar.tsx:9", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/access-rights/access-sidebar.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2eae8b9e23c29a2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/department-detail.tsx:247", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/department-detail.tsx:247"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8beb1938684e4a55", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/people-sidebar.tsx:202", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/people-sidebar.tsx:202"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61a4fbfb60c3c10f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/workgroup-detail.tsx:272", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/workgroup-detail.tsx:272"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d03d1cca99a627dc", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/_shared/icon-picker.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/_shared/icon-picker.tsx:58"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4524e80cd08c1866", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/_shared/sysadmin-center-header.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/_shared/sysadmin-center-header.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c5c4d2ec6e039ce", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/help/help-panel.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/help/help-panel.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-277fd2199c6b3523", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/filter-panel/fields.tsx:292", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/filter-panel/fields.tsx:292"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e6db48f8c9e402a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/filter-panel/file-field.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/filter-panel/file-field.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2efa16d27b7ea09d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/journey-log/journey-log-config-she", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/journey-log/journey-log-config-shell.tsx:258"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b600f5ea74b1ffa9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-open-duties", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-open-duties-section.tsx:371"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97e128903708bceb", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-filter-pane", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-filter-panel.tsx:176"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9a262a4e776a1e52", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/activity-hover-tooltip.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/activity-hover-tooltip.tsx:149"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fcca902d7bd47029", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/swap-approvals-panel.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/swap-approvals-panel.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-114d53412818392c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-context-men", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-context-menu.tsx:1273"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a2c9920b98ba466", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel.tsx:466"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d3f9138db1d78b8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-command-pal", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-command-palette.tsx:535"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39606191c5c6d943", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-activity-co", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-activity-code-multiselect.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-914428688f4b2687", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-left-panel.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-left-panel.tsx:297"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2f40832f1b2e403", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-memo-overla", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-memo-overlay.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac2043084c95617e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-swap-overla", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-swap-overlay.tsx:210"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b34f64bca1df7baf", "name": "Icon-only button without accessible name \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:1114", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:1114"}, "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-a3b9ead65df36df8", "name": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:427", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:427"}, "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-68aa81a5a3723fff", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/activity-code-picker.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/activity-code-picker.tsx:244"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58cf1d17d066964d", "name": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/crew-ops/schedule/skyai/skyai-panel.tsx:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/crew-ops/schedule/skyai/skyai-panel.tsx:102"}, "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-72426ebc9e678fde", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/skyai/skyai-history-menu.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/skyai/skyai-history-menu.tsx:60"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ae2480888069c0d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/legality-report-d", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/legality-report-dialog.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14e9e800557900ac", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/date-totals-dialo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/date-totals-dialog.tsx:132"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ccd70a654bbb684b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/temporary-base-di", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/temporary-base-dialog.tsx:302"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b66b7f771cec3fb4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/crew-on-pairing-d", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/crew-on-pairing-dialog.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3485299697ddea1d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/pic-assignment-di", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/pic-assignment-dialog.tsx:121"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ddf3444c476d81d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/assign-pairing-di", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/assign-pairing-dialog.tsx:215"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7788f22ca2ab000e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/duty-amendments/p", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/duty-amendments/pairing-summary-pane.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2d89bbae88195ad", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/duty-amendments/c", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/duty-amendments/crew-target-picker.tsx:45"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c18b2eec142a7180", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/filter-panel/hotac-filter-pa", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/filter-panel/hotac-filter-panel.tsx:214"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b1e5bbf14cac0af", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/booking-inspector.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/booking-inspector.tsx:68"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-173f95718e46c63c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/allocation-view.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/allocation-view.tsx:388"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15ba97efd3ea3e1e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/planning-view.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/planning-view.tsx:153"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c37fed6f63425d32", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/communication-view.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/communication-view.tsx:148"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc6dd58d8daa7506", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/day-to-day-view.tsx:99", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/day-to-day-view.tsx:99"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0a4c64dfcc1ca14", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/hotac-row-context-menu", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/hotac-row-context-menu.tsx:234"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65b0a83143792e91", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/audit-view.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/audit-view.tsx:174"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48cd0d50cf53fa66", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/email-detail-pane.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/email-detail-pane.tsx:50"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d0aee80cff3c18b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-roster/crew-roster-filter-pan", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-roster/crew-roster-filter-panel.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf7f8839bca52459", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-context-menu.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5a2508f11907531", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-board.tsx:155"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1c98950045c977c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-filter-panel.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af134f1ff7c751fe", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-code-group-dialog.tsx:119"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca6822a9576c2d56", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-data-grid.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-221c834c63458858", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac-config/hotac-config-shell.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac-config/hotac-config-shell.tsx:280"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1e475e149c3e00fe", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/common/crew-search-modal.tsx:230", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/common/crew-search-modal.tsx:230"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bbd8bbc45092fe9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/selection-criteria-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/selection-criteria-panel.tsx:135"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-642c122b14ce4e8d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/crew-list-panel.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/crew-list-panel.tsx:133"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec365833965c2184", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/document-list.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/document-list.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9adcd3bab355a74d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/common/crew-documen", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/common/crew-document-hero.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecb6a0743a0d28fb", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/duty-swap-config/duty-swap-config-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/duty-swap-config/duty-swap-config-shell.tsx:446"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46c70e6c3315c6b2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-pairings/crew-pairings-list.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-pairings/crew-pairings-list.tsx:103"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4ca84d13b44b047", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-pairings/crew-pairings-detail", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-pairings/crew-pairings-detail.tsx:267"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5de73408087beb30", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing-config/pairing-config-shel", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing-config/pairing-config-shell.tsx:358"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f597e68ba15685da", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-absence/panels.tsx:159", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-absence/panels.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bb9d47ae477c719", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-absence/register-table.tsx:16", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-absence/register-table.tsx:164"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83697fae52d6ef42", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/crew-sched", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/crew-schedule-stability-filter-panel.tsx:153"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-527341388c7fb2e7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/St", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/StabilityBreakdown.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b9b3f286cc05568", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/St", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/StabilityKpiTile.tsx:126"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db561e4c336da480", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/Cr", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/CrewDetailDrawer.tsx:217"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0dbfbd059dbe3821", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/St", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/StabilityRadial.tsx:365"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-766332afbb0d470c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/ground-communicati", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/ground-communication-view.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1f1c790b09a539e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/ground-planning-vi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/ground-planning-view.tsx:263"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bd08a89c5bbb337", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/flight-booking-dra", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/flight-booking-drawer.tsx:577"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19e4eeaea4e33270", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/transport-audit-vi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/transport-audit-view.tsx:145"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-080163d66000ebd8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/trip-inspector.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/trip-inspector.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-969ca072d044bec0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/transport-email-de", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/transport-email-detail.tsx:49"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2fcf60fec75f5493", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/data-import/data-import-shell.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/data-import/data-import-shell.tsx:172"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f48a73f52383ee9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule-audit/schedule-audit-tabl", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule-audit/schedule-audit-table.tsx:305"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-390c20ed23373f2c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/config-shared.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/config-shared.tsx:165"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35abd4e447530ef2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-detail.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-detail.tsx:78"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59780adf39af27f0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-log-shell.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-log-shell.tsx:199"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb23b37281a3ac1c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/add-country-picker.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/add-country-picker.tsx:158"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2870663693e1f8df", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-working-are", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-working-area.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1b208ec4a49850b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/country-detail.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/country-detail.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfc698f975e356e6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-cusres-modal.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-cusres-modal.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7324e924be516040", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/country-list.tsx:131", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/country-list.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-520cc2cbd72e9567", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-filter-pane", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-filter-panel.tsx:266"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-18235e1422bcb2c6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing-categories/pairing-categor", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing-categories/pairing-categories-shell.tsx:374"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2725c7487a75d503", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/shell/pairing-optimizer-sh", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/shell/pairing-optimizer-shell.tsx:217"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dabee8636c53de8b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/pairing-optimize", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/pairing-optimizer-stepper.tsx:85"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17163608e83064fc", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/colgen", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/colgen-telemetry.tsx:47"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0f7661e3a2bb00a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/solver", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/solver-telemetry-panel.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac2f1517eb31a405", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/kpi-ti", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/kpi-tiles.tsx:46"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-587f0ca19325183c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-c", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-canvas.tsx:1316"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c7b9cfc775390ab", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector-panel/index.tsx:1155"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b92aa71820d668fb", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/layover-chip.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/layover-chip.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c0084fc0ee405c0f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/pairing-list-pan", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/pairing-list-panel.tsx:512"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-705c90ff0d89c165", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/inspect-pairing-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/inspect-pairing-panel.tsx:111"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32a848aba203639a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/selection-inspec", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/selection-inspector-panel.tsx:524"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef89f90e894c4361", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/dialogs/bulk-delete-pairin", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/dialogs/bulk-delete-pairing-dialog.tsx:227"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e17febc1a4ab8c59", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/dialogs/replicate-pairing-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/dialogs/replicate-pairing-dialog.tsx:397"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d93b2da53f205d9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/manpower-planning/tabs/events-tab.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/manpower-planning/tabs/events-tab.tsx:149"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9a6111e17efccb3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/email-report-d", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/email-report-dialog.tsx:142"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97bd9af6372ec730", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew-info-tabs.tsx:300"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6eefc556bd89cdeb", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew-info-filter-panel.tsx:297"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25790c511e961f1b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew-info-personal.tsx:46"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f69699048cd44e6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/crew-profile-filter-p", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/crew-profile-filter-panel.tsx:197"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19be7f2820f0f7ba", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/common/tab-layout.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/common/tab-layout.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6d082f417fbff77", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/grid/aircraft-qualifi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/grid/aircraft-qualifications-grid.tsx:803"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60ea90d8c32f0ecf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/employment-tab.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/employment-tab.tsx:344"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-754a03e4dadad5c1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/expiries-tab.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/expiries-tab.tsx:391"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29c268341c2dee3c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/identity-tab.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/identity-tab.tsx:386"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-77cebaccf063b0a4", "name": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/audit-history-tab.tsx:18", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/audit-history-tab.tsx:18"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdf013aff6867a08", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule-publish/schedule-publish-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule-publish/schedule-publish-filter-panel.tsx:201"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39ff1dfe4fbd8162", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/open-flights-bidding/open-flights-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/open-flights-bidding/open-flights-bidding-shell.tsx:256"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80055a80df94f8da", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/scheduling-config/scheduling-confi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/scheduling-config/scheduling-config-shell.tsx:771"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d93cbc2f07fb985", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-count/crew-count-charts.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-count/crew-count-charts.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-749d98b673c59319", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-count/crew-count-matrix.tsx:6", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-count/crew-count-matrix.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-072feab947307859", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/comm-contacts-tab.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/comm-contacts-tab.tsx:206"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1f78c17f5e15fd1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/comm-logs-tab.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/comm-logs-tab.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-350c142d3ddda6c3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/check-in-crew-list.tsx:17", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/check-in-crew-list.tsx:173"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-449d74451198d18c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx:1928", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx:1928"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f03ad54bdbd65f0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/panels.tsx:436", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/panels.tsx:436"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55b73240cc7d0452", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/category-donut.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/category-donut.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d9f29a5b7c2de7f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/expiry-register-table.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/expiry-register-table.tsx:162"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc1a821120cc4ffe", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-tabl", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-table.tsx:346"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-546ea08c094a2f5b", "name": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-shell.tsx:147", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-shell.tsx:147"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6beb64a707dc3f39", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-filt", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-filter-panel.tsx:223"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d0fded69f123c7f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-config/crew-app-config-sh", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-config/crew-app-config-shell.tsx:419"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87983e17efe0ab4c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-out-of-base/crew-out-of-base-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-out-of-base/crew-out-of-base-station-pairings.tsx:69"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c0a5b29c5459ce5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-out-of-base/crew-out-of-base-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-out-of-base/crew-out-of-base-list.tsx:136"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9030f510a2a8f834", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/auto-roster/auto-roster-telemetry-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/auto-roster/auto-roster-telemetry-panel.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e01a8ed99e4d91d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx:1925"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-237d820132a4ec03", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/training/sessions/session-inspecto", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/training/sessions/session-inspector.tsx:109"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff5cce3d20b9cd33", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/training/sim-schedule/sim-schedule", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/training/sim-schedule/sim-schedule-gantt.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-437523d83a190a2e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/disruption-feed.tsx:364", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/disruption-feed.tsx:364"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d29cdd54d4a112fc", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/disruption-center/workflow-timeline.tsx:19", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/disruption-center/workflow-timeline.tsx:195"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c54d2c8f8b0ef1e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/assign-to-picker.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/assign-to-picker.tsx:105"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f78a2c04439f3f2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/disruption-center/disruption-hero.tsx:249", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/disruption-center/disruption-hero.tsx:249"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f7268edeb08a8fa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/resolve-dialog.tsx:84", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/resolve-dialog.tsx:84"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-324679028f14e3f6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/advisor-drawer.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/advisor-drawer.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db987c36821695e7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/active-bulletins-ribbon.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/active-bulletins-ribbon.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d58f264fbeb77b0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/recovery-advisor-panel.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/recovery-advisor-panel.tsx:234"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-328b89929da67509", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/recovery-apply-confirm.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/recovery-apply-confirm.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23fe5f62ec3b0483", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/customization/customizati", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/customization/customization-shell.tsx:398"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-389e513438fc439a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/kpi/severity-donut-card.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/kpi/severity-donut-card.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-091dce0e33f8bd1b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/kpi/workflow-status-card.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/kpi/workflow-status-card.tsx:74"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0255c988f345c26c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/ml-training-s", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/ml-training-shell.tsx:191"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-49f2f1a159a34797", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/sections/data", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/sections/dataset-section.tsx:375"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4f6d41f9e6666f8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/sections/weat", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/sections/weather-section.tsx:393"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f4170e311dffff2f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-messaging/send-panel.tsx:2", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-messaging/send-panel.tsx:298"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-129bc95c74f38e5d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-messaging/message-log-tabl", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-messaging/message-log-table.tsx:227"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f1e1a93dacc37890", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/fleet-utilization/top-utilization-c", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/fleet-utilization/top-utilization-card.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aeb1d5920ca905d3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/diff-summary-card.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/diff-summary-card.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c8076a0b2c5659de", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/gantt-canvas.tsx:1070", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/gantt-canvas.tsx:1070"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c4019962be14f6c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/crew-impact-side-sheet.tsx:10", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/crew-impact-side-sheet.tsx:100"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-158ea01ffa071ae7", "name": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/gantt/gantt-shell.tsx:52", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/gantt/gantt-shell.tsx:52"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bfb391207bab3db", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/delays-tab", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/delays-tab.tsx:368"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16549354c0f273c1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/jumpseater", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/jumpseater-dialog.tsx:245"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4781398c4f2123be", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/gendec-sen", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/gendec-send-panel.tsx:195"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ce6e404a5588e8a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/messages-t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/messages-tab.tsx:146"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b98646002f8bf0f4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/times-tab.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/times-tab.tsx:240"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f714f6c71e971b9d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/calendar-tab.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/calendar-tab.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2dae9df28b9c45f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/slot-filter-panel.tsx:431", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/slot-filter-panel.tsx:431"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f6a498b410631ba", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/fleet-overview.tsx:201", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/fleet-overview.tsx:201"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1afa4f927bbd1a55", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/airport-list-panel.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/airport-list-panel.tsx:218"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c2dbaae630f0bbc", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/components/airport-accordion-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/components/airport-accordion-row.tsx:103"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6480f6ae304343a3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/components/unified-series-row", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/components/unified-series-row.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-253662aa9757c731", "name": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/shared/predictive-cells.tsx:6", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/shared/predictive-cells.tsx:6"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1fec9dd3be5da15e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/public-timetable/public-timetable-t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/public-timetable/public-timetable-ticket.tsx:74"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-07f434b57cbed6a0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/public-timetable/airport-combobox.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/public-timetable/airport-combobox.tsx:140"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0dd69cb6a4ee2ae9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-summary/kpi-strip.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-summary/kpi-strip.tsx:38"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-625ee8f2572b00b2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-summary/section-header.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-summary/section-header.tsx:20"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7819c67e3dbfdb8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/scenario-compare/scenario-compare-o", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/scenario-compare/scenario-compare-overview.tsx:229"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24b9f2ff7ca99ae3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/grid-cell.tsx:331", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/grid-cell.tsx:331"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9e5b5cce6e74cd2", "name": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/schedule-grid/use-grid-keyboard.ts:283", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/schedule-grid/use-grid-keyboard.ts:283"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-383a56d5727cff25", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/grid-header.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/grid-header.tsx:64"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c26318dec79f7045", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/message-dialog.tsx:16", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/message-dialog.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed739131a316f52c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/ssim-export-dialog.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/ssim-export-dialog.tsx:232"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-378e95fc3917567b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/column-filter-dropdow", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/column-filter-dropdown.tsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a789bab4c9984c77", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/scenario-panel.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/scenario-panel.tsx:385"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-051e0fad22e2c6c9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/ribbon/ribbon-toolbar", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/ribbon/ribbon-toolbar.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a0ab0e659ca6ac2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/codeshare/agreement-detail-panel.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/codeshare/agreement-detail-panel.tsx:384"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-902e270700648d61", "name": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/codeshare/codeshare-types.ts:35", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/codeshare/codeshare-types.ts:35"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d869cfc922994dc", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/codeshare/partner-list-panel.tsx:97", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/codeshare/partner-list-panel.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cda0bb985ad1e7c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/apply-confirmation-dialog", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/apply-confirmation-dialog.tsx:208"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c92c594e12f5ccb", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs-shell.tsx:268", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs-shell.tsx:268"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6347af662521c39", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/network/optimizer/network-optimizer-splash", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/network/optimizer/network-optimizer-splash.tsx:184"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8393649b8cef8615", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/scenario-list.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/scenario-list.tsx:37"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c7573f8d8938327", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/optimizer-footer.tsx:98", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/optimizer-footer.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-967a13b45a2074fa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs/audit-inspector.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs/audit-inspector.tsx:52"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-822de0c0a632b4d2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs/runs-table.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs/runs-table.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b9e249931393f9b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/inspector/inspector.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/inspector/inspector.tsx:117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc52cf2effd19da5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/inspector/priority-slider", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/inspector/priority-slider.tsx:38"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a2ca980949758d9", "name": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/optimizer/inspector/priority-panel.tsx:22", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/optimizer/inspector/priority-panel.tsx:22"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-894cf609ed723f8a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/contract-detail-panel.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/contract-detail-panel.tsx:177"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f098f9a2fe43c7e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/charter-filter-panel.tsx:25", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/charter-filter-panel.tsx:254"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fc87b2b0b6d0471", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/contract-list-panel.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/contract-list-panel.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c287277ed4855d1f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/skyai/skyai-history-menu.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/skyai/skyai-history-menu.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b9f06df12b28f0f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/daily-schedule/report-table.tsx:163", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/daily-schedule/report-table.tsx:163"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc70dbe1220d3918", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/daily-schedule/filter-panel.tsx:478", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/daily-schedule/filter-panel.tsx:478"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c4bf32d09ce3863", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analys", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analysis-route-table.tsx:98"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ada1009c6c50c2ac", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analys", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analysis-heatmap.tsx:164"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ce6fc7a4e2fe70e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analys", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analysis-pattern-chart.tsx:164"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2d644b804486b0e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/global-runway-progress.tsx:662", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/global-runway-progress.tsx:662"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d188126c550fb4ad", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/timezone-dropdown.tsx:185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/timezone-dropdown.tsx:185"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d67048431168a49", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/ListScreenHeader.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/ListScreenHeader.tsx:65"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fde99b9a4abb7ca", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/dropdown.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/dropdown.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aecce0b70b294358", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/DetailScreenHeader.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/DetailScreenHeader.tsx:83"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb309205e4dd4f24", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/combobox.tsx:299", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/combobox.tsx:299"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6b9dacb44dfe0cb", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/runway-loading-panel.tsx:44", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/runway-loading-panel.tsx:44"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b1a009682aadb86", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/communication-deck/message-raw-card.tsx:376", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/communication-deck/message-raw-card.tsx:376"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d330c69950a9fbe", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/communication-deck/release-all-modal.tsx:12", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/communication-deck/release-all-modal.tsx:125"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67b26cf147d65e7b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/selection-criteria/multi-select.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/selection-criteria/multi-select.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecd64a9e3214c065", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/form-primitives.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/form-primitives.tsx:211"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22fa3a508accc1af", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-types/aircraft-type-detail.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-types/aircraft-type-detail.tsx:1352"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba8fdc50112ef41c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-types/aircraft-type-list.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-types/aircraft-type-list.tsx:115"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8acc62ea3caf329c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/non-crew-people/non-crew-people-list.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/non-crew-people/non-crew-people-list.tsx:146"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9940227556be24e6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/non-crew-people/non-crew-people-detai", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/non-crew-people/non-crew-people-detail.tsx:619"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f6cffddf48ac23ef", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/duty-patterns/duty-pattern-detail.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/duty-patterns/duty-pattern-detail.tsx:585"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa8bcf65bbf27072", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/duty-patterns/duty-pattern-list.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/duty-patterns/duty-pattern-list.tsx:125"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d63865c6b0f724a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-transport-vendors/crew-transport", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-transport-vendors/crew-transport-vendor-list.tsx:129"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8220b6100313cee", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/task-scheduler-shell.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/task-scheduler-shell.tsx:272"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a2deab1b4e2d378", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/run-history-modal.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/run-history-modal.tsx:101"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-564de13adbe9b211", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/task-config-drawer.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/task-config-drawer.tsx:119"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdb41a3ad51f2125", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/operators/operators-shell.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/operators/operators-shell.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93911e9b71b269a4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-positions/crew-position-detail.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-positions/crew-position-detail.tsx:722"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd33423c7b0060cf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-positions/crew-position-list.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-positions/crew-position-list.tsx:115"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2d2bc129226792a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/maintenance-checks/maintenance-check-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/maintenance-checks/maintenance-check-detail.tsx:843"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9af58a7eaa05e6f3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/maintenance-checks/maintenance-check-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/maintenance-checks/maintenance-check-list.tsx:100"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7efd001d99ecbf12", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-hotels/crew-hotel-list.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-hotels/crew-hotel-list.tsx:129"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5987059bb4d6ef34", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-hotels/crew-hotel-detail.tsx:405", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-hotels/crew-hotel-detail.tsx:405"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51bf4911f00673fd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/service-types/service-types-shell.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/service-types/service-types-shell.tsx:203"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c133e185cedfad94", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/mpp-lead-times/mpp-group-list.tsx:86", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/mpp-lead-times/mpp-group-list.tsx:86"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8362f041b58dbe08", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/mpp-lead-times/mpp-group-detail.tsx:5", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/mpp-lead-times/mpp-group-detail.tsx:512"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-237f29b2feec0711", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ai-integration/ai-integration-shell.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ai-integration/ai-integration-shell.tsx:331"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0dc5752aa86faddd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ai-integration/section-prompts.tsx:20", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ai-integration/section-prompts.tsx:204"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9dc3f077bdeeaebf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/fdtl-rules/fdtl-rules-hero.tsx:143", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/fdtl-rules/fdtl-rules-hero.tsx:143"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7decb734c671fd9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/turnaround-template", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/turnaround-template-list.tsx:165"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5422de4e9cc6d388", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/turnaround-template", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/turnaround-template-detail.tsx:304"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-62c18c309e95a448", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/service-definition-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/service-definition-list.tsx:162"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bbbdbfb48f1e49e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/sla-contract-detail", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/sla-contract-detail.tsx:262"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bcf4ea4ec794c01c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/alert-rules-shell.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/alert-rules-shell.tsx:322"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02b78d9b3e3d159a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/service-definition-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/service-definition-detail.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5311edd9f4fc0d7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/ground-handling-age", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/ground-handling-agent-list.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1ab87a830a9c7d2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/ground-handling-age", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/ground-handling-agent-detail.tsx:215"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7904c9d256cecb47", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/sla-contract-list.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/sla-contract-list.tsx:159"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb53cdee3c384c8a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/flight-training-activities/flight-tra", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/flight-training-activities/flight-training-activity-detail.tsx:627"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2998b56fc9d742e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/flight-training-activities/flight-tra", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/flight-training-activities/flight-training-activity-list.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b681b659f6d2da8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/airports/airport-list.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/airports/airport-list.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6836355efe6817b9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/airports/airport-detail.tsx:786", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/airports/airport-detail.tsx:786"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7f8b112616458f0b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/transmission-config/transmission-conf", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/transmission-config/transmission-config-shell.tsx:334"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e61193c5598b3523", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-registrations/aircraft-regis", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-registrations/aircraft-registration-list.tsx:125"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2422de95bef07bab", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-registrations/aircraft-regis", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-registrations/aircraft-registration-detail.tsx:1187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9f547d942b7be56", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/delay-codes/delay-codes-shell.tsx:333", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/delay-codes/delay-codes-shell.tsx:333"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3067433537b37388", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/instructor-qual-codes/instructor-qual", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/instructor-qual-codes/instructor-qual-code-detail.tsx:450"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bde30d3f0ce9f0d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/instructor-qual-codes/instructor-qual", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/instructor-qual-codes/instructor-qual-code-list.tsx:139"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e39774896f7f501", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-facilities/training-facility", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-facilities/training-facility-detail.tsx:550"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3af6a852c1da5f1e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-facilities/training-facility", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-facilities/training-facility-list.tsx:138"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d2fea722c75f6d1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/weather-integration/weather-integrati", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/weather-integration/weather-integration-shell.tsx:264"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c14218915e466195", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-groups/crew-group-detail.tsx:432", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-groups/crew-group-detail.tsx:432"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de1a26b22ef6cc64", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-groups/crew-group-list.tsx:93", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-groups/crew-group-list.tsx:93"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f377550f4a0968fa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/carrier-codes/carrier-codes-shell.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/carrier-codes/carrier-codes-shell.tsx:270"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9febf992065299f0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-courses/training-course-list", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-courses/training-course-list.tsx:131"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4232066e821977ed", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-courses/training-course-deta", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-courses/training-course-detail.tsx:681"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7119c17ede75e53", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/smtp-config/smtp-config-shell.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/smtp-config/smtp-config-shell.tsx:242"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6079d139fdd5d4a3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-bases/crew-bases-shell.tsx:284", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-bases/crew-bases-shell.tsx:284"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21b180b338ad8705", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/cabin-class-detail.tsx:851", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/cabin-class-detail.tsx:851"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63650ca243307f3d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/lopa-config-detail.tsx:1000", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/lopa-config-detail.tsx:1000"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dac1050bf75aa907", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/lopa-list.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/lopa-list.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc16cac468778a18", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-complements/crew-complement-tabl", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-complements/crew-complement-table.tsx:393"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-729b8f8d7b4a1a96", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-complements/crew-complement-type", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-complements/crew-complement-type-list.tsx:57"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-549f2a8d80c138a1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/expiry-codes/expiry-code-list.tsx:141", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/expiry-codes/expiry-code-list.tsx:141"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6d311473d736b3e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/activity-codes/activity-code-list.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/activity-codes/activity-code-list.tsx:294"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44a1d0ffd8e02db3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/city-pairs/citypair-detail.tsx:1387", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/city-pairs/citypair-detail.tsx:1387"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d90480b8be4bfc3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/city-pairs/citypair-list.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/city-pairs/citypair-list.tsx:124"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a2dccddcf7e1ba05", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/countries/country-detail.tsx:807", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/countries/country-detail.tsx:807"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60ead8ac4e21f773", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/countries/country-list.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/countries/country-list.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c946de3d7565ba43", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/consumer-form-mo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/consumer-form-modal.tsx:476"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ebf2c2185ac70a89", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/section-held.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/section-held.tsx:289"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5378b8b594e0ce1c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/asm-ssm-transmis", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/asm-ssm-transmission-shell.tsx:265"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed4bfa2750e5ac3d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/section-consumer", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/section-consumers.tsx:183"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb67533346ad9e41", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/_shared/aircraft-type-multi-select.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/_shared/aircraft-type-multi-select.tsx:253"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abff54de9a2c2faa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/_shared/role-select.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/_shared/role-select.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ab90fec8fd0f91d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/journey-log/signature-pad.tsx:3", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/journey-log/signature-pad.tsx:34"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3db90c9194f7a451", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/journey-log/journey-log-occ-shel", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/journey-log/journey-log-occ-shell.tsx:316"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7c658f9148bbe98", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/fuel-charts.tsx:245", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/fuel-charts.tsx:245"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60ecad11b6dc6c7e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/RadialNavigato", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/RadialNavigator.tsx:308"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-078baa62276154c3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/SyncedBreakdow", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/SyncedBreakdown.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d716b24304a26b0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/NodeDetailDraw", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/NodeDetailDrawer.tsx:261"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fa10f5e8756909e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-report/annual-table.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-report/annual-table.tsx:373"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2340f75cb55694b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/optimize-tails-dialog.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/optimize-tails-dialog.tsx:615"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61d1a4af97c0c154", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/gantt/recovery-dialog.tsx:408", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/gantt/recovery-dialog.tsx:408"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b58501e06e9ff38e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/mvt-message-dialog.tsx:287", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/mvt-message-dialog.tsx:287"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58d4496c31b39856", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/communication-panel.tsx:30", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/communication-panel.tsx:307"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-650cd7b5524e155b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/recovery-solutions-panel.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/recovery-solutions-panel.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-221c8bae6ebd5776", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/asm-message-dialog.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/asm-message-dialog.tsx:218"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17d1cc289b752f48", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/block-time-report/result-table.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/block-time-report/result-table.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4001298494a72ffd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/block-time-report/block-time-exp", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/block-time-report/block-time-explore.tsx:182"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42c8217c8cd67b55", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-config/emissions-confi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-config/emissions-config-header.tsx:53"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3eb9daa5e2120aef", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-config/section-sidebar", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-config/section-sidebar.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0eff4176936f1994", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/daily-ops-summary/panels.tsx:275", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/daily-ops-summary/panels.tsx:275"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b662276c0ed9da3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/panels.tsx:319", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/panels.tsx:319"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5bafa86454c3e460", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/detail-table.tsx:15", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/detail-table.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec5aa6f0bce412c3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/category-donut.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/category-donut.tsx:89"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd37aa974250999e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/skyai/proposal-diff-modal.tsx:33", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/skyai/proposal-diff-modal.tsx:337"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82c62676aba9ec1f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/skyai/flight-ops-skyai-launcher.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/skyai/flight-ops-skyai-launcher.tsx:536"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b8e15cbce37eb2c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/disruption-center/ai-cus", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/disruption-center/ai-customization/ai-customization-shell.tsx:356"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f88bac681ec6c48", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/occ-flight", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/occ-flight-row.tsx:69"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b3b8e9318e88169", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/band-data-", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/band-data-feeds.tsx:220"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39a132183f3302f1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/occ-hero.", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/occ-hero.tsx:193"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bd1deff6e35ba1f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/performance-factor/period-sideba", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/performance-factor/period-sidebar.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8da76ad0fcac8137", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/performance-factor/pf-center.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/performance-factor/pf-center.tsx:97"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f0d96a9d129aa9e9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/maintenance/status-board/aircraft-strip-row", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/maintenance/status-board/aircraft-strip-row.tsx:198"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a76ee6dec46d9ac", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/maintenance/planning/planning-gantt-row.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/maintenance/planning/planning-gantt-row.tsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fdf57ac2cafcde3a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ground-ops/flight-view/dialogs/vehicle-disp", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ground-ops/flight-view/dialogs/vehicle-dispatch-dialog.tsx:313"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-854649923a0008df", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/world-map/world-map-kpi-panels.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/world-map/world-map-kpi-panels.tsx:67"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d13fceab5df0e23", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/world-map/world-map-clock-dock.tsx:335", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/world-map/world-map-clock-dock.tsx:335"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-953cd27fd9f228c6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-comparison/sections/section-frame.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-comparison/sections/section-frame.tsx:35"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-667ee774507e9afa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-comparison/sections/fleet-mix-donut.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-comparison/sections/fleet-mix-donut.tsx:224"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76fcd40f1e464ab1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-import/parsed-preview.tsx:181", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-import/parsed-preview.tsx:181"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e1b9817c01fae1a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/settings/admin/operator-config/page.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/settings/admin/operator-config/page.tsx:240"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6703eaace8ed802a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/hub/page.tsx:964", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/hub/page.tsx:964"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fe752900cde96b6", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/page.tsx:93", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/page.tsx:93"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7ebc550ab59b6c14", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/reset-password/page.tsx:115", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/reset-password/page.tsx:115"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33b74a0b8ea32375", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/forgot-password/page.tsx:63", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/forgot-password/page.tsx:63"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-238e81ae56997fdd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/page.tsx:406", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/page.tsx:406"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13b610441af0e21b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/ground-ops/cargo/cargo-manifest/components/Loading", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/ground-ops/cargo/cargo-manifest/components/LoadingDock.tsx:78"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84884de7f19f0b99", "name": "Stray `console.log` in TS/JS \u2014 scripts/read-test-plan.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/read-test-plan.js:9"}, "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-04406ef0df8f4b5b", "name": "Stray `console.log` in TS/JS \u2014 scripts/gen-crew-schedule-test-plan.js:474", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-crew-schedule-test-plan.js:474"}, "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-e0058d9d8f22b450", "name": "Stray `console.log` in TS/JS \u2014 scripts/copy-audit.ts:466", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/copy-audit.ts:466"}, "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-d84b7c6a7b509462", "name": "Stray `console.log` in TS/JS \u2014 scripts/hooks/pre-commit.js:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/hooks/pre-commit.js:66"}, "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-6b096c0d6f4c6964", "name": "TODO/FIXME marker in shipping code \u2014 packages/constants/src/operators.ts:21", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/constants/src/operators.ts:21"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-54dbeec9391ad0b1", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/validator.ts:6", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/validator.ts:6"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7cbabf7086b763b", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/seed-operator-rules.ts:16", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/seed-operator-rules.ts:16"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fe6bfbfce29251e", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/engine.ts:8", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/engine.ts:8"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd57ed0787744ec0", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/geo.ts:95", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/geo.ts:95"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80593191a992524f", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/advisor-summary-builder.ts:1", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/advisor-summary-builder.ts:1"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6566929eb899be3a", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/schedule-rule-evaluator.ts:1", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/schedule-rule-evaluator.ts:1"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d99e43b66df3b39a", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/solver-stream.ts:1", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/solver-stream.ts:1"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e2ed9b602fd83d6", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/messaging/slot-message-parser.ts:8", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/messaging/slot-message-parser.ts:8"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e799df6d1fd2c396", "name": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/messaging/slot-message-generator.ts:8", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/messaging/slot-message-generator.ts:8"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff1d8d805a6344fa", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-may1-coverage.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-may1-coverage.ts:115"}, "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-2731566eed3a5feb", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-stability-report.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-stability-report.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-03d5a059fc86854a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-aug-upgrade.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-aug-upgrade.ts:43"}, "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-1a3ac9d7180d379a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/migrate-core-modules-on.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/migrate-core-modules-on.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb49ddd5854d6824", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-activity-code-rest.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-activity-code-rest.ts:40"}, "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-581ec5b97c182802", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-fdtl-computation-type.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-fdtl-computation-type.ts:45"}, "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-e9d9d227697c376c", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-ca-sgn-shortfall.ts:161", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-ca-sgn-shortfall.ts:161"}, "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-83f223ed57712f53", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/inspect-aircraft-image.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/inspect-aircraft-image.ts:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1326358df096fe9", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-seed-coverage.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-seed-coverage.ts:33"}, "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-aecf0a1ae6761fb1", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-tail-optimizer-e2e.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-tail-optimizer-e2e.ts:37"}, "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-b103635b61fb1b35", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-actuals-fdtl.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-actuals-fdtl.ts:46"}, "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-f41b5f8d6817423b", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/check-active-bulletins.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/check-active-bulletins.ts:21"}, "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-514cbb3803c70f98", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-openai-key.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-openai-key.ts:34"}, "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-069aedcee4f2b651", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/drop-stale-operator-scheduling-index.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/drop-stale-operator-scheduling-index.ts:11"}, "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-fbc8aa8aead6a31f", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-pu-day-distribution.ts:194", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-pu-day-distribution.ts:194"}, "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-1969daec888c0b30", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/seed-runway-bulletin.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/seed-runway-bulletin.ts:70"}, "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-ede0cce6c3310879", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-flight-climatology.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-flight-climatology.ts:79"}, "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-6559791a7acbc10d", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-pairopt-fdtl.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-pairopt-fdtl.ts:26"}, "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-78c5427c826d04e7", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-colgen-e2e.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-colgen-e2e.ts:63"}, "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-ec27499e812b74a3", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/reextract-bulletin-scopes.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/reextract-bulletin-scopes.ts:28"}, "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-1615a9b127add8f0", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/fit-s-curve.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/fit-s-curve.ts:98"}, "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-488ac49a37f71fe3", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/patch-off-color.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/patch-off-color.ts:16"}, "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-31e475b7a1faa6a9", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/check-flight-ops-ai-accuracy.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/check-flight-ops-ai-accuracy.ts:74"}, "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-6af8a08e301c089a", "name": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-duty-amendments.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-duty-amendments.ts:52"}, "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-a7cff54047db1c70", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-hotel-contacts.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-hotel-contacts.ts:69"}, "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-085eaef7b4e4db79", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-performance-factors.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-performance-factors.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ec0927d412de33d", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-contacts.ts:212", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-contacts.ts:212"}, "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-1baac6d54bd0f46c", "name": "Stray `console.log` in TS/JS \u2014 server/src/dedupe-scheduled-flights.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/dedupe-scheduled-flights.ts:23"}, "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-042f99ee1ce4383e", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-ground-ops.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-ground-ops.ts:162"}, "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-813ce4d5dd8d9ebc", "name": "Stray `console.log` in TS/JS \u2014 server/src/run-oooi-reseed.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/run-oooi-reseed.ts:32"}, "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-115debf5d0fd780b", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-vac-scatter.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-vac-scatter.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-7cd61cdd376fb96b", "name": "Stray `console.log` in TS/JS \u2014 server/src/trim-cabin.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/trim-cabin.ts:25"}, "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-48f6f35966be9c77", "name": "Stray `console.log` in TS/JS \u2014 server/src/issue-pin-eid.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/issue-pin-eid.ts:41"}, "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-8be66a3d900d5f25", "name": "Stray `console.log` in TS/JS \u2014 server/src/repair-tail-overlaps.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/repair-tail-overlaps.ts:58"}, "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-1d79e3962b9b57f7", "name": "Stray `console.log` in TS/JS \u2014 server/src/purge-crew-positions.ts:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/purge-crew-positions.ts:41"}, "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-5c64cfc1b7c1f572", "name": "Stray `console.log` in TS/JS \u2014 server/src/backfill-pairing-tails.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-pairing-tails.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-7260502cb38902a2", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-ca-han-topup.ts:241", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-ca-han-topup.ts:241"}, "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-b1b5ef5c54176cd1", "name": "Stray `console.log` in TS/JS \u2014 server/src/backfill-capacity-ledger.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-capacity-ledger.ts:23"}, "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-94e4a4cdae3ca840", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-flight-instance-dates.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-flight-instance-dates.ts:20"}, "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-3e19bbfbb9ee8b79", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-one-assignment.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-one-assignment.ts:28"}, "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-b8c29a9661ff4eb8", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-cabin-shortfall-topup.ts:233", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-cabin-shortfall-topup.ts:233"}, "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-6d2ca15fbd4c213f", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-user.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-user.ts:29"}, "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-be66ed5be8be0e73", "name": "Stray `console.log` in TS/JS \u2014 server/src/purge-stale-crewcounts.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/purge-stale-crewcounts.ts:43"}, "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-d6e6467a9ad79392", "name": "Stray `console.log` in TS/JS \u2014 server/src/backfill-duty-amendment-rules.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-duty-amendment-rules.ts:76"}, "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-15e9c6bcf71f3c1e", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-irops.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-irops.ts:32"}, "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-a8a3b17dae53d1d5", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-positions.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-positions.ts:20"}, "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-ca477a97c4fa29fa", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-al-scatter.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-al-scatter.ts:50"}, "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-dea2fd5ef5b0715e", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-10178.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-10178.ts:19"}, "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-4b96d8bf67380be1", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-runways.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-runways.ts:50"}, "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-63401a20197837a7", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-capital-coords.ts:230", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-capital-coords.ts:230"}, "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-c81bdae7bacb76f3", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-ground-handling-agents.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-ground-handling-agents.ts:65"}, "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-c20312f87e5178f7", "name": "Stray `console.log` in TS/JS \u2014 server/src/count-pu-fa.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/count-pu-fa.ts:12"}, "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-87e4ddcbd33359a3", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-smart-actuals.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-smart-actuals.ts:60"}, "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-65a198c645273d6d", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-expiries-lastdone.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-expiries-lastdone.ts:26"}, "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-d70c6b07418d8849", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-expiry-positions.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-expiry-positions.ts:28"}, "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-60c9e7b7e67d8a1e", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-tail.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-tail.ts:11"}, "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-d970f4e460657ae6", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-skyai-license-grandfather.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-skyai-license-grandfather.ts:26"}, "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-00a5c7c68f483e12", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-al-to-vac.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-al-to-vac.ts:21"}, "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-cb4110219d61a15d", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-pairings.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-pairings.ts:10"}, "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-896e70b4590dc65b", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-maintenance-events.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-maintenance-events.ts:27"}, "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-a7b50c5bd6bb59a6", "name": "Stray `console.log` in TS/JS \u2014 server/src/mark-sby-system.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/mark-sby-system.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-aab07b6a91e2874e", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed.ts:178", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed.ts:178"}, "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-0b4dbc8bc27f82eb", "name": "Stray `console.log` in TS/JS \u2014 server/src/check-gantt-overlap.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/check-gantt-overlap.ts:37"}, "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-ef80909b24403f2b", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-rbac.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-rbac.ts:19"}, "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-bcd0853eeb928d1e", "name": "Stray `console.log` in TS/JS \u2014 server/src/trim-cabin-buffer.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/trim-cabin-buffer.ts:30"}, "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-f9a2c190869529a7", "name": "Stray `console.log` in TS/JS \u2014 server/src/backfill-aug-max-sectors.ts:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-aug-max-sectors.ts:44"}, "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-05c32ad26bd160ed", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-complements.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-complements.ts:13"}, "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-160698144c93155c", "name": "Stray `console.log` in TS/JS \u2014 server/src/index.ts:281", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/index.ts:281"}, "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-760c9eb5d12dd272", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-hotels.ts:256", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-hotels.ts:256"}, "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-b1c22d3c7dbb5a5d", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-elp-groups.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-elp-groups.ts:63"}, "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-f586fddebef9e945", "name": "Stray `console.log` in TS/JS \u2014 server/src/purge-stale-elp-expiries.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/purge-stale-elp-expiries.ts:33"}, "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-58c3b7ddd2f29179", "name": "Stray `console.log` in TS/JS \u2014 server/src/check-scheduling-cfg.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/check-scheduling-cfg.ts:10"}, "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-5ba97a1512ff5aad", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-a320-cp.ts:284", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-a320-cp.ts:284"}, "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-6b857dd362574c4b", "name": "Stray `console.log` in TS/JS \u2014 server/src/cleanup-sample-pairings.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/cleanup-sample-pairings.ts:12"}, "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-7bbfbadb615ea1b0", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-10204.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-10204.ts:19"}, "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-247e1f4ddc7952de", "name": "Stray `console.log` in TS/JS \u2014 server/src/diagnose-unassigned.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/diagnose-unassigned.ts:34"}, "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-a3d77d4ea0668a2f", "name": "Stray `console.log` in TS/JS \u2014 server/src/purge-pairing-seat-codes.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/purge-pairing-seat-codes.ts:26"}, "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-02756b1a2a126707", "name": "Stray `console.log` in TS/JS \u2014 server/src/diagnose-tail-overlap.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/diagnose-tail-overlap.ts:46"}, "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-dbbf151495adba56", "name": "Stray `console.log` in TS/JS \u2014 server/src/diag-crew-10178.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/diag-crew-10178.ts:15"}, "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-335e5f31d77bceec", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-fleet.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-fleet.ts:14"}, "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-dc9c3a9e1cdd4b74", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-journeylog-pairingid.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-journeylog-pairingid.ts:27"}, "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-9375bb1ccb4b6489", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-passports.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-passports.ts:63"}, "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-016a344f3f7ece04", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-cargo-categories.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-cargo-categories.ts:29"}, "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-a5313cc955ff941f", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-bulk-assignments.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-bulk-assignments.ts:40"}, "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-fff02917e224d4cd", "name": "Stray `console.log` in TS/JS \u2014 server/src/trim-crew.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/trim-crew.ts:32"}, "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-a439af370ef72e16", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-crew-iso3.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-crew-iso3.ts:36"}, "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-d40fa5033f0db1aa", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-fdtl-scheme.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-fdtl-scheme.ts:12"}, "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-66d9547cf45f89f7", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-all-fleets.ts:484", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-all-fleets.ts:484"}, "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-9f10c0e83bb2866e", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-lopa.ts:80", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-lopa.ts:80"}, "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-af237ab588beb214", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-gendec-check.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-gendec-check.ts:57"}, "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-f7473e72a1ffb67d", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-date-formats.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-date-formats.ts:18"}, "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-0ffefbadf9b60e1a", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-expiries.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-expiries.ts:116"}, "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-9ecc15ec1d4b20b3", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-april-crewcounts.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-april-crewcounts.ts:17"}, "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-42082984b44bb0eb", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-phones.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-phones.ts:46"}, "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-da012f03db78dfd1", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-scheduling-config-indexes.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-scheduling-config-indexes.ts:16"}, "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-90ea132b36ffe833", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-maintenance-checks.ts:315", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-maintenance-checks.ts:315"}, "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-47ddfa2f59b4227d", "name": "Stray `console.log` in TS/JS \u2014 server/src/backfill-pairing-legality.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-pairing-legality.ts:43"}, "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-a858f998571b4aa6", "name": "Stray `console.log` in TS/JS \u2014 server/src/count-a320.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/count-a320.ts:45"}, "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-8b4665dcb80c29ce", "name": "Stray `console.log` in TS/JS \u2014 server/src/reseed-seniority.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/reseed-seniority.ts:16"}, "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-707a21afd05b38b8", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-daily-ops.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-daily-ops.ts:29"}, "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-24cd3a8eaccc87f3", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-april-sample.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-april-sample.ts:30"}, "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-9ac31841b3c7e50d", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-transport-vendors.ts:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-transport-vendors.ts:99"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cf95a1b340c69b99", "name": "Stray `console.log` in TS/JS \u2014 server/src/check-aug.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/check-aug.ts:17"}, "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-f6a6ae2edac32894", "name": "Stray `console.log` in TS/JS \u2014 server/src/force-cancel-run.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/force-cancel-run.ts:21"}, "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-c5347531683a0ee4", "name": "Stray `console.log` in TS/JS \u2014 server/src/backfill-seniority-from-employment.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-seniority-from-employment.ts:29"}, "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-430860c1c21d056b", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-weather-config.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-weather-config.ts:25"}, "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-62144d2a2aab20f2", "name": "Stray `console.log` in TS/JS \u2014 server/src/fix-tail-doublebook.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/fix-tail-doublebook.ts:40"}, "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-01e3b6928c78da1a", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-expiry.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-expiry.ts:34"}, "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-3fd359d5d313fd0f", "name": "Stray `console.log` in TS/JS \u2014 server/src/backfill-crew-rolling-snapshot.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-crew-rolling-snapshot.ts:55"}, "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-9d2a6328ec727a58", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-diversions.ts:190", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-diversions.ts:190"}, "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-879c9a26c89ac7ad", "name": "Stray `console.log` in TS/JS \u2014 server/src/migrate-from-supabase.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-from-supabase.ts:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42eb456d0b189f6e", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-scheduled-tasks.ts:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-scheduled-tasks.ts:185"}, "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-f431fb6ad2c670d0", "name": "Stray `console.log` in TS/JS \u2014 server/src/probe-flights.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-flights.ts:21"}, "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-599277a0984260c9", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-fuel-cargo.ts:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-fuel-cargo.ts:90"}, "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-4a823297534ec367", "name": "Stray `console.log` in TS/JS \u2014 server/src/seed-pu-sgn-topup.ts:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-pu-sgn-topup.ts:204"}, "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-e2282fdc4cc91e22", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-activity-codes.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-activity-codes.ts:10"}, "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-35f93c4bdba67ecc", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-system-activity-codes.ts:325", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-system-activity-codes.ts:325"}, "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-7a1942f77ae07981", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-crew-currency.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-crew-currency.ts:54"}, "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-e47293ca79102e4c", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-tails.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-tails.ts:13"}, "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-9f5b993607e99f7c", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/backfill-pairing-times.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/backfill-pairing-times.ts:19"}, "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-ffd32910b85d5495", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-sick-call.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-sick-call.ts:13"}, "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-fa2cf5eb8a7503bd", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-demo-users.ts:737", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-demo-users.ts:737"}, "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-59a6b29fe8bf6393", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-skyai-access.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-skyai-access.ts:40"}, "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-a11abc16d5988bf0", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-user.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-user.ts:34"}, "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-1e2fb90ba377ddf5", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-crew-absences.ts:129", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-crew-absences.ts:129"}, "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-235b078ee5712ed0", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/bidline-smoke.ts:239", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/bidline-smoke.ts:239"}, "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-99f37dd3df8e11ee", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-journey-logs.ts:280", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-journey-logs.ts:280"}, "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-1cd31f6d0b13ab5f", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-roles.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-roles.ts:11"}, "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-4c1e0fd068bac48f", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/backfill-local-day-activities.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/backfill-local-day-activities.ts:28"}, "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-6d237765c49cf5db", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-people.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-people.ts:19"}, "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-b0d59c886f830f90", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/bidline-force-delete.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/bidline-force-delete.ts:34"}, "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-29733a150360dffb", "name": "Stray `console.log` in TS/JS \u2014 server/src/scripts/set-user-password.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/set-user-password.ts:36"}, "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-cebe4e380a8e1e55", "name": "Stray `console.log` in TS/JS \u2014 server/src/routes/auth.ts:362", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/auth.ts:362"}, "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-04b7573e8a64324c", "name": "Stray `console.log` in TS/JS \u2014 server/src/routes/contact-submissions.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/contact-submissions.ts:63"}, "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-e67f59dd6e4af4e9", "name": "TODO/FIXME marker in shipping code \u2014 server/src/routes/pairings.ts:755", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/src/routes/pairings.ts:755"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bcb1ca239aea0ae2", "name": "Stray `console.log` in TS/JS \u2014 server/src/routes/auto-roster.ts:84", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/auto-roster.ts:84"}, "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-708e5553d945669a", "name": "Stray `console.log` in TS/JS \u2014 server/src/routes/crew-schedule.ts:321", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/crew-schedule.ts:321"}, "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-7a6722a459a388fd", "name": "Stray `console.log` in TS/JS \u2014 server/src/routes/recovery.ts:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/recovery.ts:96"}, "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-5cccda27a75de965", "name": "Stray `console.log` in TS/JS \u2014 server/src/workers/ml-trainer-worker.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/workers/ml-trainer-worker.ts:30"}, "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-1a203155d28b66e4", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/email.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/email.ts:24"}, "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-367e4c9fffcff03a", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/crew-change-emitter.ts:120", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/crew-change-emitter.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-be65a30a7d184501", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/auto-roster-rebalance.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/auto-roster-rebalance.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4b0a560e97783865", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/auto-roster-orchestrator.ts:349", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/auto-roster-orchestrator.ts:349"}, "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-bb12c7b5593a5769", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/weather-client.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/weather-client.ts:83"}, "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-7ee8e3e6c3f01ec7", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/hotel-email-delivery.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/hotel-email-delivery.ts:46"}, "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-cb56eaba9d12dbd6", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/asm-ssm-delivery.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/asm-ssm-delivery.ts:64"}, "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-8a955169b7561ef9", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/crew-fdtl-reeval.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/crew-fdtl-reeval.ts:53"}, "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-e51a1ecb02b8f315", "name": "Stray `console.log` in TS/JS \u2014 server/src/services/skyai/engine.ts:785", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/skyai/engine.ts:785"}, "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-08ce573b8b2d9fc5", "name": "TODO/FIXME marker in shipping code \u2014 server/src/services/open-flight-bidding/notifier.ts:21", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/src/services/open-flight-bidding/notifier.ts:21"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6027d0f3a2a55100", "name": "Stray `console.log` in TS/JS \u2014 server/src/db/connection.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/db/connection.ts:9"}, "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-ed1797306f9f98e4", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/transport-email-deliver.ts:171", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/transport-email-deliver.ts:171"}, "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-084af3cea27fd5b6", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/allocation-report-email-deliver.ts:136", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/allocation-report-email-deliver.ts:136"}, "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-4c34910154598e3b", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/weather-poll.ts:137", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/weather-poll.ts:137"}, "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-ee61f1846dea0d26", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/audit-notify-tick.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/audit-notify-tick.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5165a835cbd5dcfd", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/hotel-email-deliver.ts:176", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/hotel-email-deliver.ts:176"}, "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-d5ce63e6576ae014", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/task-scheduler.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/task-scheduler.ts:28"}, "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-df8564c99333bc9f", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/turnaround-tick.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/turnaround-tick.ts:23"}, "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-1da294016ae62549", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/mvt-auto-transmit.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/mvt-auto-transmit.ts:134"}, "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-014d35cfc755ae43", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/asm-ssm-deliver.ts:200", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/asm-ssm-deliver.ts:200"}, "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-86bc13ba6ec1929f", "name": "TODO/FIXME marker in shipping code \u2014 server/src/jobs/tasks/network-ai-accuracy-eval.ts:135", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 server/src/jobs/tasks/network-ai-accuracy-eval.ts:135"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d5eb9e176f984e3", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/tasks/network-ai-accuracy-eval.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/tasks/network-ai-accuracy-eval.ts:145"}, "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-3d5472847d56f5a3", "name": "Stray `console.log` in TS/JS \u2014 server/src/jobs/tasks/daily-crew-activity-log.ts:863", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/tasks/daily-crew-activity-log.ts:863"}, "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-157840b048b0b985", "name": "Privileged port 587 in use", "shortDescription": {"text": "Privileged port 587 in use"}, "fullDescription": {"text": "Port 587 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d33a475ea6ae0f63", "name": "Dockerfile runs as root: services/auto-roster-solver/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/auto-roster-solver/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b49862eed136a392", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-103422798f6c7348", "name": "Dockerfile runs as root: services/network-constraint-evaluator/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/network-constraint-evaluator/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-41c9e4028517b103", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df7a3e13d4a328e1", "name": "Dockerfile runs as root: services/recovery-solver/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/recovery-solver/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e6e4344449fe4f31", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abf7eb0e6f76b01b", "name": "Dockerfile runs as root: services/otp-predictor/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/otp-predictor/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8997d8ba17dd2e83", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9fb68dc972aa914", "name": "Dockerfile runs as root: services/pairing-optimizer/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/pairing-optimizer/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-134da0d649aa3759", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e2d9e99c11cdfe8", "name": "Dockerfile runs as root: services/demand-forecaster/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: services/demand-forecaster/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6b743da92996d1fb", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3987475b1e27a13c", "name": "Insecure pattern 'weak_hash' in apps/mobile/src/components/sysadmin/sso/sso-cards.tsx:127", "shortDescription": {"text": "Insecure pattern 'weak_hash' in apps/mobile/src/components/sysadmin/sso/sso-cards.tsx:127"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a5d94cf0fce79c18", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/crew/design-mock.html:1708", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/crew/design-mock.html:1708"}, "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-a5a12527b9d7398c", "name": "Insecure pattern 'local_storage_auth_token' in apps/web/src/stores/use-gantt-store.ts:567", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/src/stores/use-gantt-store.ts:567"}, "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-d1a3424333b1d317", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/wallpaper-bg.tsx:119", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/wallpaper-bg.tsx:119"}, "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-6cada8d706a7199e", "name": "Insecure pattern 'weak_hash' in apps/web/src/components/sysadmin/sso/sso-shell.tsx:201", "shortDescription": {"text": "Insecure pattern 'weak_hash' in apps/web/src/components/sysadmin/sso/sso-shell.tsx:201"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e3b3e81d9293d9cf", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/disruption-center/workflow-timeline.tsx:195", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/disruption-center/workflow-timeline.tsx:195"}, "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-73be89c107086dd3", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/disruption-center/disruption-hero.tsx:249", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/disruption-center/disruption-hero.tsx:249"}, "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-30346cf3185f6386", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/network/optimizer/network-optimizer-splash.tsx:184", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/network/optimizer/network-optimizer-splash.tsx:184"}, "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-ee7d77e886ca2d45", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/global-runway-progress.tsx:662", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/global-runway-progress.tsx:662"}, "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-a8638ba66ea38bb6", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/runway-loading-panel.tsx:44", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/runway-loading-panel.tsx:44"}, "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-892e71b6f4bbda5b", "name": "Insecure pattern 'eval_used' in apps/web/src/components/admin/ai-integration/network-write-confirm-modal.tsx:54", "shortDescription": {"text": "Insecure pattern 'eval_used' in apps/web/src/components/admin/ai-integration/network-write-confirm-modal.tsx:54"}, "fullDescription": {"text": "Found a known-risky pattern (eval_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-355e8dcecc36dd57", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/journey-log/signature-pad.tsx:34", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/journey-log/signature-pad.tsx:34"}, "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-bff441d61d18b4d6", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/gantt/recovery-dialog.tsx:408", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/gantt/recovery-dialog.tsx:408"}, "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-43d849dd30072322", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/control/occ-dashboard/occ-hero.tsx:193", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/control/occ-dashboard/occ-hero.tsx:193"}, "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-830cdf57384fabba", "name": "Insecure pattern 'local_storage_auth_token' in apps/web/src/app/auth/sso/callback/route.ts:24", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/src/app/auth/sso/callback/route.ts:24"}, "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-6f36df2156b796b0", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/page.tsx:93", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/page.tsx:93"}, "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-a14c5ce5772fd40c", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/reset-password/page.tsx:115", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/reset-password/page.tsx:115"}, "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-17a2df069ba3da58", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/forgot-password/page.tsx:63", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/forgot-password/page.tsx:63"}, "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-0351e161cdaffd72", "name": "Insecure pattern 'node_child_process' in scripts/free-solver-port.mjs:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/free-solver-port.mjs:17"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e3fb3c868418962", "name": "Insecure pattern 'node_child_process' in scripts/hooks/pre-commit.js:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/hooks/pre-commit.js:16"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea2d337fa51a0468", "name": "Possible secret in server/src/scripts/seed-demo-users.ts", "shortDescription": {"text": "Possible secret in server/src/scripts/seed-demo-users.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6f36b29fa2274144", "name": "Insecure pattern 'cors_wildcard' in server/src/routes/pairing-optimizer.ts:1723", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/src/routes/pairing-optimizer.ts:1723"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d45bbb41dc3ae9b8", "name": "Insecure pattern 'cors_wildcard' in server/src/routes/auto-roster.ts:959", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/src/routes/auto-roster.ts:959"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8ad562b3bec1d371", "name": "Insecure pattern 'cors_wildcard' in server/src/routes/recovery-advisor.ts:113", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/src/routes/recovery-advisor.ts:113"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a7f020bb43abcaae", "name": "Insecure pattern 'cors_wildcard' in server/src/routes/recovery.ts:493", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server/src/routes/recovery.ts:493"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-65aa740cba4a4a73", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "github/codeql-action/init@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": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25b60a6e225495ae", "name": "Very large file: apps/mobile/app/(tabs)/settings/aircraft-type-detail.tsx (1546 lines)", "shortDescription": {"text": "Very large file: apps/mobile/app/(tabs)/settings/aircraft-type-detail.tsx (1546 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-5c174bbd9f5ebb4b", "name": "Very large file: apps/web/src/stores/use-crew-schedule-store.ts (2655 lines)", "shortDescription": {"text": "Very large file: apps/web/src/stores/use-crew-schedule-store.ts (2655 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-474fd2059e00ba1b", "name": "Very large file: apps/web/src/components/help/help-heroes.tsx (1904 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/help/help-heroes.tsx (1904 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-fa8ef0ecac556bb4", "name": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel.tsx (1996 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel.tsx (1996 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-f6be32dfc10e8102", "name": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-canvas.tsx (2781 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-canvas.tsx (2781 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-591464def23f309d", "name": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx (1473 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx (1473 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-1460d81a4165bb59", "name": "Very large file: apps/web/src/components/crew-ops/duty-swap-config/section-heroes.tsx (1405 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/duty-swap-config/section-heroes.tsx (1405 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-dda57baf713436f5", "name": "Very large file: apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-canvas.tsx (1651 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-canvas.tsx (1651 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-40e3101cac3be408", "name": "Very large file: apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector-panel/index.tsx (1723 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector-panel/index.tsx (1723 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-2bbd1c58706d7229", "name": "Very large file: apps/web/src/components/crew-ops/scheduling-config/scheduling-config-shell.tsx (2268 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/scheduling-config/scheduling-config-shell.tsx (2268 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-7d2851c4b2bc1876", "name": "Very large file: apps/web/src/components/crew-ops/scheduling-config/section-heroes.tsx (1665 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/scheduling-config/section-heroes.tsx (1665 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-4868cd482cc11f82", "name": "Very large file: apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx (2361 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx (2361 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-94d1ebd9d8f652f7", "name": "Very large file: apps/web/src/components/crew-ops/crew-app-config/crew-app-config-shell.tsx (2602 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/crew-app-config/crew-app-config-shell.tsx (2602 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-803c2388ea77222f", "name": "Very large file: apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx (6689 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx (6689 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-6bd7cb3d48081d64", "name": "Very large file: apps/web/src/components/admin/aircraft-types/aircraft-type-detail.tsx (1577 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/admin/aircraft-types/aircraft-type-detail.tsx (1577 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-1c678e4b44982789", "name": "Very large file: apps/web/src/components/admin/aircraft-registrations/aircraft-registration-detail.tsx (1378 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/admin/aircraft-registrations/aircraft-registration-detail.tsx (1378 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-1b128749bda0f739", "name": "Very large file: apps/web/src/components/admin/delay-codes/delay-codes-shell.tsx (1415 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/admin/delay-codes/delay-codes-shell.tsx (1415 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-525f3226f0848fd0", "name": "Very large file: apps/web/src/components/admin/expiry-codes/expiry-code-detail.tsx (1555 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/admin/expiry-codes/expiry-code-detail.tsx (1555 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-407f42787c61f508", "name": "Very large file: apps/web/src/components/admin/city-pairs/citypair-detail.tsx (1552 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/admin/city-pairs/citypair-detail.tsx (1552 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-b3a2c76767897681", "name": "Very large file: apps/web/src/components/flight-ops/gantt/ops-toolbar.tsx (1284 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/flight-ops/gantt/ops-toolbar.tsx (1284 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-cabe6e3afd74cf23", "name": "Very large file: apps/web/src/components/flight-ops/control/disruption-center/ai-customization/ai-customization-shell.ts", "shortDescription": {"text": "Very large file: apps/web/src/components/flight-ops/control/disruption-center/ai-customization/ai-customization-shell.tsx (1462 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-3066215f82854ba4", "name": "Very large file: apps/web/src/app/hub/page.tsx (1183 lines)", "shortDescription": {"text": "Very large file: apps/web/src/app/hub/page.tsx (1183 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-54605037fb7bd1cc", "name": "Very large file: packages/types/src/report-insights.ts (3024 lines)", "shortDescription": {"text": "Very large file: packages/types/src/report-insights.ts (3024 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-5f57233e715e69e8", "name": "Very large file: packages/types/src/database.ts (2327 lines)", "shortDescription": {"text": "Very large file: packages/types/src/database.ts (2327 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-2294421ce8a7c263", "name": "Very large file: packages/api/src/client.ts (16975 lines)", "shortDescription": {"text": "Very large file: packages/api/src/client.ts (16975 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-e1790e691e03a879", "name": "Very large file: packages/ui/src/navigation/navData.ts (1797 lines)", "shortDescription": {"text": "Very large file: packages/ui/src/navigation/navData.ts (1797 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-de0c03a08b8998f5", "name": "Very large file: packages/constants/src/module-registry.ts (1962 lines)", "shortDescription": {"text": "Very large file: packages/constants/src/module-registry.ts (1962 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-59b1a1bd1817698d", "name": "Very large file: packages/logic/src/fdtl/evaluators.ts (1711 lines)", "shortDescription": {"text": "Very large file: packages/logic/src/fdtl/evaluators.ts (1711 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-727df26855a1e983", "name": "Very large file: packages/logic/src/fdtl/templates/caav-var15.ts (1495 lines)", "shortDescription": {"text": "Very large file: packages/logic/src/fdtl/templates/caav-var15.ts (1495 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-2bf0dc86f83b0ed6", "name": "Very large file: server/src/routes/pairing-optimizer.ts (2052 lines)", "shortDescription": {"text": "Very large file: server/src/routes/pairing-optimizer.ts (2052 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-80dc97ad25e00f3c", "name": "Very large file: server/src/routes/pairings.ts (1602 lines)", "shortDescription": {"text": "Very large file: server/src/routes/pairings.ts (1602 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-05f159e3d94fe746", "name": "Very large file: server/src/routes/gantt.ts (2710 lines)", "shortDescription": {"text": "Very large file: server/src/routes/gantt.ts (2710 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-6709f15c55b01d47", "name": "Very large file: server/src/routes/crew-schedule.ts (4969 lines)", "shortDescription": {"text": "Very large file: server/src/routes/crew-schedule.ts (4969 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-787e81de5216efec", "name": "Very large file: server/src/routes/reference.ts (3313 lines)", "shortDescription": {"text": "Very large file: server/src/routes/reference.ts (3313 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-0ebb1d516c210a37", "name": "Very large file: server/src/routes/admin/operator-licensing.ts (1156 lines)", "shortDescription": {"text": "Very large file: server/src/routes/admin/operator-licensing.ts (1156 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-dbc2bd040d39855f", "name": "Very large file: server/src/services/auto-roster-orchestrator.ts (5584 lines)", "shortDescription": {"text": "Very large file: server/src/services/auto-roster-orchestrator.ts (5584 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-f92e87e00796d9aa", "name": "Very large file: server/src/services/skyai/tools.ts (4678 lines)", "shortDescription": {"text": "Very large file: server/src/services/skyai/tools.ts (4678 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-fc4e5593d9abded0", "name": "Very large file: server/src/services/skyai/report-insights/trim.ts (1609 lines)", "shortDescription": {"text": "Very large file: server/src/services/skyai/report-insights/trim.ts (1609 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-928d855855bd4419", "name": "Very large file: services/auto-roster-solver/app/solver/cp_sat_engine.py (1855 lines)", "shortDescription": {"text": "Very large file: services/auto-roster-solver/app/solver/cp_sat_engine.py (1855 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "94 test file(s) for 3826 source file(s) (ratio 0.02). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a3b453048e9428f3", "name": "67 TODO/FIXME markers", "shortDescription": {"text": "67 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "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-d0c2205560692580", "name": "Node manifest has dependencies but no lockfile: apps/mobile/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/mobile/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-56d43ffc0bb4469e", "name": "Node manifest has dependencies but no lockfile: apps/crew/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/crew/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb3e52667c84fb86", "name": "Node manifest has dependencies but no lockfile: packages/types/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/types/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ff46e31478137e2c", "name": "Node manifest has dependencies but no lockfile: packages/crew-db/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/crew-db/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a0634ffe3eb1107", "name": "Node manifest has dependencies but no lockfile: packages/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-50218c90b43393bb", "name": "Node manifest has dependencies but no lockfile: packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afff30d5313e36fe", "name": "Node manifest has dependencies but no lockfile: packages/constants/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/constants/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5bec3265250f3018", "name": "Node manifest has dependencies but no lockfile: packages/logic/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/logic/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7101ca1926e3342", "name": "Node manifest has dependencies but no lockfile: server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: server/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 1306 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 1894 placeholder/mock markers across 665 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d5d7ca86c9702c5", "name": "Agent instruction/config may expose a secret: apps/web/src/components/scheduling/CLAUDE.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: apps/web/src/components/scheduling/CLAUDE.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d924dd77e7fd8058", "name": "Agent authority lacks a verifier contract: apps/web/src/components/scheduling/CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: apps/web/src/components/scheduling/CLAUDE.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-57236c0e981aa7e9", "name": "Agent instruction/config may expose a secret: .claude/agents/tdd-guide.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/agents/tdd-guide.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b719caf13f925b8", "name": "Agent authority lacks a verifier contract: .claude/hooks/hooks.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/hooks/hooks.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-698f2512f2447676", "name": "Agent instruction/config may expose a secret: .claude/skills/horizon-db-conventions/SKILL.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/skills/horizon-db-conventions/SKILL.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-190113be1e2eb1e6", "name": "Agent authority lacks a verifier contract: .claude/skills/strategic-compact/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/strategic-compact/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ef8354276819632", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/components/schedule/import-dialog.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/components/schedule/import-dialog.tsx:55"}, "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-fc5982ac04e3c53f", "name": "Commented-code block (6 lines) in apps/mobile/components/schedule/grid-cell.tsx:20", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/components/schedule/grid-cell.tsx:20"}, "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-5c39232c242aec52", "name": "Commented-code block (5 lines) in apps/mobile/components/charts/column-chart.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/charts/column-chart.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3918e138ec2605c9", "name": "Commented-code block (5 lines) in apps/mobile/components/hub/hub-module-panel.tsx:115", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/hub/hub-module-panel.tsx:115"}, "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-3b292aa3f27858d4", "name": "Commented-code block (5 lines) in apps/mobile/components/hub/hub-carousel.tsx:121", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/hub/hub-carousel.tsx: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-33a5ad31426ca2e1", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/send-operating-crew-dialog.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/send-operating-crew-dialog.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b39673cd27622f44", "name": "Commented-code block (6 lines) in apps/mobile/components/reports/network-analytics.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/components/reports/network-analytics.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7f701e2ba33d10b", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/operating-crew-card.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/operating-crew-card.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-50aafe3aeebcb57d", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/aggregations.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/aggregations.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef574f0559c05ce5", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/fdrs-sparkline.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/fdrs-sparkline.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a2003735324ffcf", "name": "Commented-code block (8 lines) in apps/mobile/components/reports/network-dashboard.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/components/reports/network-dashboard.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-887f5269f898286d", "name": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-pairings/pairings-detail.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-pairings/pairings-detail.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88cc41148d22a362", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-pairings/pairings-cards.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-pairings/pairings-cards.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b131d2b32212861f", "name": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-pairings/pairings-filters.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-pairings/pairings-filters.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8806fbe8c7a01ca0", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-export.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-export.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56fd13c93a8a2ca2", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-summary.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-summary.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76bcad81e137193c", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-filters.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-filters.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bc3b6c4a66091e4", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-crew-detail.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-crew-detail.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4b8dbf7dd9f0f2a", "name": "Commented-code block (8 lines) in apps/mobile/components/reports/crew-count/crew-count-charts.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/components/reports/crew-count/crew-count-charts.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-adb2838a6bf1994b", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-count/crew-count-filters.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-count/crew-count-filters.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24e26cf75472fd0e", "name": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-out-of-base/oob-map.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-out-of-base/oob-map.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e14310937df372c", "name": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-out-of-base/oob-station-pairings.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-out-of-base/oob-station-pairings.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-15e30697477bdba9", "name": "Commented-code block (7 lines) in apps/mobile/components/reports/crew-out-of-base/oob-list.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/components/reports/crew-out-of-base/oob-list.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8766b1704b6e9ac2", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/index.tsx:18", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/index.tsx:18"}, "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-73d1c711be63cecd", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/_layout.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/_layout.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b2fec3c226e1e855", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/operator-config.tsx:441", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/operator-config.tsx:441"}, "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-5a907f7cf859947f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/non-crew-person-detail.tsx:708", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/non-crew-person-detail.tsx:708"}, "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-16d532d151290a04", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/index.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/index.tsx:84"}, "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-8d68dd2990f111e9", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/settings/asm-ssm-transmission.tsx:36", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/settings/asm-ssm-transmission.tsx:36"}, "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-ccb00cebed63f68a", "name": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-configurations.tsx:21", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-configurations.tsx:21"}, "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-bb4251e7b5166f56", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/training-sessions.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/training-sessions.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-245cb2c42a8eebba", "name": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/apis-configuration.tsx:31", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/apis-configuration.tsx:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eadc6d8280c6d6d0", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/crew-count.tsx:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/crew-count.tsx: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-42527227e0bff4f2", "name": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/apis-transmission-log.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/apis-transmission-log.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65e537ea118f9794", "name": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-optimizer.tsx:4", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-optimizer.tsx: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-b0f26d29afbcfad0", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/crew-schedule-stability.tsx:4", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/crew-schedule-stability.tsx: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-b9f41c6c92a9bfb9", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/training-expiries.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/training-expiries.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-378daab286a1b769", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-duty-swap-config.tsx:36", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-duty-swap-config.tsx:36"}, "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-3dfad6f4fe73dff7", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-text.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-text.tsx: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-238870a887028e42", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/delete-pairings.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/delete-pairings.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-251edc3d49c03098", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/schedule-audit.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/schedule-audit.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-848461c4593b36da", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-open-flights-bidding.tsx:28", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-open-flights-bidding.tsx:28"}, "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-e9a65df0858a3975", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-categories.tsx:15", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-categories.tsx:15"}, "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-dde85959450fc7b2", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/crew-app-audit.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/crew-app-audit.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e024d0c41f9f46e", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/apis-transmission.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/apis-transmission.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e134ac0d859326ae", "name": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-transport-management.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-transport-management.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d058eb3bfaf5dad8", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-hotel-management.tsx:42", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-hotel-management.tsx:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d4b12f322f7e0d0", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/journey-log.tsx:30", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/journey-log.tsx:30"}, "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-33d2984ef2dfa485", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-config.tsx:18", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-config.tsx:18"}, "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-5d1b4450665a4032", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/schedule-legality-check.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/schedule-legality-check.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3316b7ca7bdaa70", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/crew-app-config.tsx:49", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/crew-app-config.tsx: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-a9548844c4c477f8", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/training-reports.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/training-reports.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1aa4b4b56637160b", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-schedule-publish.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-schedule-publish.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61ddfa99c835e089", "name": "Commented-code block (9 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-config.tsx:34", "shortDescription": {"text": "Commented-code block (9 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-config.tsx:34"}, "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-cfcb2111c189949f", "name": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-pairings.tsx:4", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-pairings.tsx: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-d74bdcbfe7eae798", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-check-in.tsx:30", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-check-in.tsx:30"}, "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-6cbc5693152a113f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/crew-ops/tracking-check-in.tsx:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/crew-ops/tracking-check-in.tsx:76"}, "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-a96a4ab667e0d5f6", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/manpower-planning.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/manpower-planning.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64dc707aee22913d", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/data-import.tsx:41", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/data-import.tsx:41"}, "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-dd717ef93e4c1783", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/operating-crew-info.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/operating-crew-info.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bd7d09541cd9cf9", "name": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-out-of-base.tsx:4", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-out-of-base.tsx: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-ef8607d2977b1159", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/rule-violation-messages.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/rule-violation-messages.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a40bf7acdc9a676", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/crew-profile.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/crew-profile.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d8e74d10cf36556", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/documents.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/documents.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae4d1640e5a1bf78", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/network/schedule-grid.tsx:144", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/network/schedule-grid.tsx:144"}, "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-b9e14dd9e32cb34f", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/network/frequency-planning.tsx:94", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/network/frequency-planning.tsx:94"}, "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-3d495f785b99b009", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/network/gantt.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/network/gantt.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-593d0d1241db4758", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/admin/audit-log.tsx:28", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/admin/audit-log.tsx:28"}, "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-0e222dcfda8cad34", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/licensing.tsx:28", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/licensing.tsx:28"}, "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-21e022726094a14b", "name": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/admin/index.tsx:18", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/admin/index.tsx:18"}, "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-6e3b2c344fef8f65", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/access-rights.tsx:25", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/access-rights.tsx:25"}, "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-18f647bf19fd8b39", "name": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/users.tsx:12", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/users.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b35efccc4983dd38", "name": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/flight-ops/journey-log.tsx:24", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/flight-ops/journey-log.tsx:24"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5af280ee3f531f5", "name": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/ground-ops/cargo-manifest.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/ground-ops/cargo-manifest.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93998e1060eb30c8", "name": "Commented-code block (5 lines) in apps/mobile/lib/operating-crew-pdf.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/lib/operating-crew-pdf.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d6c1656fdbd30696", "name": "Commented-code block (5 lines) in apps/mobile/lib/report-export.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/lib/report-export.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65dbbb894247ad1a", "name": "Commented-code block (5 lines) in apps/mobile/lib/hub-route-map.ts:84", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/lib/hub-route-map.ts:84"}, "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-8692f00ce72f14a7", "name": "Commented-code block (6 lines) in apps/mobile/hooks/useOperatorId.ts:17", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/hooks/useOperatorId.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-829ea842f2770a51", "name": "Commented-code block (7 lines) in apps/mobile/src/stores/use-crew-checkin-store.ts:148", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/stores/use-crew-checkin-store.ts:148"}, "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-37a028ca0f6c6830", "name": "Commented-code block (5 lines) in apps/mobile/src/components/gantt/selection-action-bar.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/gantt/selection-action-bar.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59715ff52cc3df56", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/journey-log/config-sections.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/journey-log/config-sections.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3545ccd9bda29bb", "name": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/schedule/use-crew-schedule-store.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/schedule/use-crew-schedule-store.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dabd01746c669c6c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/components/crew-ops/schedule/crew-schedule-filter-sheet.ts", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/components/crew-ops/schedule/crew-schedule-filter-sheet.tsx:4"}, "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-c5a766366c5d08ac", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/layout-bridge.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/layout-bridge.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb3eaba76e4e18f8", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-canvas.tsx:81", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-canvas.tsx:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7aa4d816e78cb6d7", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/legality-bridge.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/legality-bridge.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d1cd02aeeded854", "name": "Commented-code block (11 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-uncrewed-tray.tsx:3", "shortDescription": {"text": "Commented-code block (11 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-uncrewed-tray.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87f67be247c2a316", "name": "Commented-code block (10 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-dialogs.tsx:1", "shortDescription": {"text": "Commented-code block (10 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-dialogs.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecd9fd76ba8ef3a6", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-draw.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-draw.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa21179d9c4ee117", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-rail.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-rail.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e4ab0dff7b5b2358", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-action-sheet.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-action-sheet.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ebb7b58b0d9f3c3", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-shell.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-shell.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c847727243b7ed35", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-inspector-sheet.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-inspector-sheet.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95ea195a2b250e87", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/hotac-config/primitives.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/hotac-config/primitives.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48fd7b545cd80f3d", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/hotac-config/section-heroes.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/hotac-config/section-heroes.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3943770a4dd3c615", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/training-reports/columns.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/training-reports/columns.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-779fa34341751aba", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-reports/export.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-reports/export.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3728bea8da887c7", "name": "Commented-code block (9 lines) in apps/mobile/src/components/crew-ops/training-reports/training-report-shell.tsx:1", "shortDescription": {"text": "Commented-code block (9 lines) in apps/mobile/src/components/crew-ops/training-reports/training-report-shell.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-545e4db6e45a75ab", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/training-schedule/auto-schedule-shell.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/training-schedule/auto-schedule-shell.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56ea781347f008a2", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-schedule/sim-schedule-shell.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-schedule/sim-schedule-shell.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f328964295a402d3", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-schedule/booking-create-sheet.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-schedule/booking-create-sheet.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9186ccb98d0a0dc", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-schedule/sim-gantt-layout.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-schedule/sim-gantt-layout.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1feebf0c57467e1b", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-documents/documents-filter-panel.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-documents/documents-filter-panel.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c688f2632fa741da", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-documents/crew-search-modal.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-documents/crew-search-modal.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11effe52e0671b9b", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/duty-swap-config/section-bodies.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/duty-swap-config/section-bodies.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30fdc17fc1dc9900", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-config/pairing-config-body.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-config/pairing-config-body.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13f3b99dff497849", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing-config/pairing-config-hero.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing-config/pairing-config-hero.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c010d4963b401f22", "name": "Commented-code block (11 lines) in apps/mobile/src/components/crew-ops/data-import/import-templates.ts:3", "shortDescription": {"text": "Commented-code block (11 lines) in apps/mobile/src/components/crew-ops/data-import/import-templates.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8c688b412b378be", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/data-import/data-import-heroes.tsx:15", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/data-import/data-import-heroes.tsx:15"}, "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-e6fac792fea1914c", "name": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/schedule-audit/schedule-audit-filters.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/schedule-audit/schedule-audit-filters.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca2c8c2dee411c5b", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/apis/log-detail-sheet.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/apis/log-detail-sheet.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a2bce612e9ef240", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/apis/log-cusres-sheet.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/apis/log-cusres-sheet.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7ca95275fb4136e8", "name": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/apis/transmission-filter-sheet.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/apis/transmission-filter-sheet.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7dc04ff841d5c22", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/apis/transmission-working-area.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/apis/transmission-working-area.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dba43f4ffd305cc1", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-categories/pairing-categories-hero.tsx:15", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-categories/pairing-categories-hero.tsx:15"}, "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-78c440f6fea7ff44", "name": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/pairing-optimizer/shell.tsx:1", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/pairing-optimizer/shell.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c2f7d2d3dcc305a", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-optimizer/use-pairing-run.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-optimizer/use-pairing-run.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6283cc071957f0d5", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-inspector.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-inspector.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19aee0676d42b674", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/flight-pool-list.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/flight-pool-list.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b4fdb296cbfa3778", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-store.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-store.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cafee89e528ae4f3", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing/inspect-pairing-view.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing/inspect-pairing-view.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60ee0907e45200e8", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-list.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-list.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13f1a99dbaf5c204", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-filter-panel.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-filter-panel.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edc56d52965ff0e4", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/paradigm-splashes.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/paradigm-splashes.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c72f93b6c5a54336", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/optimizer-chooser.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/optimizer-chooser.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0485591bf48a527b", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/shared.tsx:87", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/shared.tsx:87"}, "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-351df77805ddfc25", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/dialogs.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/dialogs.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1557e66a1cd2bb2d", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/award-step.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/award-step.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b89bc0150a5b390a", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/bidlines-shell.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/bidlines-shell.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3c86c761fbfb905", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/generate-step.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/generate-step.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dda6a70876f48860", "name": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/auto-roster-shell.tsx:6", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/auto-roster-shell.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae607418f6758b17", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/review-stats.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/review-stats.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46736ccf566ca64f", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/workload-histogram.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/workload-histogram.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cdad3a78749b771", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/review-step.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/review-step.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3730c2bfb05413ab", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/manpower-planning/manpower-config-panel.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/manpower-planning/manpower-config-panel.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9bb3214ca7197d0", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/manpower-planning/manpower-shared.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/manpower-planning/manpower-shared.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8143c89d5d4ebc9d", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-hero.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-hero.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-588595ef973193c7", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-confirm-dialog.tsx", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-confirm-dialog.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d026df8b42430e4e", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-results.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-results.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-395ee50a4609ead3", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/danger-button.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/danger-button.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7195f235b94fc3c2", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule-publish/published-crew-export.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule-publish/published-crew-export.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2dc78b53e2254d2", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/unpublish-picker.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/unpublish-picker.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-473c6d7b3c1bfd0a", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/published-crew-table.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/published-crew-table.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-002e31b7baee543f", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/schedule-publish-filters.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/schedule-publish-filters.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-953555c1c5478a50", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule-publish/schedule-publish-console.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule-publish/schedule-publish-console.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d17c047f19ba9a2c", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/schedule-publish/specific-crew-sheet.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/schedule-publish/specific-crew-sheet.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90d70d0bf9058787", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/scheduling-config/section-bodies-fair.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/scheduling-config/section-bodies-fair.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85f7d675549e4afc", "name": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/scheduling-config/draft.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/scheduling-config/draft.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-89d73c8658444d15", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/use-pairing-gantt-store.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/use-pairing-gantt-store.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74688d9125a49ffb", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/pairing-gantt-canvas.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/pairing-gantt-canvas.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9bb6fc1f167d36a7", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/pairing-types.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/pairing-types.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60be815034cab447", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/components/crew-ops/pairing-gantt/pairing-filter-sheet.tsx", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/components/crew-ops/pairing-gantt/pairing-filter-sheet.tsx:2"}, "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-15835eaa35dfc479", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-app-audit/specific-crew-search-modal.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-app-audit/specific-crew-search-modal.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-98f6776cfa70dbf4", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-app-audit/audit-filters.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-app-audit/audit-filters.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c5bd761263ff0ac", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/session-inspector.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/session-inspector.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42e4081174ccb7d6", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/expiries-results.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/expiries-results.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b27741638b786a1", "name": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-core/session-create-dialog.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-core/session-create-dialog.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ee2ff0d33748d5f", "name": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/expiries-filter-rail.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/expiries-filter-rail.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad3fb430e3991bd5", "name": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelIntelMobile.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelIntelMobile.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53188d1d178f7e52", "name": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelRadialSkia.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelRadialSkia.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-91a65491c204bedc", "name": "Commented-code block (6 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelNodeSheet.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelNodeSheet.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f8b244712f6e6b5", "name": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelBreakdownList.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelBreakdownList.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f301621d9a142039", "name": "Commented-code block (6 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelKpiStrip.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelKpiStrip.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc0724f35f2aff29", "name": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/emissions-report/emissions-parts.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/emissions-report/emissions-parts.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af52b0d9720ca85d", "name": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/status-board/kpi-cards.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/status-board/kpi-cards.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4fa6fff2f133ad1", "name": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/maintenance-planning/event-action-sheet.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/maintenance-planning/event-action-sheet.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdf2d82c8e42d006", "name": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/occ/flight-detail-modal.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/occ/flight-detail-modal.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f29f1401ef7b5a8", "name": "Commented-code block (9 lines) in apps/mobile/src/components/maintenance/maintenance-gantt-canvas.tsx:6", "shortDescription": {"text": "Commented-code block (9 lines) in apps/mobile/src/components/maintenance/maintenance-gantt-canvas.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cbce95ad0e9cc84", "name": "Commented-code block (5 lines) in apps/mobile/src/lib/gantt/cache.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/gantt/cache.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ad95ae6cd008608", "name": "Commented-code block (6 lines) in apps/mobile/src/lib/gantt/wmdb-bridge.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in apps/mobile/src/lib/gantt/wmdb-bridge.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4bae18f889e2c811", "name": "Commented-code block (5 lines) in apps/mobile/src/lib/gantt/use-canvas-font.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/gantt/use-canvas-font.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4476ead00a438ff", "name": "Commented-code block (8 lines) in apps/mobile/src/database/schema.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mobile/src/database/schema.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42c26c52d7b7ab95", "name": "Commented-code block (5 lines) in apps/mobile/src/database/wmdb-types.d.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/database/wmdb-types.d.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a977e579f887d4a8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/database/wmdb-types.d.ts:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/database/wmdb-types.d.ts:23"}, "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-3cbe062cc0b322e8", "name": "Commented-code block (5 lines) in apps/mobile/src/database/index.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/mobile/src/database/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1924ec4bc25acdb", "name": "Commented-code block (5 lines) in apps/crew/app/_layout.tsx:65", "shortDescription": {"text": "Commented-code block (5 lines) in apps/crew/app/_layout.tsx:65"}, "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-0975e5f3cff486eb", "name": "Commented-code block (5 lines) in apps/crew/app/activity/[activityId].tsx:285", "shortDescription": {"text": "Commented-code block (5 lines) in apps/crew/app/activity/[activityId].tsx:285"}, "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-b967ea0545d66c01", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/activity/[activityId].tsx:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/activity/[activityId].tsx:66"}, "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-e4d0a853bfeb5203", "name": "Commented-code block (5 lines) in apps/crew/app/duty/[assignmentId].tsx:65", "shortDescription": {"text": "Commented-code block (5 lines) in apps/crew/app/duty/[assignmentId].tsx:65"}, "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-ba7aca95efd490b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/duty/[assignmentId].tsx:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/duty/[assignmentId].tsx:144"}, "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-f7a3b08df3ce3d3a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/swap/vacation.tsx:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/swap/vacation.tsx:103"}, "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-6a5a0b075f2e6e85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/(tabs)/messages.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/(tabs)/messages.tsx:26"}, "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-be9f842a449d29c2", "name": "Commented-code block (5 lines) in apps/crew/app/(tabs)/bidding.tsx:483", "shortDescription": {"text": "Commented-code block (5 lines) in apps/crew/app/(tabs)/bidding.tsx:483"}, "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-4823aa7a0e8b2bb0", "name": "Commented-code block (5 lines) in apps/crew/app/(tabs)/roster.tsx:41", "shortDescription": {"text": "Commented-code block (5 lines) in apps/crew/app/(tabs)/roster.tsx:41"}, "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-89b6e9fc430697ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/(tabs)/roster.tsx:125", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/(tabs)/roster.tsx:125"}, "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-73ba925bee64c222", "name": "Commented-code block (7 lines) in apps/crew/app/(tabs)/more.tsx:99", "shortDescription": {"text": "Commented-code block (7 lines) in apps/crew/app/(tabs)/more.tsx:99"}, "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-0bd74db9da7675e2", "name": "Commented-code block (6 lines) in apps/crew/src/stores/use-crew-app-config-store.ts:231", "shortDescription": {"text": "Commented-code block (6 lines) in apps/crew/src/stores/use-crew-app-config-store.ts:231"}, "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-d7fe993e21e5d8d9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/src/components/AcknowledgementGateScreen.tsx:38", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/src/components/AcknowledgementGateScreen.tsx:38"}, "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-48db923f8464d37d", "name": "Legacy-named symbol `isLegacy` in apps/crew/src/theme/use-theme.ts:22", "shortDescription": {"text": "Legacy-named symbol `isLegacy` in apps/crew/src/theme/use-theme.ts:22"}, "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-e729abc3dfad9dd1", "name": "Commented-code block (5 lines) in apps/crew/src/lib/api-client.ts:960", "shortDescription": {"text": "Commented-code block (5 lines) in apps/crew/src/lib/api-client.ts:960"}, "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-001179e56bce8f98", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-schedule-legality-check-store.ts:110", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-schedule-legality-check-store.ts:110"}, "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-6210275660ad168a", "name": "Legacy-named symbol `pairing_period_v1` in apps/web/src/stores/use-pairing-store.ts:176", "shortDescription": {"text": "Legacy-named symbol `pairing_period_v1` in apps/web/src/stores/use-pairing-store.ts:176"}, "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-2c703ea800d493db", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-pairing-store.ts:91", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-pairing-store.ts:91"}, "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-d2175c400e1964d3", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-gantt-store.ts:1035", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-gantt-store.ts:1035"}, "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-39529d0d7f2e5c37", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-route-summary-store.ts:77", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-route-summary-store.ts:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-790082b2bc842eb3", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-frequency-planning-store.ts:257", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-frequency-planning-store.ts:257"}, "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-bb41c6a025e02b06", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-crew-schedule-store.ts:1349", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-crew-schedule-store.ts:1349"}, "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-71ac5842f1fd9311", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/stores/use-crew-schedule-store.ts:2524", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/stores/use-crew-schedule-store.ts:2524"}, "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-cbab04562e5f19f4", "name": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-checkin-store.ts:150", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-checkin-store.ts:150"}, "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-1f76d9e6ecc0df8a", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-pic-discretion-store.ts:82", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-pic-discretion-store.ts:82"}, "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-d0ed7da3ad4c3a83", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-frequency-analysis-store.ts:57", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-frequency-analysis-store.ts:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44f73d0e84d864fd", "name": "Commented-code block (5 lines) in apps/web/src/stores/use-schedule-audit-store.ts:206", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/stores/use-schedule-audit-store.ts:206"}, "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-177ae7d0a9448eb6", "name": "Commented-code block (6 lines) in apps/web/src/stores/use-airport-activity-store.ts:81", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-airport-activity-store.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-809cf34e616ede01", "name": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-schedule-stability-store.ts:105", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-schedule-stability-store.ts:105"}, "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-77cbbddd33d29319", "name": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-standby-store.ts:157", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-standby-store.ts:157"}, "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-d36057a30e3928a3", "name": "Commented-code block (5 lines) in apps/web/src/stores/use-schedule-ref-store.ts:152", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/stores/use-schedule-ref-store.ts: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-6e8e313d3a78bcab", "name": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-out-of-base-store.ts:150", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-out-of-base-store.ts:150"}, "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-80987613b24e3dac", "name": "Commented-code block (5 lines) in apps/web/src/stores/use-crew-roster-store.ts:80", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/stores/use-crew-roster-store.ts:80"}, "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-3cd5eb613287b937", "name": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-pairings-store.ts:167", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-pairings-store.ts:167"}, "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-ec71c8fccb745ebd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/auth-provider.tsx:160", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/auth-provider.tsx:160"}, "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-bd20dcdebaa69964", "name": "Commented-code block (5 lines) in apps/web/src/components/app-shell.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/app-shell.tsx:27"}, "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-d6ccb9126e66ba49", "name": "Commented-code block (5 lines) in apps/web/src/components/help/help-search-bar.tsx:54", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/help/help-search-bar.tsx:54"}, "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-6b81897b3be672a6", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/uncrewed-duties-tray.tsx:481", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/uncrewed-duties-tray.tsx:481"}, "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-da6bb05e59a23ed9", "name": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-open-duties-section.tsx:66", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-open-duties-section.tsx:66"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e8be6bf17a2baac3", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-context-menu.tsx:1077", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-context-menu.tsx:1077"}, "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-533fc579f462bd93", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel.tsx:93", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel.tsx:93"}, "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-cfbeceea2ec194e0", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-canvas.tsx:432", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-canvas.tsx:432"}, "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-5fd139dc3dd0cc25", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-left-panel.tsx:101", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-left-panel.tsx:101"}, "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-3d1fe4cb494bb30d", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:213", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:213"}, "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-dc5a4904b891421c", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/activity-code-picker.tsx:53", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/activity-code-picker.tsx:53"}, "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-93440f397b2898b5", "name": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/schedule/skyai/skyai-panel.tsx:89", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/schedule/skyai/skyai-panel.tsx:89"}, "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-6bbf68dbf25352a2", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/skyai/skyai-chart.tsx:449", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/skyai/skyai-chart.tsx:449"}, "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-b848e0089459fb98", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/legality-check-dialog.tsx:88", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/legality-check-dialog.tsx:88"}, "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-b629d530553ddd99", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/temporary-base-dialog.tsx:85", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/temporary-base-dialog.tsx:85"}, "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-18edab8d8734687a", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/standby-callout-prompt-dialog.tsx:80", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/standby-callout-prompt-dialog.tsx:80"}, "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-fff0ab008ebbdebe", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/dialogs/frms-review-dialog.tsx:407", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/dialogs/frms-review-dialog.tsx:407"}, "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-672eef99ead7db35", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/pairing-details-dialog-host.tsx:38", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/pairing-details-dialog-host.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13ce60bec3a6841a", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/hotac/status-meta.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/hotac/status-meta.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f915264a6e1958e", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/hotac/shell/hotac-shell.tsx:167", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/hotac/shell/hotac-shell.tsx:167"}, "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-4ded251fb6a423b8", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-shell.tsx:111", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-shell.tsx:111"}, "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-26c1b0f7329a3405", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/crew-documents/document-list.tsx:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/crew-documents/document-list.tsx:69"}, "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-5d6c014f31771631", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/crew-documents/common/document-icons.ts:55", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/crew-documents/common/document-icons.ts:55"}, "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-82018eb8493df67c", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/data-import/import-templates.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/data-import/import-templates.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7bc7bb2b57a6ce9", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/shell/pairing-optimizer-shell.tsx:148", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/shell/pairing-optimizer-shell.tsx:148"}, "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-99e4b17c5e0bd772", "name": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/pairing/optimizer/steps/use-pairing-run.ts:330", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/pairing/optimizer/steps/use-pairing-run.ts:330"}, "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-5ad0f90fb62c4cbc", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-canvas.tsx:621", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-canvas.tsx:621"}, "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-061c43a8852b42ce", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector-panel/index.tsx:45", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector-panel/index.tsx:452"}, "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-4c105d77ebb291fc", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/layover-chip.tsx:34", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/layover-chip.tsx:34"}, "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-5975290c79f24657", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/flight-pool-panel.tsx:38", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/flight-pool-panel.tsx:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5caf27c1c9d422d2", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/flight-grid/flight-grid-context-men", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/flight-grid/flight-grid-context-menu.tsx:282"}, "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-de1ba4349413dc62", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/dialogs/pairing-details-dialog.tsx:150", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/dialogs/pairing-details-dialog.tsx:150"}, "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-0088f16a81dff2d5", "name": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/pairing/dialogs/replicate-pairing-dialog.tsx:135", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/pairing/dialogs/replicate-pairing-dialog.tsx:135"}, "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-88595401afac6bfc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/crew-profile/crew-profile-shell.tsx:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/crew-profile/crew-profile-shell.tsx:146"}, "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-f7366291b8f9ccc0", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-profile/grid/aircraft-qualifications-grid.tsx:62", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-profile/grid/aircraft-qualifications-grid.tsx:622"}, "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-27d0db51d21b21fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/check-in/check-in-shell.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/check-in/check-in-shell.tsx:51"}, "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-6576516c85e27354", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx:366", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx:366"}, "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-fb23919bf0613484", "name": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-app-config/crew-app-config-shell.tsx:757", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-app-config/crew-app-config-shell.tsx:757"}, "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-3ab65e807eb28f4e", "name": "Commented-code block (8 lines) in apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx:347", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx:347"}, "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-592389976dc45638", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/training/sessions/training-sessions-shell", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/training/sessions/training-sessions-shell.tsx:157"}, "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-e337dc1e62764c0a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/training/sim-schedule/sim-schedule-shell.", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/training/sim-schedule/sim-schedule-shell.tsx:186"}, "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-67a29ed0b4d85489", "name": "Commented-code block (7 lines) in apps/web/src/components/network/gantt/gantt-shell.tsx:64", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/components/network/gantt/gantt-shell.tsx:64"}, "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-ad0ed249555d017e", "name": "Commented-code block (6 lines) in apps/web/src/components/network/slots/series-context-menu.tsx:79", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/network/slots/series-context-menu.tsx:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-960309b870cdfe04", "name": "Commented-code block (5 lines) in apps/web/src/components/network/slots/slot-manager-shell.tsx:326", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/network/slots/slot-manager-shell.tsx:326"}, "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-1d5d968b4d907039", "name": "Commented-code block (7 lines) in apps/web/src/components/network/shared/predictive-cells.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/components/network/shared/predictive-cells.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-220502bc1270f399", "name": "Commented-code block (7 lines) in apps/web/src/components/network/codeshare/codeshare-shell.tsx:21", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/components/network/codeshare/codeshare-shell.tsx:21"}, "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-39a9c9421633598c", "name": "Commented-code block (5 lines) in apps/web/src/components/network/codeshare/codeshare-types.ts:35", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/network/codeshare/codeshare-types.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-259afa5a09e860fe", "name": "Commented-code block (6 lines) in apps/web/src/components/network/optimizer/optimizer-shell.tsx:237", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/network/optimizer/optimizer-shell.tsx:237"}, "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-d1bec02646605dee", "name": "Commented-code block (5 lines) in apps/web/src/components/network/optimizer/inspector/inspector.tsx:226", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/network/optimizer/inspector/inspector.tsx:226"}, "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-62a551a71c97e8dd", "name": "Commented-code block (5 lines) in apps/web/src/components/network/skyai/skyai-chart.tsx:415", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/network/skyai/skyai-chart.tsx:415"}, "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-7d5f13eb6dc4f819", "name": "Commented-code block (6 lines) in apps/web/src/components/flight-ops/skyai/flight-ops-skyai-launcher.tsx:119", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/flight-ops/skyai/flight-ops-skyai-launcher.tsx:119"}, "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-23bee3fc4eb950d1", "name": "Commented-code block (5 lines) in apps/web/src/app/hub/page.tsx:165", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/hub/page.tsx:165"}, "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-ba685c62683a6463", "name": "Commented-code block (5 lines) in apps/web/src/app/crew-ops/control/crew-schedule/page.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/app/crew-ops/control/crew-schedule/page.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0716ba7382104e79", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/authed-fetch.ts:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/authed-fetch.ts:5"}, "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-cd9ef0c5852e65ed", "name": "Commented-code block (5 lines) in apps/web/src/lib/gantt/pairing-draw-helpers.ts:196", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/gantt/pairing-draw-helpers.ts:196"}, "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-589fe255743edd33", "name": "Commented-code block (5 lines) in apps/web/src/lib/gantt/scenario-diff.ts:185", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/gantt/scenario-diff.ts:185"}, "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-1dcab04f82aeca39", "name": "Commented-code block (5 lines) in apps/web/src/lib/gantt/diff-draw-helpers.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/gantt/diff-draw-helpers.ts: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-e8d4a9cabdf76c1d", "name": "Commented-code block (5 lines) in apps/web/src/lib/world-map/aircraft-silhouette.ts:147", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/world-map/aircraft-silhouette.ts:147"}, "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-262679e7c4e479ba", "name": "Commented-code block (6 lines) in apps/web/src/lib/crew-schedule/violations.ts:146", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/lib/crew-schedule/violations.ts:146"}, "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-bdb12dd83e588946", "name": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/layout.ts:303", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/layout.ts:303"}, "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-2026f7d6c205b5c6", "name": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/uncrewed-layout.ts:117", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/uncrewed-layout.ts:117"}, "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-10520ca9164a6e4c", "name": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/drop-legality.ts:116", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/drop-legality.ts:116"}, "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-734b172ef37069b6", "name": "Commented-code block (5 lines) in apps/web/src/lib/crew-coverage/compute-flight-coverage.ts:59", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-coverage/compute-flight-coverage.ts:59"}, "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-399a4beb4fd688d1", "name": "Commented-code block (5 lines) in apps/web/src/lib/crew-coverage/compute-next-leg-candidates.ts:103", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-coverage/compute-next-leg-candidates.ts:103"}, "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-3378e9f2f6aeeded", "name": "Commented-code block (7 lines) in packages/types/src/crew-ops-ai-actions.ts:169", "shortDescription": {"text": "Commented-code block (7 lines) in packages/types/src/crew-ops-ai-actions.ts:169"}, "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-11bd10eff1851bd7", "name": "Commented-code block (6 lines) in packages/crew-db/src/schema.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in packages/crew-db/src/schema.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ccacda7b6e853ff4", "name": "Commented-code block (11 lines) in packages/crew-db/src/sync/sync-client.ts:101", "shortDescription": {"text": "Commented-code block (11 lines) in packages/crew-db/src/sync/sync-client.ts:101"}, "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-23e5abade79c13df", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/crew-db/src/sync/sync-client.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/crew-db/src/sync/sync-client.ts:53"}, "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-08a37d495abc7429", "name": "Legacy-named symbol `advisory_v1` in packages/api/src/client.ts:12009", "shortDescription": {"text": "Legacy-named symbol `advisory_v1` in packages/api/src/client.ts:12009"}, "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-646e13661c44e0a7", "name": "Commented-code block (5 lines) in packages/api/src/client.ts:4461", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api/src/client.ts:4461"}, "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-dc884be581bbe0e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api/src/client.ts:232", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api/src/client.ts:232"}, "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-52e0125e13dfce28", "name": "Commented-code block (7 lines) in packages/ui/src/components/SpotlightDock.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in packages/ui/src/components/SpotlightDock.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b55de4114141a5f2", "name": "Commented-code block (5 lines) in packages/ui/src/components/UncertaintyValue.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/ui/src/components/UncertaintyValue.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc7e3bb42a83ca71", "name": "Commented-code block (5 lines) in packages/ui/src/components/uncertainty.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/ui/src/components/uncertainty.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b504e42d12b6518", "name": "Commented-code block (5 lines) in packages/ui/src/components/scheduling/SchedulePolicyForm.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/ui/src/components/scheduling/SchedulePolicyForm.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d7ddf4d46c4d413", "name": "Commented-code block (7 lines) in packages/ui/src/components/reports/ReportTable.tsx:1", "shortDescription": {"text": "Commented-code block (7 lines) in packages/ui/src/components/reports/ReportTable.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-165cedd77e0b2039", "name": "Commented-code block (5 lines) in packages/ui/src/components/reports/__tests__/ReportTable.test.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/ui/src/components/reports/__tests__/ReportTable.test.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16c0e48cbce453f2", "name": "Commented-code block (9 lines) in packages/constants/src/module-registry.ts:394", "shortDescription": {"text": "Commented-code block (9 lines) in packages/constants/src/module-registry.ts:394"}, "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-7c1fb2113a7939ce", "name": "Commented-code block (43 lines) in packages/constants/src/permission-catalog.ts:23", "shortDescription": {"text": "Commented-code block (43 lines) in packages/constants/src/permission-catalog.ts: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-f9a9b1a605f0f057", "name": "Commented-code block (7 lines) in packages/logic/src/index.ts:72", "shortDescription": {"text": "Commented-code block (7 lines) in packages/logic/src/index.ts:72"}, "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-02b365b2ce0d618c", "name": "Commented-code block (8 lines) in packages/logic/src/fdtl/disruptive-rest.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in packages/logic/src/fdtl/disruptive-rest.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d9f49ad937ef0ab6", "name": "Commented-code block (5 lines) in packages/logic/src/fdtl/crew-schedule-validator-types.ts:83", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/crew-schedule-validator-types.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b8410e7f02f0051", "name": "Commented-code block (5 lines) in packages/logic/src/fdtl/commander-discretion.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/commander-discretion.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b0fb27cbc6252a1d", "name": "Commented-code block (5 lines) in packages/logic/src/fdtl/evaluators.ts:334", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/evaluators.ts:334"}, "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-7dc392eeeaf9053a", "name": "Commented-code block (7 lines) in packages/logic/src/fdtl/split-duty.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in packages/logic/src/fdtl/split-duty.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90d02c48f06d5b7c", "name": "Commented-code block (5 lines) in packages/logic/src/fdtl/validator.ts:168", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/validator.ts:168"}, "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-7c23721de79f66f4", "name": "Commented-code block (6 lines) in packages/logic/src/fdtl/schedule-duty-builder.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/logic/src/fdtl/schedule-duty-builder.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e7d83b00fd6f9d1", "name": "Commented-code block (7 lines) in packages/logic/src/fdtl/fdp-table.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in packages/logic/src/fdtl/fdp-table.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff041bcc7beaa75c", "name": "Commented-code block (8 lines) in packages/logic/src/fdtl/engine.ts:11", "shortDescription": {"text": "Commented-code block (8 lines) in packages/logic/src/fdtl/engine.ts:11"}, "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-5094c1606a6aeaca", "name": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/min-local-nights.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/min-local-nights.test.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3afe0772de5b04c", "name": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/min-rest-discretion.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/min-rest-discretion.test.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee7765d9209f61d1", "name": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/delayed-reporting.test.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/delayed-reporting.test.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-305a1d7b7782f3f5", "name": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/fdtl-phase-d.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/fdtl-phase-d.test.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b6d89212a223b8e", "name": "Commented-code block (6 lines) in packages/logic/src/fdtl/templates/caav-var15.ts:286", "shortDescription": {"text": "Commented-code block (6 lines) in packages/logic/src/fdtl/templates/caav-var15.ts:286"}, "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-359c2ebe3470f6bc", "name": "Commented-code block (5 lines) in packages/logic/src/network/s-curve/s-curve.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/network/s-curve/s-curve.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d87ad2e1af42d1c5", "name": "Commented-code block (5 lines) in packages/logic/src/utils/ssim-codeshare.ts:116", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/utils/ssim-codeshare.ts:116"}, "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-ec1d889d362aa0ad", "name": "Commented-code block (6 lines) in packages/logic/src/utils/gantt-layout.ts:98", "shortDescription": {"text": "Commented-code block (6 lines) in packages/logic/src/utils/gantt-layout.ts:98"}, "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-38223e35e522b732", "name": "Commented-code block (5 lines) in packages/logic/src/block-time/block-time.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/logic/src/block-time/block-time.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d0af6c7aaba7c2a", "name": "Legacy-named symbol `logistic_regression_v1` in packages/logic/src/disruption-ml/trainer.ts:180", "shortDescription": {"text": "Legacy-named symbol `logistic_regression_v1` in packages/logic/src/disruption-ml/trainer.ts:180"}, "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-13a690f4d66633dd", "name": "Legacy-named symbol `logistic_regression_v1` in packages/logic/src/disruption-ml/types.ts:27", "shortDescription": {"text": "Legacy-named symbol `logistic_regression_v1` in packages/logic/src/disruption-ml/types.ts:27"}, "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-a840073e86966253", "name": "Commented-code block (8 lines) in packages/logic/src/iata/mvt-parser.ts:236", "shortDescription": {"text": "Commented-code block (8 lines) in packages/logic/src/iata/mvt-parser.ts:236"}, "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-83db931904b13ef5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/logic/src/optimizers/network/predictor-client/otp-client.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/logic/src/optimizers/network/predictor-client/otp-client.ts:35"}, "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-8f3f039a7489b191", "name": "Commented-code block (8 lines) in packages/logic/src/optimizers/network/engine/block-builder.ts:118", "shortDescription": {"text": "Commented-code block (8 lines) in packages/logic/src/optimizers/network/engine/block-builder.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63bc2dc27d52bfb7", "name": "Commented-code block (6 lines) in packages/logic/src/disruption/detectors.ts:353", "shortDescription": {"text": "Commented-code block (6 lines) in packages/logic/src/disruption/detectors.ts:353"}, "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-ec876e00caec4e35", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-ahm732.mjs:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-ahm732.mjs:113"}, "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-943979b8d15dbbf8", "name": "Commented-code block (5 lines) in server/seed-performance.mjs:81", "shortDescription": {"text": "Commented-code block (5 lines) in server/seed-performance.mjs: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-b5fe2fe4feb46858", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-performance.mjs:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-performance.mjs:106"}, "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-6aa0364b88ae8931", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-regs.mjs:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-regs.mjs:18"}, "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-6b49e7d505ced592", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-block-hours-all.mjs:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-block-hours-all.mjs:120"}, "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-c58599e9302a3bf5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-block-hours.mjs:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-block-hours.mjs:103"}, "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-fc78b4eb6fd26754", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-delay-codes.mjs:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-delay-codes.mjs:10"}, "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-c95a39c47b1f7e99", "name": "Commented-code block (7 lines) in server/scripts/fit-s-curve.ts:142", "shortDescription": {"text": "Commented-code block (7 lines) in server/scripts/fit-s-curve.ts:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-080df787557dd9ff", "name": "Commented-code block (6 lines) in server/src/dedupe-scheduled-flights.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/dedupe-scheduled-flights.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05447651c48e9712", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/seed-runways.ts:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/seed-runways.ts:54"}, "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-685976ad7b9e0bd3", "name": "Commented-code block (6 lines) in server/src/mark-sby-system.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/mark-sby-system.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79efe3a0ac93af4a", "name": "Commented-code block (5 lines) in server/src/index.ts:641", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/index.ts:641"}, "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-5e28b461facd16d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/probe-flights.ts:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/probe-flights.ts: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-aa3385feef492edf", "name": "Commented-code block (10 lines) in server/src/models/OperatorSchedulingConfig.ts:128", "shortDescription": {"text": "Commented-code block (10 lines) in server/src/models/OperatorSchedulingConfig.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a424c601230914b7", "name": "Commented-code block (6 lines) in server/src/models/CrewQualification.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/models/CrewQualification.ts: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-a1f08f25bfef63fb", "name": "Commented-code block (5 lines) in server/src/models/JourneyLog.ts:105", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/models/JourneyLog.ts:105"}, "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-bf6476fc06c2cfff", "name": "Commented-code block (6 lines) in server/src/models/RecoveryRun.ts:31", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/models/RecoveryRun.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6bed1aef6e0f14e", "name": "Commented-code block (6 lines) in server/src/models/AutoRosterRun.ts:58", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/models/AutoRosterRun.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e4d086a6d938de8", "name": "Commented-code block (5 lines) in server/src/models/OperatorMessagingConfig.ts:67", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/models/OperatorMessagingConfig.ts:67"}, "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-657d8caab19cf950", "name": "Commented-code block (6 lines) in server/src/middleware/authenticate.ts:179", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/middleware/authenticate.ts:179"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-db104153229526a9", "name": "Legacy-named symbol `delLegacy` in server/src/scripts/seed-journey-logs.ts:276", "shortDescription": {"text": "Legacy-named symbol `delLegacy` in server/src/scripts/seed-journey-logs.ts:276"}, "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-757804d2231ef66e", "name": "Commented-code block (6 lines) in server/src/routes/fuel-shared.ts:386", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/fuel-shared.ts:386"}, "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-620b5e68df18db7d", "name": "Commented-code block (5 lines) in server/src/routes/crew-flight-bookings.ts:256", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/crew-flight-bookings.ts:256"}, "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-70a5e178b9fcc6c1", "name": "Commented-code block (5 lines) in server/src/routes/auth.ts:177", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/auth.ts:177"}, "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-01bc3a7e73c08f24", "name": "Commented-code block (5 lines) in server/src/routes/ssim-import.ts:206", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/ssim-import.ts:206"}, "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-7ee0dc998ba29c29", "name": "Commented-code block (5 lines) in server/src/routes/pairing-optimizer.ts:48", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/pairing-optimizer.ts:48"}, "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-0f18ba93dcba42d6", "name": "Commented-code block (5 lines) in server/src/routes/movement-messages.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/movement-messages.ts:95"}, "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-41e1a08af5d420b6", "name": "Commented-code block (5 lines) in server/src/routes/reports-crew-out-of-base.ts:150", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/reports-crew-out-of-base.ts:150"}, "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-3fe195613ee8ed99", "name": "Commented-code block (5 lines) in server/src/routes/pairings.ts:463", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/pairings.ts:463"}, "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-18a25a689238d2c9", "name": "Commented-code block (5 lines) in server/src/routes/flights.ts:38", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/flights.ts:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-406e0a8ecc15052d", "name": "Commented-code block (6 lines) in server/src/routes/auto-roster.ts:450", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/auto-roster.ts:450"}, "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-b5b33add608859c5", "name": "Commented-code block (6 lines) in server/src/routes/tail-optimizer.ts:100", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/tail-optimizer.ts:100"}, "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-f25f4b6239d21af3", "name": "Commented-code block (5 lines) in server/src/routes/crew-app-auth.ts:140", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-auth.ts:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68b1cbab5207216c", "name": "Commented-code block (5 lines) in server/src/routes/crew-app-travel.ts:137", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-travel.ts:137"}, "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-83e7784decf1a9f3", "name": "Commented-code block (7 lines) in server/src/routes/gantt.ts:1041", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/routes/gantt.ts:1041"}, "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-85a1ab19823cf412", "name": "Commented-code block (5 lines) in server/src/routes/operator-ai-config.ts:263", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/operator-ai-config.ts:263"}, "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-79408194d214562b", "name": "Commented-code block (8 lines) in server/src/routes/fleet-utilization.ts:211", "shortDescription": {"text": "Commented-code block (8 lines) in server/src/routes/fleet-utilization.ts:211"}, "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-0aadb111cc61334c", "name": "Commented-code block (5 lines) in server/src/routes/crew-app-sick-certificate.ts:141", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-sick-certificate.ts:141"}, "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-2705042fb2cdfe12", "name": "Commented-code block (5 lines) in server/src/routes/crew-schedule.ts:371", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/crew-schedule.ts:371"}, "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-a1c7e332608bb0c8", "name": "Commented-code block (6 lines) in server/src/routes/recovery-advisor.ts:80", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/recovery-advisor.ts:80"}, "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-c9e3e599bcb66da1", "name": "Commented-code block (5 lines) in server/src/routes/reports-operating-crew-info.ts:229", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/reports-operating-crew-info.ts:229"}, "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-06b7d6762adfe027", "name": "Commented-code block (5 lines) in server/src/routes/skyai-feedback.ts:72", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/skyai-feedback.ts:72"}, "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-c4958b2c5d30b427", "name": "Commented-code block (5 lines) in server/src/routes/crew.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/crew.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a52efbe35d9a43b", "name": "Commented-code block (6 lines) in server/src/routes/disruptions.ts:615", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/disruptions.ts:615"}, "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-fa2495e475c16a23", "name": "Commented-code block (5 lines) in server/src/routes/crew-app-fatigue.ts:148", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-fatigue.ts:148"}, "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-08337b6dc140d8a4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/routes/hotel-bookings.ts:419", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/routes/hotel-bookings.ts:419"}, "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-7f5ac94ff5de76dd", "name": "Commented-code block (6 lines) in server/src/routes/ssim.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/ssim.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68c2eb03bd297dcb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/routes/ssim.ts:418", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/routes/ssim.ts:418"}, "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-e481f06b46cc18a6", "name": "Commented-code block (7 lines) in server/src/routes/crew-documents.ts:25", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/routes/crew-documents.ts:25"}, "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-ce36ce1b1b19b83e", "name": "Commented-code block (5 lines) in server/src/routes/bidlines.ts:140", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/bidlines.ts:140"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bbccf75dfccb29c5", "name": "Commented-code block (6 lines) in server/src/routes/schedule-messages.ts:311", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/schedule-messages.ts:311"}, "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-b4da827d8d069060", "name": "Commented-code block (5 lines) in server/src/routes/crew-app-day-off.ts:274", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-day-off.ts:274"}, "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-516d2615bd4bb980", "name": "Commented-code block (9 lines) in server/src/routes/fuel-statistics.ts:373", "shortDescription": {"text": "Commented-code block (9 lines) in server/src/routes/fuel-statistics.ts:373"}, "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-edb483e9fa32f977", "name": "Commented-code block (6 lines) in server/src/routes/manpower.ts:309", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/manpower.ts:309"}, "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-41cbc7cce2fececc", "name": "Commented-code block (5 lines) in server/src/routes/skyai.ts:191", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/skyai.ts:191"}, "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-812030554ed03a31", "name": "Commented-code block (5 lines) in server/src/routes/reference.ts:2194", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/reference.ts:2194"}, "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-b3b4d2e0923fa9dc", "name": "Commented-code block (5 lines) in server/src/routes/ai-integration-network-write.ts:55", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/ai-integration-network-write.ts:55"}, "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-3c081e72e407273a", "name": "Commented-code block (16 lines) in server/src/routes/crew-app-sync.ts:426", "shortDescription": {"text": "Commented-code block (16 lines) in server/src/routes/crew-app-sync.ts:426"}, "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-43663513a96f3b47", "name": "Commented-code block (5 lines) in server/src/routes/ground-ops-flightview.ts:100", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/ground-ops-flightview.ts:100"}, "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-d3d31ae93015a3ac", "name": "Commented-code block (6 lines) in server/src/routes/crew-app-fit-unfit.ts:191", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/crew-app-fit-unfit.ts:191"}, "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-383484c9b07dbc69", "name": "Commented-code block (5 lines) in server/src/routes/training-sessions.ts:601", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/training-sessions.ts:601"}, "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-fe7bcdb29e9cc7d2", "name": "Commented-code block (6 lines) in server/src/routes/recovery.ts:506", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/routes/recovery.ts:506"}, "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-2ad374de0f8c0748", "name": "Commented-code block (5 lines) in server/src/routes/slots.ts:563", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/routes/slots.ts:563"}, "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-b6b8ec94ff3133f6", "name": "Commented-code block (5 lines) in server/src/services/sync-crew-expiries.ts:39", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/sync-crew-expiries.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-d7318c94f6a2aec8", "name": "Commented-code block (5 lines) in server/src/services/operator-day-window.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/operator-day-window.ts: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-adc202653fe1ba21", "name": "Commented-code block (6 lines) in server/src/services/evaluate-crew-roster.ts:150", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/services/evaluate-crew-roster.ts:150"}, "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-a874a89c244a631b", "name": "Commented-code block (5 lines) in server/src/services/crew-schedule-audit.ts:290", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/crew-schedule-audit.ts:290"}, "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-1e17a722786fb0ab", "name": "Commented-code block (5 lines) in server/src/services/pairing-candidate-generator.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/pairing-candidate-generator.ts:25"}, "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-6a4e6dee1bdb02ba", "name": "Commented-code block (7 lines) in server/src/services/roster-publication.ts:167", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/services/roster-publication.ts:167"}, "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-d023b165c3004e71", "name": "Commented-code block (5 lines) in server/src/services/auto-roster-rebalance.ts:91", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/auto-roster-rebalance.ts:91"}, "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-c279a5a681ee37ae", "name": "Commented-code block (13 lines) in server/src/services/auto-roster-orchestrator.ts:334", "shortDescription": {"text": "Commented-code block (13 lines) in server/src/services/auto-roster-orchestrator.ts:334"}, "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-b11970c570391c52", "name": "Commented-code block (5 lines) in server/src/services/fdtl-rule-set.ts:187", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/fdtl-rule-set.ts:187"}, "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-fa1b5d339292dc18", "name": "Commented-code block (8 lines) in server/src/services/auto-roster-temp-block.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in server/src/services/auto-roster-temp-block.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6c3c28abb2d06760", "name": "Commented-code block (5 lines) in server/src/services/pairing-scenario-statistics.ts:221", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/pairing-scenario-statistics.ts:221"}, "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-4d9e616869590b9e", "name": "Commented-code block (7 lines) in server/src/services/bidline-orchestrator.ts:170", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/services/bidline-orchestrator.ts:170"}, "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-26e034b847a5c93f", "name": "Commented-code block (6 lines) in server/src/services/evaluate-pairing-legality.ts:86", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/services/evaluate-pairing-legality.ts:86"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28ee5f590ef51e85", "name": "Legacy-named symbol `advisory_v1` in server/src/services/fatigue-scoring.ts:129", "shortDescription": {"text": "Legacy-named symbol `advisory_v1` in server/src/services/fatigue-scoring.ts:129"}, "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-66e9543cdd467477", "name": "Commented-code block (7 lines) in server/src/services/fatigue-scoring.ts:264", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/services/fatigue-scoring.ts:264"}, "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-a9476518aa36451d", "name": "Commented-code block (10 lines) in server/src/services/auto-roster-sby-windows.ts:3", "shortDescription": {"text": "Commented-code block (10 lines) in server/src/services/auto-roster-sby-windows.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74fa8c234a1eb5a6", "name": "Commented-code block (5 lines) in server/src/services/bidline-snapshot.ts:216", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/bidline-snapshot.ts:216"}, "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-ae877ce8e7a515a8", "name": "Commented-code block (5 lines) in server/src/services/fdtl-solver-limits.ts:53", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/fdtl-solver-limits.ts:53"}, "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-d4f250745335542d", "name": "Commented-code block (9 lines) in server/src/services/auto-roster-pass2.ts:72", "shortDescription": {"text": "Commented-code block (9 lines) in server/src/services/auto-roster-pass2.ts:72"}, "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-b52e5d6011662d84", "name": "Commented-code block (5 lines) in server/src/services/colgen/highs-set-partition.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/colgen/highs-set-partition.ts:19"}, "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-206b497f613dad10", "name": "Commented-code block (7 lines) in server/src/services/recovery/cancellation-pricing.ts:108", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/services/recovery/cancellation-pricing.ts:108"}, "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-4f345d497ce060a1", "name": "Commented-code block (5 lines) in server/src/services/recovery/types.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/recovery/types.ts: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-0d5b8a5beadaa61d", "name": "Commented-code block (6 lines) in server/src/services/crew-apis/assemble.ts:181", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/services/crew-apis/assemble.ts: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-f6e39416f062fbe9", "name": "Legacy-named symbol `migrateLegacy` in server/src/services/crew-apis/config-loader.ts:61", "shortDescription": {"text": "Legacy-named symbol `migrateLegacy` in server/src/services/crew-apis/config-loader.ts:61"}, "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-db3f63d1a4961ae9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/services/skyai/model-catalog.ts:83", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/services/skyai/model-catalog.ts:83"}, "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-f3beb681d18c6543", "name": "Commented-code block (7 lines) in server/src/services/skyai/tools.ts:217", "shortDescription": {"text": "Commented-code block (7 lines) in server/src/services/skyai/tools.ts:217"}, "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-3498fbb89a377d86", "name": "Commented-code block (5 lines) in server/src/services/skyai/engine.ts:393", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/skyai/engine.ts:393"}, "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-7041259e69a96a31", "name": "Commented-code block (6 lines) in server/src/services/skyai/report-insights/interpreter.ts:100", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/services/skyai/report-insights/interpreter.ts:100"}, "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-b9d5be6c86f7188b", "name": "Commented-code block (9 lines) in server/src/services/skyai/flight-ops-tools/flight/fatigue-snapshot.ts:161", "shortDescription": {"text": "Commented-code block (9 lines) in server/src/services/skyai/flight-ops-tools/flight/fatigue-snapshot.ts:161"}, "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-42c1c8e84cf2eae9", "name": "Commented-code block (5 lines) in server/src/services/skyai/flight-ops-tools/maintenance/aog-aircraft.ts:139", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/skyai/flight-ops-tools/maintenance/aog-aircraft.ts:139"}, "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-84a8c26288e35662", "name": "Commented-code block (5 lines) in server/src/services/skyai/recovery-advisor-tools/run.ts:71", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/skyai/recovery-advisor-tools/run.ts:71"}, "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-d90ee6edecce69e9", "name": "Commented-code block (5 lines) in server/src/services/skyai/recovery-advisor-tools/propose.ts:212", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/skyai/recovery-advisor-tools/propose.ts:212"}, "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-f362de30605373c8", "name": "Commented-code block (9 lines) in server/src/services/open-flight-bidding/award.ts:206", "shortDescription": {"text": "Commented-code block (9 lines) in server/src/services/open-flight-bidding/award.ts:206"}, "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-c119d6845e5b3a8f", "name": "Commented-code block (5 lines) in server/src/services/crew-ops-skyai/constraint-check.ts:1093", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/services/crew-ops-skyai/constraint-check.ts:1093"}, "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-add3adce7c2182ae", "name": "Commented-code block (5 lines) in server/src/db/connection.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/db/connection.ts:36"}, "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-a3bd8444ce415c49", "name": "Commented-code block (5 lines) in server/src/jobs/task-registry.ts:148", "shortDescription": {"text": "Commented-code block (5 lines) in server/src/jobs/task-registry.ts:148"}, "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-ab6df1c704a4c1c1", "name": "Commented-code block (6 lines) in server/src/jobs/tasks/daily-crew-activity-log.ts:131", "shortDescription": {"text": "Commented-code block (6 lines) in server/src/jobs/tasks/daily-crew-activity-log.ts:131"}, "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-ad0f36793a1bd5d3", "name": "Commented-code block (5 lines) in services/auto-roster-solver/eval_fdtl_scaling.py:274", "shortDescription": {"text": "Commented-code block (5 lines) in services/auto-roster-solver/eval_fdtl_scaling.py:274"}, "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-75eedb5598b75370", "name": "Commented-code block (6 lines) in services/auto-roster-solver/app/models.py:30", "shortDescription": {"text": "Commented-code block (6 lines) in services/auto-roster-solver/app/models.py:30"}, "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-29950625227864a4", "name": "Commented-code block (5 lines) in services/auto-roster-solver/app/solver/cp_sat_engine.py:128", "shortDescription": {"text": "Commented-code block (5 lines) in services/auto-roster-solver/app/solver/cp_sat_engine.py:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b537e162dfb3f07", "name": "Legacy-named symbol `model_copy` in services/network-constraint-evaluator/app/solver/constraints.py:365", "shortDescription": {"text": "Legacy-named symbol `model_copy` in services/network-constraint-evaluator/app/solver/constraints.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-c1952255fc4b7c58", "name": "Commented-code block (7 lines) in services/pairing-optimizer/app/solver/cp_sat_engine.py:470", "shortDescription": {"text": "Commented-code block (7 lines) in services/pairing-optimizer/app/solver/cp_sat_engine.py:470"}, "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-a7920a717aa52b0c", "name": "Commented-code block (6 lines) in services/demand-forecaster/app/models.py:16", "shortDescription": {"text": "Commented-code block (6 lines) in services/demand-forecaster/app/models.py:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ca1c629bbc0b15b", "name": "Commented-code block (5 lines) in services/demand-forecaster/app/allocator/mip.py:171", "shortDescription": {"text": "Commented-code block (5 lines) in services/demand-forecaster/app/allocator/mip.py:171"}, "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-b749e808d47a0a82", "name": "Commented-code block (6 lines) in services/demand-forecaster/app/allocator/scurve.py:119", "shortDescription": {"text": "Commented-code block (6 lines) in services/demand-forecaster/app/allocator/scurve.py:119"}, "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-d9605dfafce61a4a", "name": "91 env vars used in code but missing from .env.example", "shortDescription": {"text": "91 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AI_CONFIG_MASTER_KEY`, `ANTHROPIC_API_KEY`, `ASM_SSM_SFTP_ADAPTER`, `ASM_SSM_SMTP_ADAPTER`, `AUTO_ROSTER_CABIN_THRESHOLD`, `AUTO_ROSTER_CARRY_IN`, `AUTO_ROSTER_COVERAGE_STAGNATION_SEC`, `AUTO_ROSTER_DISABLE_PRESOLVE` + 83 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-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:\nservices/auto-roster-solver/app/main.py:require_internal_key, services/network-constraint-evaluator/app/main.py:require_internal_key, services/otp-predictor/app/main.py:require_internal_key, services/pairing-optimizer/app/main.py:require_internal_key\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-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:\nservices/otp-predictor/app/predictor/registry.py:get_active_entry, services/demand-forecaster/app/forecaster/registry.py:load_active\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-07e08b40a28affe5", "name": "Dangling fetch: GET /crew-app/auth/pin-policy${qs} (apps/crew/src/lib/api-client.ts:637)", "shortDescription": {"text": "Dangling fetch: GET /crew-app/auth/pin-policy${qs} (apps/crew/src/lib/api-client.ts:637)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:637` calls `GET /crew-app/auth/pin-policy${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/auth/pin-policy/<p>`\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-80a2545864991d6c", "name": "Dangling fetch: GET /crew-app/auth/styling?operatorId=${encodeURIComponent(operatorId)} (apps/crew/src/lib/api-client.ts", "shortDescription": {"text": "Dangling fetch: GET /crew-app/auth/styling?operatorId=${encodeURIComponent(operatorId)} (apps/crew/src/lib/api-client.ts:641)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:641` calls `GET /crew-app/auth/styling?operatorId=${encodeURIComponent(operatorId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/auth/styling`\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-b21053f5b1f6c04f", "name": "Dangling fetch: PATCH /crew-app/me/passports/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:704)", "shortDescription": {"text": "Dangling fetch: PATCH /crew-app/me/passports/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:704)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:704` calls `PATCH /crew-app/me/passports/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/me/passports/<p>`\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-36b2c9bf412f3652", "name": "Dangling fetch: DELETE /crew-app/me/passports/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:710)", "shortDescription": {"text": "Dangling fetch: DELETE /crew-app/me/passports/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:710)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:710` calls `DELETE /crew-app/me/passports/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/me/passports/<p>`\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-6bc2437a3af1eead", "name": "Dangling fetch: POST /crew-app/me/fit-unfit/${encodeURIComponent(id)}/rescind (apps/crew/src/lib/api-client.ts:851)", "shortDescription": {"text": "Dangling fetch: POST /crew-app/me/fit-unfit/${encodeURIComponent(id)}/rescind (apps/crew/src/lib/api-client.ts:851)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:851` calls `POST /crew-app/me/fit-unfit/${encodeURIComponent(id)}/rescind` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/me/fit-unfit/<p>/rescind`\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-1c3159c9376f9342", "name": "Dangling fetch: POST /crew-app/me/fatigue/${encodeURIComponent(reportId)}/osr (apps/crew/src/lib/api-client.ts:874)", "shortDescription": {"text": "Dangling fetch: POST /crew-app/me/fatigue/${encodeURIComponent(reportId)}/osr (apps/crew/src/lib/api-client.ts:874)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:874` calls `POST /crew-app/me/fatigue/${encodeURIComponent(reportId)}/osr` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/me/fatigue/<p>/osr`\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-76ff52b3b6c66821", "name": "Dangling fetch: GET /crew-app/me/day-off-requests${qs} (apps/crew/src/lib/api-client.ts:909)", "shortDescription": {"text": "Dangling fetch: GET /crew-app/me/day-off-requests${qs} (apps/crew/src/lib/api-client.ts:909)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:909` calls `GET /crew-app/me/day-off-requests${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/me/day-off-requests/<p>`\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-be9e672d7db6185e", "name": "Dangling fetch: DELETE /crew-app/me/day-off-requests/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:919)", "shortDescription": {"text": "Dangling fetch: DELETE /crew-app/me/day-off-requests/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:919)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:919` calls `DELETE /crew-app/me/day-off-requests/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/me/day-off-requests/<p>`\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-01a86d568ec00e7c", "name": "Dangling fetch: POST /crew-app/auth/logout (apps/crew/src/lib/api-client.ts:943)", "shortDescription": {"text": "Dangling fetch: POST /crew-app/auth/logout (apps/crew/src/lib/api-client.ts:943)"}, "fullDescription": {"text": "`apps/crew/src/lib/api-client.ts:943` calls `POST /crew-app/auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-app/auth/logout`\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-21aaa461cdb3b7e1", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/frequency-analysis-export.ts:119)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/frequency-analysis-export.ts:119)"}, "fullDescription": {"text": "`apps/web/src/lib/frequency-analysis-export.ts:119` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-20d6e7fd18b967ed", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/irops-report-export.ts:116)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/irops-report-export.ts:116)"}, "fullDescription": {"text": "`apps/web/src/lib/irops-report-export.ts:116` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-dd97832b3cb14bc5", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-summary-export.ts:82)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-summary-export.ts:82)"}, "fullDescription": {"text": "`apps/web/src/lib/schedule-summary-export.ts:82` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-9bbb4c7e2741a891", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-legality-check-export.ts:66)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-legality-check-export.ts:66)"}, "fullDescription": {"text": "`apps/web/src/lib/schedule-legality-check-export.ts:66` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-9b2e140823021fc7", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/published-crew-export.ts:188)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/published-crew-export.ts:188)"}, "fullDescription": {"text": "`apps/web/src/lib/published-crew-export.ts:188` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-9244df0d02793921", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-audit-export.ts:27)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-audit-export.ts:27)"}, "fullDescription": {"text": "`apps/web/src/lib/schedule-audit-export.ts:27` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-ddeb63023886c74a", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/airport-activity-export.ts:81)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/airport-activity-export.ts:81)"}, "fullDescription": {"text": "`apps/web/src/lib/airport-activity-export.ts:81` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-a91e857e1369dd82", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/route-summary-export.ts:102)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/route-summary-export.ts:102)"}, "fullDescription": {"text": "`apps/web/src/lib/route-summary-export.ts:102` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-27595a1ff6789f06", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/crew-expiry-report-export.ts:102)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/crew-expiry-report-export.ts:102)"}, "fullDescription": {"text": "`apps/web/src/lib/crew-expiry-report-export.ts:102` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-28dec526581a9d2f", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/pic-discretion-export.ts:111)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/pic-discretion-export.ts:111)"}, "fullDescription": {"text": "`apps/web/src/lib/pic-discretion-export.ts:111` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-515cbe2d2b887561", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fids-export.ts:79)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fids-export.ts:79)"}, "fullDescription": {"text": "`apps/web/src/lib/fids-export.ts:79` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-b33b74dd98568fe3", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/freight-statistics-export.ts:172)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/freight-statistics-export.ts:172)"}, "fullDescription": {"text": "`apps/web/src/lib/freight-statistics-export.ts:172` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-42b636337c3ec185", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/crew-absence-report-export.ts:114)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/crew-absence-report-export.ts:114)"}, "fullDescription": {"text": "`apps/web/src/lib/crew-absence-report-export.ts:114` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-6e607a992e1a7dde", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fuel-report-export.ts:210)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fuel-report-export.ts:210)"}, "fullDescription": {"text": "`apps/web/src/lib/fuel-report-export.ts:210` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-f4854b6cfe212f49", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/emissions-report-export.ts:206)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/emissions-report-export.ts:206)"}, "fullDescription": {"text": "`apps/web/src/lib/emissions-report-export.ts:206` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-1b55b03f581269c1", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/block-time-report-export.ts:136)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/block-time-report-export.ts:136)"}, "fullDescription": {"text": "`apps/web/src/lib/block-time-report-export.ts:136` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-3e82bb12f26043f8", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/daily-schedule-export.ts:208)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/daily-schedule-export.ts:208)"}, "fullDescription": {"text": "`apps/web/src/lib/daily-schedule-export.ts:208` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-4dc9e0fa4e6f54f5", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/otp-export.ts:175)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/otp-export.ts:175)"}, "fullDescription": {"text": "`apps/web/src/lib/otp-export.ts:175` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-22ba5858a59c9078", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/daily-ops-export.ts:98)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/daily-ops-export.ts:98)"}, "fullDescription": {"text": "`apps/web/src/lib/daily-ops-export.ts:98` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-2c3143621f59f374", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/hotac-audit-export.ts:63)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/hotac-audit-export.ts:63)"}, "fullDescription": {"text": "`apps/web/src/lib/hotac-audit-export.ts:63` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-2fb144a0d4b61e87", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/delay-analysis-export.ts:169)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/delay-analysis-export.ts:169)"}, "fullDescription": {"text": "`apps/web/src/lib/delay-analysis-export.ts:169` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-9dbd15838d500e8c", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fleet-utilization-export.ts:133)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fleet-utilization-export.ts:133)"}, "fullDescription": {"text": "`apps/web/src/lib/fleet-utilization-export.ts:133` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-36005dae1de83249", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/passenger-statistics-export.ts:189)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/passenger-statistics-export.ts:189)"}, "fullDescription": {"text": "`apps/web/src/lib/passenger-statistics-export.ts:189` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-2b8b44cab77504e6", "name": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/public-timetable/export.ts:122)", "shortDescription": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/public-timetable/export.ts:122)"}, "fullDescription": {"text": "`apps/web/src/lib/public-timetable/export.ts:122` calls `GET /skyhub-logo.png` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skyhub-logo.png`\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-a923cacd6ef59b81", "name": "Dangling fetch: POST /auth/login (packages/api/src/client.ts:3091)", "shortDescription": {"text": "Dangling fetch: POST /auth/login (packages/api/src/client.ts:3091)"}, "fullDescription": {"text": "`packages/api/src/client.ts:3091` calls `POST /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/login`\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-326fb4c1abf2b3db", "name": "Dangling fetch: POST /auth/mfa-verify (packages/api/src/client.ts:3098)", "shortDescription": {"text": "Dangling fetch: POST /auth/mfa-verify (packages/api/src/client.ts:3098)"}, "fullDescription": {"text": "`packages/api/src/client.ts:3098` calls `POST /auth/mfa-verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/mfa-verify`\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-2db3ba4d2b2fd7b3", "name": "Dangling fetch: POST /auth/refresh (packages/api/src/client.ts:3104)", "shortDescription": {"text": "Dangling fetch: POST /auth/refresh (packages/api/src/client.ts:3104)"}, "fullDescription": {"text": "`packages/api/src/client.ts:3104` calls `POST /auth/refresh` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/refresh`\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-a168df5d1b3b847c", "name": "Dangling fetch: POST /users/me/mfa/verify (packages/api/src/client.ts:3112)", "shortDescription": {"text": "Dangling fetch: POST /users/me/mfa/verify (packages/api/src/client.ts:3112)"}, "fullDescription": {"text": "`packages/api/src/client.ts:3112` calls `POST /users/me/mfa/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/me/mfa/verify`\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-a31f59db05746d66", "name": "Dangling fetch: POST /users/me/mfa/disable (packages/api/src/client.ts:3117)", "shortDescription": {"text": "Dangling fetch: POST /users/me/mfa/disable (packages/api/src/client.ts:3117)"}, "fullDescription": {"text": "`packages/api/src/client.ts:3117` calls `POST /users/me/mfa/disable` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/me/mfa/disable`\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-f760ac52db2d664d", "name": "Dangling fetch: POST /auth/set-password (packages/api/src/client.ts:3127)", "shortDescription": {"text": "Dangling fetch: POST /auth/set-password (packages/api/src/client.ts:3127)"}, "fullDescription": {"text": "`packages/api/src/client.ts:3127` calls `POST /auth/set-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/set-password`\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-3b78bb28ec9b96ec", "name": "Dangling fetch: POST /auth/forgot-password (packages/api/src/client.ts:3133)", "shortDescription": {"text": "Dangling fetch: POST /auth/forgot-password (packages/api/src/client.ts:3133)"}, "fullDescription": {"text": "`packages/api/src/client.ts:3133` calls `POST /auth/forgot-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/forgot-password`\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-5387ca94fbc423a4", "name": "Dangling fetch: POST /auth/reset-password (packages/api/src/client.ts:3139)", "shortDescription": {"text": "Dangling fetch: POST /auth/reset-password (packages/api/src/client.ts:3139)"}, "fullDescription": {"text": "`packages/api/src/client.ts:3139` calls `POST /auth/reset-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/reset-password`\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-af448042860a95e6", "name": "Dangling fetch: POST /tail-optimizer/${encodeURIComponent(runId)}/apply (packages/api/src/client.ts:4197)", "shortDescription": {"text": "Dangling fetch: POST /tail-optimizer/${encodeURIComponent(runId)}/apply (packages/api/src/client.ts:4197)"}, "fullDescription": {"text": "`packages/api/src/client.ts:4197` calls `POST /tail-optimizer/${encodeURIComponent(runId)}/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tail-optimizer/<p>/apply`\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-1eb319516c32e463", "name": "Dangling fetch: POST /tail-optimizer/${encodeURIComponent(runId)}/discard (packages/api/src/client.ts:4199)", "shortDescription": {"text": "Dangling fetch: POST /tail-optimizer/${encodeURIComponent(runId)}/discard (packages/api/src/client.ts:4199)"}, "fullDescription": {"text": "`packages/api/src/client.ts:4199` calls `POST /tail-optimizer/${encodeURIComponent(runId)}/discard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tail-optimizer/<p>/discard`\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-274eb08b0c9f9134", "name": "Dangling fetch: PUT /reports/emissions-plans/${encodeURIComponent(id)} (packages/api/src/client.ts:4217)", "shortDescription": {"text": "Dangling fetch: PUT /reports/emissions-plans/${encodeURIComponent(id)} (packages/api/src/client.ts:4217)"}, "fullDescription": {"text": "`packages/api/src/client.ts:4217` calls `PUT /reports/emissions-plans/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/emissions-plans/<p>`\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-59f9e64d4d904843", "name": "Dangling fetch: GET /reports/daily-ops-remarks/${encodeURIComponent(date)} (packages/api/src/client.ts:4254)", "shortDescription": {"text": "Dangling fetch: GET /reports/daily-ops-remarks/${encodeURIComponent(date)} (packages/api/src/client.ts:4254)"}, "fullDescription": {"text": "`packages/api/src/client.ts:4254` calls `GET /reports/daily-ops-remarks/${encodeURIComponent(date)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/daily-ops-remarks/<p>`\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-4614b37c9a2da4e5", "name": "Dangling fetch: PUT /reports/daily-ops-remarks/${encodeURIComponent(date)} (packages/api/src/client.ts:4256)", "shortDescription": {"text": "Dangling fetch: PUT /reports/daily-ops-remarks/${encodeURIComponent(date)} (packages/api/src/client.ts:4256)"}, "fullDescription": {"text": "`packages/api/src/client.ts:4256` calls `PUT /reports/daily-ops-remarks/${encodeURIComponent(date)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/daily-ops-remarks/<p>`\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-244a04bdeedc7434", "name": "Dangling fetch: POST /network/scenarios/${encodeURIComponent(scenarioId)}/apply (packages/api/src/client.ts:4411)", "shortDescription": {"text": "Dangling fetch: POST /network/scenarios/${encodeURIComponent(scenarioId)}/apply (packages/api/src/client.ts:4411)"}, "fullDescription": {"text": "`packages/api/src/client.ts:4411` calls `POST /network/scenarios/${encodeURIComponent(scenarioId)}/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/network/scenarios/<p>/apply`\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-428c00915dc6c7ae", "name": "Dangling fetch: POST /network/scenarios/audit/${encodeURIComponent(auditId)}/rollback (packages/api/src/client.ts:4430)", "shortDescription": {"text": "Dangling fetch: POST /network/scenarios/audit/${encodeURIComponent(auditId)}/rollback (packages/api/src/client.ts:4430)"}, "fullDescription": {"text": "`packages/api/src/client.ts:4430` calls `POST /network/scenarios/audit/${encodeURIComponent(auditId)}/rollback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/network/scenarios/audit/<p>/rollback`\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-d6e97f727f4156a2", "name": "Dangling fetch: PATCH /charter/contracts/${id} (packages/api/src/client.ts:5877)", "shortDescription": {"text": "Dangling fetch: PATCH /charter/contracts/${id} (packages/api/src/client.ts:5877)"}, "fullDescription": {"text": "`packages/api/src/client.ts:5877` calls `PATCH /charter/contracts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/charter/contracts/<p>`\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-184b34768791b90a", "name": "Dangling fetch: PATCH /charter/contracts/${id}/status (packages/api/src/client.ts:5883)", "shortDescription": {"text": "Dangling fetch: PATCH /charter/contracts/${id}/status (packages/api/src/client.ts:5883)"}, "fullDescription": {"text": "`packages/api/src/client.ts:5883` calls `PATCH /charter/contracts/${id}/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/charter/contracts/<p>/status`\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-770237e04db9a964", "name": "Dangling fetch: DELETE /charter/contracts/${id} (packages/api/src/client.ts:5889)", "shortDescription": {"text": "Dangling fetch: DELETE /charter/contracts/${id} (packages/api/src/client.ts:5889)"}, "fullDescription": {"text": "`packages/api/src/client.ts:5889` calls `DELETE /charter/contracts/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/charter/contracts/<p>`\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-8ce223271985da0a", "name": "Dangling fetch: DELETE /charter/flights/${id} (packages/api/src/client.ts:5902)", "shortDescription": {"text": "Dangling fetch: DELETE /charter/flights/${id} (packages/api/src/client.ts:5902)"}, "fullDescription": {"text": "`packages/api/src/client.ts:5902` calls `DELETE /charter/flights/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/charter/flights/<p>`\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-e579e9b7a90131c2", "name": "Dangling fetch: GET /weather/alerts${qs} (packages/api/src/client.ts:7131)", "shortDescription": {"text": "Dangling fetch: GET /weather/alerts${qs} (packages/api/src/client.ts:7131)"}, "fullDescription": {"text": "`packages/api/src/client.ts:7131` calls `GET /weather/alerts${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/weather/alerts/<p>`\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-13d72f9ca93834b2", "name": "Dangling fetch: GET /crew/${encodeURIComponent(crewId)}/document-folders${qs} (packages/api/src/client.ts:7315)", "shortDescription": {"text": "Dangling fetch: GET /crew/${encodeURIComponent(crewId)}/document-folders${qs} (packages/api/src/client.ts:7315)"}, "fullDescription": {"text": "`packages/api/src/client.ts:7315` calls `GET /crew/${encodeURIComponent(crewId)}/document-folders${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew/<p>/document-folders/<p>`\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-55d94a0172428146", "name": "Dangling fetch: DELETE /pairings/${encodeURIComponent(id)}${qs} (packages/api/src/client.ts:7525)", "shortDescription": {"text": "Dangling fetch: DELETE /pairings/${encodeURIComponent(id)}${qs} (packages/api/src/client.ts:7525)"}, "fullDescription": {"text": "`packages/api/src/client.ts:7525` calls `DELETE /pairings/${encodeURIComponent(id)}${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/pairings/<p>/<p>`\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-04b814ca859f79c6", "name": "Dangling fetch: GET /crew-schedule/publications${suffix} (packages/api/src/client.ts:8350)", "shortDescription": {"text": "Dangling fetch: GET /crew-schedule/publications${suffix} (packages/api/src/client.ts:8350)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8350` calls `GET /crew-schedule/publications${suffix}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-schedule/publications/<p>`\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-ed2975120415e440", "name": "Dangling fetch: PATCH /crew-schedule/temp-bases/${encodeURIComponent(id)}${qs} (packages/api/src/client.ts:8390)", "shortDescription": {"text": "Dangling fetch: PATCH /crew-schedule/temp-bases/${encodeURIComponent(id)}${qs} (packages/api/src/client.ts:8390)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8390` calls `PATCH /crew-schedule/temp-bases/${encodeURIComponent(id)}${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/crew-schedule/temp-bases/<p>/<p>`\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-d575ad7eaff4b9e8", "name": "Dangling fetch: GET /api/v1/ground-ops/turnarounds/${encodeURIComponent(id)} (packages/api/src/client.ts:8446)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/turnarounds/${encodeURIComponent(id)} (packages/api/src/client.ts:8446)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8446` calls `GET /api/v1/ground-ops/turnarounds/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/turnarounds/<p>`\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-742ba99b23a69832", "name": "Dangling fetch: POST /api/v1/ground-ops/turnarounds (packages/api/src/client.ts:8448)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/ground-ops/turnarounds (packages/api/src/client.ts:8448)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8448` calls `POST /api/v1/ground-ops/turnarounds` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/turnarounds`\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-e753517e9ca1a90c", "name": "Dangling fetch: POST /api/v1/ground-ops/turnarounds/backfill (packages/api/src/client.ts:8453)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/ground-ops/turnarounds/backfill (packages/api/src/client.ts:8453)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8453` calls `POST /api/v1/ground-ops/turnarounds/backfill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/turnarounds/backfill`\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-d751f23e8e9032bf", "name": "Dangling fetch: PATCH /api/v1/ground-ops/turnarounds/${encodeURIComponent(id)}/services/${encodeURIComponent(serviceType", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/ground-ops/turnarounds/${encodeURIComponent(id)}/services/${encodeURIComponent(serviceType)} (packages/api/src/client.ts:8466)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8466` calls `PATCH /api/v1/ground-ops/turnarounds/${encodeURIComponent(id)}/services/${encodeURIComponent(serviceType)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/turnarounds/<p>/services/<p>`\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-04d3e200d20a7271", "name": "Dangling fetch: GET /api/v1/ground-ops/handlers?${params.toString()} (packages/api/src/client.ts:8495)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/handlers?${params.toString()} (packages/api/src/client.ts:8495)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8495` calls `GET /api/v1/ground-ops/handlers?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/handlers`\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-85f6efef5d7bbd80", "name": "Dangling fetch: GET /api/v1/ground-ops/deviations/${encodeURIComponent(id)} (packages/api/src/client.ts:8522)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/deviations/${encodeURIComponent(id)} (packages/api/src/client.ts:8522)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8522` calls `GET /api/v1/ground-ops/deviations/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/deviations/<p>`\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-138d16f16fe74ca7", "name": "Dangling fetch: PATCH /api/v1/ground-ops/deviations/${encodeURIComponent(id)} (packages/api/src/client.ts:8527)", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/ground-ops/deviations/${encodeURIComponent(id)} (packages/api/src/client.ts:8527)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8527` calls `PATCH /api/v1/ground-ops/deviations/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/deviations/<p>`\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-05cff17c5d8c77ef", "name": "Dangling fetch: GET /api/v1/ground-ops/config/templates (packages/api/src/client.ts:8533)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/config/templates (packages/api/src/client.ts:8533)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8533` calls `GET /api/v1/ground-ops/config/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/templates`\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-d50c795f1f8445a7", "name": "Dangling fetch: POST /api/v1/ground-ops/config/templates (packages/api/src/client.ts:8535)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/ground-ops/config/templates (packages/api/src/client.ts:8535)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8535` calls `POST /api/v1/ground-ops/config/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/templates`\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-d382bb01b7ecb989", "name": "Dangling fetch: PUT /api/v1/ground-ops/config/templates/${encodeURIComponent(id)} (packages/api/src/client.ts:8540)", "shortDescription": {"text": "Dangling fetch: PUT /api/v1/ground-ops/config/templates/${encodeURIComponent(id)} (packages/api/src/client.ts:8540)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8540` calls `PUT /api/v1/ground-ops/config/templates/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/templates/<p>`\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-41050b287fcbce9b", "name": "Dangling fetch: DELETE /api/v1/ground-ops/config/templates/${encodeURIComponent(id)} (packages/api/src/client.ts:8545)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/ground-ops/config/templates/${encodeURIComponent(id)} (packages/api/src/client.ts:8545)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8545` calls `DELETE /api/v1/ground-ops/config/templates/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/templates/<p>`\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-518038ac87426bbc", "name": "Dangling fetch: GET /api/v1/ground-ops/config/services (packages/api/src/client.ts:8548)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/config/services (packages/api/src/client.ts:8548)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8548` calls `GET /api/v1/ground-ops/config/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/services`\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-07d943d6356cdfa2", "name": "Dangling fetch: POST /api/v1/ground-ops/config/services (packages/api/src/client.ts:8550)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/ground-ops/config/services (packages/api/src/client.ts:8550)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8550` calls `POST /api/v1/ground-ops/config/services` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/services`\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-b3c01af9d8421128", "name": "Dangling fetch: PUT /api/v1/ground-ops/config/services/${encodeURIComponent(id)} (packages/api/src/client.ts:8555)", "shortDescription": {"text": "Dangling fetch: PUT /api/v1/ground-ops/config/services/${encodeURIComponent(id)} (packages/api/src/client.ts:8555)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8555` calls `PUT /api/v1/ground-ops/config/services/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/services/<p>`\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-0c382276e37c08c8", "name": "Dangling fetch: GET /api/v1/ground-ops/config/sla-contracts (packages/api/src/client.ts:8559)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/config/sla-contracts (packages/api/src/client.ts:8559)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8559` calls `GET /api/v1/ground-ops/config/sla-contracts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/sla-contracts`\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-5090d45079126ba4", "name": "Dangling fetch: POST /api/v1/ground-ops/config/sla-contracts (packages/api/src/client.ts:8561)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/ground-ops/config/sla-contracts (packages/api/src/client.ts:8561)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8561` calls `POST /api/v1/ground-ops/config/sla-contracts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/sla-contracts`\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-f9cebd7d615b822d", "name": "Dangling fetch: PUT /api/v1/ground-ops/config/sla-contracts/${encodeURIComponent(id)} (packages/api/src/client.ts:8566)", "shortDescription": {"text": "Dangling fetch: PUT /api/v1/ground-ops/config/sla-contracts/${encodeURIComponent(id)} (packages/api/src/client.ts:8566)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8566` calls `PUT /api/v1/ground-ops/config/sla-contracts/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/sla-contracts/<p>`\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-1d148fd4b55de4e3", "name": "Dangling fetch: GET /api/v1/ground-ops/config/alert-rules (packages/api/src/client.ts:8570)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/config/alert-rules (packages/api/src/client.ts:8570)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8570` calls `GET /api/v1/ground-ops/config/alert-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/alert-rules`\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-e7eafa434696aaf7", "name": "Dangling fetch: PUT /api/v1/ground-ops/config/alert-rules (packages/api/src/client.ts:8572)", "shortDescription": {"text": "Dangling fetch: PUT /api/v1/ground-ops/config/alert-rules (packages/api/src/client.ts:8572)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8572` calls `PUT /api/v1/ground-ops/config/alert-rules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/config/alert-rules`\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-0bf2eae5d86b19d8", "name": "Dangling fetch: GET /api/v1/ground-ops/handling-agents${tail} (packages/api/src/client.ts:8587)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/handling-agents${tail} (packages/api/src/client.ts:8587)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8587` calls `GET /api/v1/ground-ops/handling-agents${tail}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/handling-agents/<p>`\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-c29e40ecded895d4", "name": "Dangling fetch: POST /api/v1/ground-ops/handling-agents (packages/api/src/client.ts:8590)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/ground-ops/handling-agents (packages/api/src/client.ts:8590)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8590` calls `POST /api/v1/ground-ops/handling-agents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/handling-agents`\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-827f016b34e14233", "name": "Dangling fetch: PATCH /api/v1/ground-ops/handling-agents/${encodeURIComponent(id)} (packages/api/src/client.ts:8595)", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/ground-ops/handling-agents/${encodeURIComponent(id)} (packages/api/src/client.ts:8595)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8595` calls `PATCH /api/v1/ground-ops/handling-agents/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/handling-agents/<p>`\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-487fd3e1c31f3855", "name": "Dangling fetch: DELETE /api/v1/ground-ops/handling-agents/${encodeURIComponent(id)} (packages/api/src/client.ts:8600)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/ground-ops/handling-agents/${encodeURIComponent(id)} (packages/api/src/client.ts:8600)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8600` calls `DELETE /api/v1/ground-ops/handling-agents/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/handling-agents/<p>`\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-5aa9b900601f3da4", "name": "Dangling fetch: GET /api/v1/ground-ops/flightview?${params.toString()} (packages/api/src/client.ts:8613)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/flightview?${params.toString()} (packages/api/src/client.ts:8613)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8613` calls `GET /api/v1/ground-ops/flightview?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/flightview`\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-579ee8d5a2068d77", "name": "Dangling fetch: POST /api/v1/ground-ops/flight-documents (packages/api/src/client.ts:8622)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/ground-ops/flight-documents (packages/api/src/client.ts:8622)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8622` calls `POST /api/v1/ground-ops/flight-documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/flight-documents`\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-5ff0ad00a0c18acf", "name": "Dangling fetch: DELETE /api/v1/ground-ops/flight-documents/${encodeURIComponent(id)} (packages/api/src/client.ts:8627)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/ground-ops/flight-documents/${encodeURIComponent(id)} (packages/api/src/client.ts:8627)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8627` calls `DELETE /api/v1/ground-ops/flight-documents/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/flight-documents/<p>`\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-2171264b17a005ee", "name": "Dangling fetch: GET /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8642)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8642)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8642` calls `GET /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/vehicle-dispatch/<p>`\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-b6db9cb96c9f0dc9", "name": "Dangling fetch: POST /api/v1/ground-ops/vehicle-dispatch (packages/api/src/client.ts:8644)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/ground-ops/vehicle-dispatch (packages/api/src/client.ts:8644)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8644` calls `POST /api/v1/ground-ops/vehicle-dispatch` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/vehicle-dispatch`\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-d106d15763375425", "name": "Dangling fetch: PATCH /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8649)", "shortDescription": {"text": "Dangling fetch: PATCH /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8649)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8649` calls `PATCH /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/vehicle-dispatch/<p>`\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-83d3fc08befc09eb", "name": "Dangling fetch: DELETE /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8654)", "shortDescription": {"text": "Dangling fetch: DELETE /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8654)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8654` calls `DELETE /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/ground-ops/vehicle-dispatch/<p>`\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-f8dfda0a3c0f9bcb", "name": "Dangling fetch: GET /v1/duty-swap/policy${qs} (packages/api/src/client.ts:8689)", "shortDescription": {"text": "Dangling fetch: GET /v1/duty-swap/policy${qs} (packages/api/src/client.ts:8689)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8689` calls `GET /v1/duty-swap/policy${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/duty-swap/policy/<p>`\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-53dd9255402804d7", "name": "Dangling fetch: PUT /v1/duty-swap/policy${qs} (packages/api/src/client.ts:8693)", "shortDescription": {"text": "Dangling fetch: PUT /v1/duty-swap/policy${qs} (packages/api/src/client.ts:8693)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8693` calls `PUT /v1/duty-swap/policy${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/duty-swap/policy/<p>`\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-69218712baf7d84e", "name": "Dangling fetch: GET /v1/open-flights${qs} (packages/api/src/client.ts:8768)", "shortDescription": {"text": "Dangling fetch: GET /v1/open-flights${qs} (packages/api/src/client.ts:8768)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8768` calls `GET /v1/open-flights${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/open-flights/<p>`\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-55489471c1afb94a", "name": "Dangling fetch: PUT /operator-ai-config/prompts/${encodeURIComponent(moduleKey)} (packages/api/src/client.ts:8844)", "shortDescription": {"text": "Dangling fetch: PUT /operator-ai-config/prompts/${encodeURIComponent(moduleKey)} (packages/api/src/client.ts:8844)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8844` calls `PUT /operator-ai-config/prompts/${encodeURIComponent(moduleKey)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/operator-ai-config/prompts/<p>`\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-343f69eb8c7211d9", "name": "Dangling fetch: POST /operator-ai-config/prompts/${encodeURIComponent(moduleKey)}/rollback (packages/api/src/client.ts:8", "shortDescription": {"text": "Dangling fetch: POST /operator-ai-config/prompts/${encodeURIComponent(moduleKey)}/rollback (packages/api/src/client.ts:8849)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8849` calls `POST /operator-ai-config/prompts/${encodeURIComponent(moduleKey)}/rollback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/operator-ai-config/prompts/<p>/rollback`\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-3c953ddf236dc5c8", "name": "Dangling fetch: GET /operator-ai-config/models?providerId=${encodeURIComponent(providerId)} (packages/api/src/client.ts:", "shortDescription": {"text": "Dangling fetch: GET /operator-ai-config/models?providerId=${encodeURIComponent(providerId)} (packages/api/src/client.ts:8859)"}, "fullDescription": {"text": "`packages/api/src/client.ts:8859` calls `GET /operator-ai-config/models?providerId=${encodeURIComponent(providerId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/operator-ai-config/models`\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-806876f9f69316d1", "name": "Dangling fetch: DELETE /operator-bulletins/${encodeURIComponent(id)} (packages/api/src/client.ts:9229)", "shortDescription": {"text": "Dangling fetch: DELETE /operator-bulletins/${encodeURIComponent(id)} (packages/api/src/client.ts:9229)"}, "fullDescription": {"text": "`packages/api/src/client.ts:9229` calls `DELETE /operator-bulletins/${encodeURIComponent(id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/operator-bulletins/<p>`\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-1326c1ce21c8422f", "name": "Dangling fetch: GET /api/pairing-optimizer/history${qs} (packages/api/src/client.ts:9284)", "shortDescription": {"text": "Dangling fetch: GET /api/pairing-optimizer/history${qs} (packages/api/src/client.ts:9284)"}, "fullDescription": {"text": "`packages/api/src/client.ts:9284` calls `GET /api/pairing-optimizer/history${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/pairing-optimizer/history/<p>`\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-bc0da511478c2245", "name": "Dangling fetch: POST /api/solver/stream (packages/logic/src/utils/solver-stream.ts:61)", "shortDescription": {"text": "Dangling fetch: POST /api/solver/stream (packages/logic/src/utils/solver-stream.ts:61)"}, "fullDescription": {"text": "`packages/logic/src/utils/solver-stream.ts:61` calls `POST /api/solver/stream` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/solver/stream`\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-95a05becb250d32b", "name": "Dangling fetch: POST https://api.openai.com/v1/embeddings (server/scripts/verify-openai-key.ts:92)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/embeddings (server/scripts/verify-openai-key.ts:92)"}, "fullDescription": {"text": "`server/scripts/verify-openai-key.ts:92` calls `POST https://api.openai.com/v1/embeddings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/embeddings`\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-282f1a939bbe2a2c", "name": "Dangling fetch: GET http://localhost:3002/flights?from=${from}&to=${to} (server/src/probe-flights.ts:16)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:3002/flights?from=${from}&to=${to} (server/src/probe-flights.ts:16)"}, "fullDescription": {"text": "`server/src/probe-flights.ts:16` calls `GET http://localhost:3002/flights?from=${from}&to=${to}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:3002/flights`\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-1b84179b939cb841", "name": "Dangling fetch: GET https://airportdb.io/api/v1/airport/${code}?apiToken=free (server/src/routes/reference.ts:289)", "shortDescription": {"text": "Dangling fetch: GET https://airportdb.io/api/v1/airport/${code}?apiToken=free (server/src/routes/reference.ts:289)"}, "fullDescription": {"text": "`server/src/routes/reference.ts:289` calls `GET https://airportdb.io/api/v1/airport/${code}?apiToken=free` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/airportdb.io/api/v1/airport/<p>`\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-81ffd341d80f8742", "name": "Dangling fetch: GET https://raw.githubusercontent.com/mwgg/Airports/master/airports.json (server/src/routes/reference.ts", "shortDescription": {"text": "Dangling fetch: GET https://raw.githubusercontent.com/mwgg/Airports/master/airports.json (server/src/routes/reference.ts:302)"}, "fullDescription": {"text": "`server/src/routes/reference.ts:302` calls `GET https://raw.githubusercontent.com/mwgg/Airports/master/airports.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/raw.githubusercontent.com/mwgg/airports/master/airports.json`\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-023ff3f06fe71d0d", "name": "Dangling fetch: POST https://api.resend.com/emails (server/src/services/email.ts:35)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (server/src/services/email.ts:35)"}, "fullDescription": {"text": "`server/src/services/email.ts:35` calls `POST https://api.resend.com/emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\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-879cbdd113978768", "name": "Dangling fetch: POST https://api.openai.com/v1/embeddings (server/src/services/operator-ai-scope/embedding-provider.ts:6", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/embeddings (server/src/services/operator-ai-scope/embedding-provider.ts:66)"}, "fullDescription": {"text": "`server/src/services/operator-ai-scope/embedding-provider.ts:66` calls `POST https://api.openai.com/v1/embeddings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.openai.com/v1/embeddings`\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-43b7576a848f9972", "name": "Dangling fetch: GET https://api.anthropic.com/v1/models?limit=100 (server/src/services/skyai/model-catalog.ts:83)", "shortDescription": {"text": "Dangling fetch: GET https://api.anthropic.com/v1/models?limit=100 (server/src/services/skyai/model-catalog.ts:83)"}, "fullDescription": {"text": "`server/src/services/skyai/model-catalog.ts:83` calls `GET https://api.anthropic.com/v1/models?limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.anthropic.com/v1/models`\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-b506b62a4f7dde66", "name": "Dangling fetch: GET https://generativelanguage.googleapis.com/v1beta/models?key=${encodeURIComponent(apiKey)}&pageSize=2", "shortDescription": {"text": "Dangling fetch: GET https://generativelanguage.googleapis.com/v1beta/models?key=${encodeURIComponent(apiKey)}&pageSize=200 (server/src/services/skyai/model-catalog.ts:127)"}, "fullDescription": {"text": "`server/src/services/skyai/model-catalog.ts:127` calls `GET https://generativelanguage.googleapis.com/v1beta/models?key=${encodeURIComponent(apiKey)}&pageSize=200` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/generativelanguage.googleapis.com/v1beta/models`\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-b1c2ba692cc1ae5f", "name": "Unused endpoint: POST /solve", "shortDescription": {"text": "Unused endpoint: POST /solve"}, "fullDescription": {"text": "`services/auto-roster-solver/app/main.py` declares `POST /solve` 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-7da0d707fb94e57a", "name": "Unused endpoint: POST /dry-run-window", "shortDescription": {"text": "Unused endpoint: POST /dry-run-window"}, "fullDescription": {"text": "`services/auto-roster-solver/app/main.py` declares `POST /dry-run-window` 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-95f235fd6ce6304d", "name": "Unused endpoint: POST /evaluate", "shortDescription": {"text": "Unused endpoint: POST /evaluate"}, "fullDescription": {"text": "`services/network-constraint-evaluator/app/main.py` declares `POST /evaluate` 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-25d3af48cd83c9e6", "name": "Unused endpoint: POST /predict", "shortDescription": {"text": "Unused endpoint: POST /predict"}, "fullDescription": {"text": "`services/otp-predictor/app/main.py` declares `POST /predict` 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-2a19e53db5cb839d", "name": "Unused endpoint: POST /predict/batch", "shortDescription": {"text": "Unused endpoint: POST /predict/batch"}, "fullDescription": {"text": "`services/otp-predictor/app/main.py` declares `POST /predict/batch` 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-4b23721bf19f6dc2", "name": "Unused endpoint: POST /train", "shortDescription": {"text": "Unused endpoint: POST /train"}, "fullDescription": {"text": "`services/otp-predictor/app/main.py` declares `POST /train` 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-5ea2e113ff250f5f", "name": "Unused endpoint: POST /forecast", "shortDescription": {"text": "Unused endpoint: POST /forecast"}, "fullDescription": {"text": "`services/demand-forecaster/app/main.py` declares `POST /forecast` 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-a828904a20c32d47", "name": "Unused endpoint: POST /forecast/batch", "shortDescription": {"text": "Unused endpoint: POST /forecast/batch"}, "fullDescription": {"text": "`services/demand-forecaster/app/main.py` declares `POST /forecast/batch` 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-f20aa7735411352b", "name": "Unused endpoint: POST /allocate", "shortDescription": {"text": "Unused endpoint: POST /allocate"}, "fullDescription": {"text": "`services/demand-forecaster/app/main.py` declares `POST /allocate` 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-684f0e83ba7e1558", "name": "Unused endpoint: GET ", "shortDescription": {"text": "Unused endpoint: GET "}, "fullDescription": {"text": "`apps/mobile/src/components/sysadmin/people/people-sidebar.tsx` 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-8dcb6c5adad44dff", "name": "Unused endpoint: GET /weather/alerts", "shortDescription": {"text": "Unused endpoint: GET /weather/alerts"}, "fullDescription": {"text": "`server/src/routes/weather.ts` declares `GET /weather/alerts` 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-ed338e9e2aa2b477", "name": "Unused endpoint: GET /crew-flight-bookings", "shortDescription": {"text": "Unused endpoint: GET /crew-flight-bookings"}, "fullDescription": {"text": "`server/src/routes/crew-flight-bookings.ts` declares `GET /crew-flight-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-68908712b5a00db7", "name": "Unused endpoint: POST /crew-flight-bookings/:id/attachments", "shortDescription": {"text": "Unused endpoint: POST /crew-flight-bookings/:id/attachments"}, "fullDescription": {"text": "`server/src/routes/crew-flight-bookings.ts` declares `POST /crew-flight-bookings/:id/attachments` 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-125a1c875e635444", "name": "Unused endpoint: GET /handlers", "shortDescription": {"text": "Unused endpoint: GET /handlers"}, "fullDescription": {"text": "`server/src/routes/ground-ops-handlers.ts` declares `GET /handlers` 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-35c3410b0d881147", "name": "Unused endpoint: GET /handlers/:id/scorecard", "shortDescription": {"text": "Unused endpoint: GET /handlers/:id/scorecard"}, "fullDescription": {"text": "`server/src/routes/ground-ops-handlers.ts` declares `GET /handlers/:id/scorecard` 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-3e49cd8d8cfc2e37", "name": "Unused endpoint: GET /deviations", "shortDescription": {"text": "Unused endpoint: GET /deviations"}, "fullDescription": {"text": "`server/src/routes/ground-ops-handlers.ts` declares `GET /deviations` 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-457a7e5f1c4ccefc", "name": "Unused endpoint: GET /deviations/:id", "shortDescription": {"text": "Unused endpoint: GET /deviations/:id"}, "fullDescription": {"text": "`server/src/routes/ground-ops-handlers.ts` declares `GET /deviations/: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-ecc8d295163182a6", "name": "Unused endpoint: PATCH /deviations/:id", "shortDescription": {"text": "Unused endpoint: PATCH /deviations/:id"}, "fullDescription": {"text": "`server/src/routes/ground-ops-handlers.ts` declares `PATCH /deviations/: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-1f6daed6458619db", "name": "Unused endpoint: GET /operator-pairing-config", "shortDescription": {"text": "Unused endpoint: GET /operator-pairing-config"}, "fullDescription": {"text": "`server/src/routes/operator-pairing-config.ts` declares `GET /operator-pairing-config` 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-7a7575151186e1f7", "name": "Unused endpoint: POST /ssim/import/flights-batch", "shortDescription": {"text": "Unused endpoint: POST /ssim/import/flights-batch"}, "fullDescription": {"text": "`server/src/routes/ssim-import.ts` declares `POST /ssim/import/flights-batch` 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-e7fa6425aa0d295d", "name": "Unused endpoint: GET /rotations", "shortDescription": {"text": "Unused endpoint: GET /rotations"}, "fullDescription": {"text": "`server/src/routes/rotations.ts` declares `GET /rotations` 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-42a584b596c6fdac", "name": "Unused endpoint: POST /rotations/auto-generate", "shortDescription": {"text": "Unused endpoint: POST /rotations/auto-generate"}, "fullDescription": {"text": "`server/src/routes/rotations.ts` declares `POST /rotations/auto-generate` 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-2f61ad8a90bb936f", "name": "Unused endpoint: PATCH /rotations/:id/reorder", "shortDescription": {"text": "Unused endpoint: PATCH /rotations/:id/reorder"}, "fullDescription": {"text": "`server/src/routes/rotations.ts` declares `PATCH /rotations/:id/reorder` 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-84e05486ac15a03c", "name": "Unused endpoint: DELETE /rotations/:id", "shortDescription": {"text": "Unused endpoint: DELETE /rotations/:id"}, "fullDescription": {"text": "`server/src/routes/rotations.ts` declares `DELETE /rotations/: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-024d7aeb80764db4", "name": "Unused endpoint: POST /reports/aircraft-allocation-crew", "shortDescription": {"text": "Unused endpoint: POST /reports/aircraft-allocation-crew"}, "fullDescription": {"text": "`server/src/routes/reports-aircraft-allocation.ts` declares `POST /reports/aircraft-allocation-crew` 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-fc065c56d0e0831b", "name": "Unused endpoint: GET /config/templates", "shortDescription": {"text": "Unused endpoint: GET /config/templates"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `GET /config/templates` 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-d1ab5325f58f05b2", "name": "Unused endpoint: POST /config/templates", "shortDescription": {"text": "Unused endpoint: POST /config/templates"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `POST /config/templates` 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-466f84f0eedaf29f", "name": "Unused endpoint: PUT /config/templates/:id", "shortDescription": {"text": "Unused endpoint: PUT /config/templates/:id"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `PUT /config/templates/: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-a9316018df076d1e", "name": "Unused endpoint: DELETE /config/templates/:id", "shortDescription": {"text": "Unused endpoint: DELETE /config/templates/:id"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `DELETE /config/templates/: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-2971ebfca887d256", "name": "Unused endpoint: GET /config/services", "shortDescription": {"text": "Unused endpoint: GET /config/services"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `GET /config/services` 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-76a2c67f4ee54fac", "name": "Unused endpoint: POST /config/services", "shortDescription": {"text": "Unused endpoint: POST /config/services"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `POST /config/services` 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-9eac259c3270058b", "name": "Unused endpoint: PUT /config/services/:id", "shortDescription": {"text": "Unused endpoint: PUT /config/services/:id"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `PUT /config/services/: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-699ace05cec6757a", "name": "Unused endpoint: GET /config/sla-contracts", "shortDescription": {"text": "Unused endpoint: GET /config/sla-contracts"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `GET /config/sla-contracts` 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-50845be3d7aa4d96", "name": "Unused endpoint: POST /config/sla-contracts", "shortDescription": {"text": "Unused endpoint: POST /config/sla-contracts"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `POST /config/sla-contracts` 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-94013595c713e950", "name": "Unused endpoint: PUT /config/sla-contracts/:id", "shortDescription": {"text": "Unused endpoint: PUT /config/sla-contracts/:id"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `PUT /config/sla-contracts/: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-4a1866c6b38083d2", "name": "Unused endpoint: GET /config/alert-rules", "shortDescription": {"text": "Unused endpoint: GET /config/alert-rules"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `GET /config/alert-rules` 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-145c9da35ae80fe0", "name": "Unused endpoint: PUT /config/alert-rules", "shortDescription": {"text": "Unused endpoint: PUT /config/alert-rules"}, "fullDescription": {"text": "`server/src/routes/ground-ops-config.ts` declares `PUT /config/alert-rules` 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-207607e9e0b87c70", "name": "Unused endpoint: GET /operator-check-in-config", "shortDescription": {"text": "Unused endpoint: GET /operator-check-in-config"}, "fullDescription": {"text": "`server/src/routes/operator-check-in-config.ts` declares `GET /operator-check-in-config` 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-38f2d07f4666efc9", "name": "Unused endpoint: GET /training-courses", "shortDescription": {"text": "Unused endpoint: GET /training-courses"}, "fullDescription": {"text": "`server/src/routes/training-courses.ts` declares `GET /training-courses` 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-893c500c9caa4c4c", "name": "Unused endpoint: GET /api/pairing-optimizer/runs/:runId/stream", "shortDescription": {"text": "Unused endpoint: GET /api/pairing-optimizer/runs/:runId/stream"}, "fullDescription": {"text": "`server/src/routes/pairing-optimizer.ts` declares `GET /api/pairing-optimizer/runs/:runId/stream` 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-080e670737565b5b", "name": "Unused endpoint: GET /api/pairing-optimizer/history", "shortDescription": {"text": "Unused endpoint: GET /api/pairing-optimizer/history"}, "fullDescription": {"text": "`server/src/routes/pairing-optimizer.ts` declares `GET /api/pairing-optimizer/history` 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-20538628458a0ae5", "name": "Unused endpoint: DELETE /api/pairing-optimizer/runs/:runId/pairings", "shortDescription": {"text": "Unused endpoint: DELETE /api/pairing-optimizer/runs/:runId/pairings"}, "fullDescription": {"text": "`server/src/routes/pairing-optimizer.ts` declares `DELETE /api/pairing-optimizer/runs/:runId/pairings` 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-be3f7e4247417b47", "name": "Unused endpoint: GET /api/pairing-optimizer/scenarios/compare", "shortDescription": {"text": "Unused endpoint: GET /api/pairing-optimizer/scenarios/compare"}, "fullDescription": {"text": "`server/src/routes/pairing-optimizer.ts` declares `GET /api/pairing-optimizer/scenarios/compare` 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-12031c263a9214d9", "name": "Unused endpoint: GET /api/pairing-optimizer/queue-state", "shortDescription": {"text": "Unused endpoint: GET /api/pairing-optimizer/queue-state"}, "fullDescription": {"text": "`server/src/routes/pairing-optimizer.ts` declares `GET /api/pairing-optimizer/queue-state` 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-c398fe3e7fa00eb0", "name": "Unused endpoint: GET /instructor-qual-codes", "shortDescription": {"text": "Unused endpoint: GET /instructor-qual-codes"}, "fullDescription": {"text": "`server/src/routes/instructor-qual-codes.ts` declares `GET /instructor-qual-codes` 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-ff4f2c70b15ce16b", "name": "Unused endpoint: POST /movement-messages", "shortDescription": {"text": "Unused endpoint: POST /movement-messages"}, "fullDescription": {"text": "`server/src/routes/movement-messages.ts` declares `POST /movement-messages` 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-2d01aa7245731c1c", "name": "Unused endpoint: POST /movement-messages/inbound", "shortDescription": {"text": "Unused endpoint: POST /movement-messages/inbound"}, "fullDescription": {"text": "`server/src/routes/movement-messages.ts` declares `POST /movement-messages/inbound` 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-1cd15c339b19fc2f", "name": "Unused endpoint: GET /reports/irops-report", "shortDescription": {"text": "Unused endpoint: GET /reports/irops-report"}, "fullDescription": {"text": "`server/src/routes/irops-report.ts` declares `GET /reports/irops-report` 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-b3c93c69564023eb", "name": "Unused endpoint: GET /network/scenarios/audit", "shortDescription": {"text": "Unused endpoint: GET /network/scenarios/audit"}, "fullDescription": {"text": "`server/src/routes/network-scenarios.ts` declares `GET /network/scenarios/audit` 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-d812b6fa4223e423", "name": "Unused endpoint: POST /network-ai/constraints/evaluate", "shortDescription": {"text": "Unused endpoint: POST /network-ai/constraints/evaluate"}, "fullDescription": {"text": "`server/src/routes/network-ai-constraints.ts` declares `POST /network-ai/constraints/evaluate` 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/22413"}, "properties": {"repository": "vivimassa/horizon-v2-mono", "repoUrl": "https://github.com/vivimassa/horizon-v2-mono", "branch": "main"}, "results": [{"ruleId": "scanner-f908af8c2829233a", "level": "note", "message": {"text": "Possibly dead Python function: require_internal_key"}, "properties": {"repobilityId": "d3785a26065c5cf9", "scanner": "scanner-primary", "fingerprint": "f908af8c2829233a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/auto-roster-solver/app/main.py:54"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a5778f68ea8da84a", "level": "note", "message": {"text": "Possibly dead Python function: run_solver"}, "properties": {"repobilityId": "a6f90160bc519908", "scanner": "scanner-primary", "fingerprint": "a5778f68ea8da84a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/auto-roster-solver/app/solver/cp_sat_engine.py:1532"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ed4801e21069a9d5", "level": "note", "message": {"text": "Possibly dead Python function: invalidate"}, "properties": {"repobilityId": "528be77e1d75b539", "scanner": "scanner-primary", "fingerprint": "ed4801e21069a9d5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/auto-roster-solver/app/surrogate/skeleton.py:166"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-404788da5b8b982a", "level": "note", "message": {"text": "Possibly dead Python function: require_internal_key"}, "properties": {"repobilityId": "d3785a26065c5cf9", "scanner": "scanner-primary", "fingerprint": "404788da5b8b982a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/network-constraint-evaluator/app/main.py:47"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eef31fb605759199", "level": "note", "message": {"text": "Possibly dead Python function: to_minutes"}, "properties": {"repobilityId": "1b5f71577ad2152e", "scanner": "scanner-primary", "fingerprint": "eef31fb605759199", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/network-constraint-evaluator/app/solver/constraints.py:59"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4f2c543aff15039f", "level": "note", "message": {"text": "Possibly dead Python function: require_internal_key"}, "properties": {"repobilityId": "d3785a26065c5cf9", "scanner": "scanner-primary", "fingerprint": "4f2c543aff15039f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/recovery-solver/app/main.py:39"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e471ccb27b385d9d", "level": "note", "message": {"text": "Possibly dead Python function: build_aircraft_network"}, "properties": {"repobilityId": "b224734dcaa57d2a", "scanner": "scanner-primary", "fingerprint": "e471ccb27b385d9d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/recovery-solver/app/solver/flight_graph.py:70"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-797fd3a9b06f978b", "level": "note", "message": {"text": "Possibly dead Python function: require_internal_key"}, "properties": {"repobilityId": "d3785a26065c5cf9", "scanner": "scanner-primary", "fingerprint": "797fd3a9b06f978b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/otp-predictor/app/main.py:65"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-97a164d82d1aabb1", "level": "note", "message": {"text": "Possibly dead Python function: feature_column_names"}, "properties": {"repobilityId": "3e6271c1d6e5a8ff", "scanner": "scanner-primary", "fingerprint": "97a164d82d1aabb1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/otp-predictor/app/predictor/features.py:105"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f726b67a736ea021", "level": "note", "message": {"text": "Possibly dead Python function: categorical_indices"}, "properties": {"repobilityId": "a256b8195ad47246", "scanner": "scanner-primary", "fingerprint": "f726b67a736ea021", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/otp-predictor/app/predictor/features.py:109"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e562cffacd12dad8", "level": "note", "message": {"text": "Possibly dead Python function: require_internal_key"}, "properties": {"repobilityId": "d3785a26065c5cf9", "scanner": "scanner-primary", "fingerprint": "e562cffacd12dad8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/pairing-optimizer/app/main.py:52"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f966c4ff23a39a53", "level": "note", "message": {"text": "Possibly dead Python function: covered_flight_ids"}, "properties": {"repobilityId": "5dcade3f872dc169", "scanner": "scanner-primary", "fingerprint": "f966c4ff23a39a53", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/pairing-optimizer/app/solver/fdtl_legality.py:206"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1229b9fc20f261b7", "level": "note", "message": {"text": "Possibly dead Python function: require_internal_key"}, "properties": {"repobilityId": "d3785a26065c5cf9", "scanner": "scanner-primary", "fingerprint": "1229b9fc20f261b7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/demand-forecaster/app/main.py:71"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a08ad08b3fe74e45", "level": "note", "message": {"text": "Possibly dead Python function: feature_column_names"}, "properties": {"repobilityId": "3e6271c1d6e5a8ff", "scanner": "scanner-primary", "fingerprint": "a08ad08b3fe74e45", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/demand-forecaster/app/forecaster/features.py:193"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ecc063cb2364851a", "level": "note", "message": {"text": "Possibly dead Python function: categorical_indices"}, "properties": {"repobilityId": "a256b8195ad47246", "scanner": "scanner-primary", "fingerprint": "ecc063cb2364851a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/demand-forecaster/app/forecaster/features.py:197"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9041ed99b0cd83fc", "level": "note", "message": {"text": "Possibly dead Python function: piecewise_linearise"}, "properties": {"repobilityId": "9829387cc06b89d8", "scanner": "scanner-primary", "fingerprint": "9041ed99b0cd83fc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/demand-forecaster/app/allocator/scurve.py:178"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d348dc2a2248b15e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile/utils/api-url.ts:38"}, "properties": {"repobilityId": "59b2c5df9aed2b35", "scanner": "scanner-primary", "fingerprint": "d348dc2a2248b15e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6320b33e8ebc0095", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/mobile/app/login.tsx:177"}, "properties": {"repobilityId": "42202f81b92e9f7d", "scanner": "scanner-primary", "fingerprint": "6320b33e8ebc0095", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6af203cd91112727", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/wallpaper-bg.tsx:119"}, "properties": {"repobilityId": "e792b4a9a709cbc6", "scanner": "scanner-primary", "fingerprint": "6af203cd91112727", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ef5bf581337b6dfe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/UserMenu.tsx:183"}, "properties": {"repobilityId": "f1052b00a0121d3c", "scanner": "scanner-primary", "fingerprint": "ef5bf581337b6dfe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-97328caf6559d00f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/settings/ProfileHero.tsx:73"}, "properties": {"repobilityId": "55cc0f74dd84c5bd", "scanner": "scanner-primary", "fingerprint": "97328caf6559d00f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bceb102b4985dec6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/settings/profile/security-card.tsx:50"}, "properties": {"repobilityId": "2b00322bd4ae9852", "scanner": "scanner-primary", "fingerprint": "bceb102b4985dec6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f5be45904ef49dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/user-detail.tsx:96"}, "properties": {"repobilityId": "a4f3a892a5060e53", "scanner": "scanner-primary", "fingerprint": "6f5be45904ef49dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-164a1c19281e58ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/user-list.tsx:184"}, "properties": {"repobilityId": "e8584354d68c91b0", "scanner": "scanner-primary", "fingerprint": "164a1c19281e58ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-48842d89ccae8993", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/users/tabs/security-tab.tsx:367"}, "properties": {"repobilityId": "f6f73851057764c9", "scanner": "scanner-primary", "fingerprint": "48842d89ccae8993", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70ec2ebddddcaf9f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/roles/permission-tree.tsx:243"}, "properties": {"repobilityId": "1e5fdca58e82b3f1", "scanner": "scanner-primary", "fingerprint": "70ec2ebddddcaf9f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-85986d012b4f9424", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/roles/role-detail.tsx:76"}, "properties": {"repobilityId": "58b843a5f7e3aca4", "scanner": "scanner-primary", "fingerprint": "85986d012b4f9424", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fbc63d9ad71381d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licensing-changelog.tsx:120"}, "properties": {"repobilityId": "41d6b0c4bd151f22", "scanner": "scanner-primary", "fingerprint": "0fbc63d9ad71381d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-691a4ac69a29ab89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licensing-proposals.tsx:735"}, "properties": {"repobilityId": "720a505481b5746b", "scanner": "scanner-primary", "fingerprint": "691a4ac69a29ab89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70da2a4118b7bd7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/operator-licensing-shell.tsx:1071"}, "properties": {"repobilityId": "c2736e6e1cab0de0", "scanner": "scanner-primary", "fingerprint": "70da2a4118b7bd7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f7c249be0a6b7616", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/price-book-editor.tsx:111"}, "properties": {"repobilityId": "32a368505c50ed7a", "scanner": "scanner-primary", "fingerprint": "f7c249be0a6b7616", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a3520df0eae8df5c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/capacity-panel.tsx:197"}, "properties": {"repobilityId": "52501922a72ce1a6", "scanner": "scanner-primary", "fingerprint": "a3520df0eae8df5c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-be740268ee4f8147", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/controls.tsx:62"}, "properties": {"repobilityId": "13709560badb2d3e", "scanner": "scanner-primary", "fingerprint": "be740268ee4f8147", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f9220ada01a957c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/finance/rate-card-editor.tsx:237"}, "properties": {"repobilityId": "54b8baeb898c388c", "scanner": "scanner-primary", "fingerprint": "f9220ada01a957c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e60314e0cd789722", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/audit-panel.tsx:104"}, "properties": {"repobilityId": "e2670216a1ff98ed", "scanner": "scanner-primary", "fingerprint": "e60314e0cd789722", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f8034579c32b3646", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/payments-panel.tsx:134"}, "properties": {"repobilityId": "72819a628aef1f51", "scanner": "scanner-primary", "fingerprint": "f8034579c32b3646", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f3e5ff40546e9af1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/overview-panel.tsx:112"}, "properties": {"repobilityId": "03b479305ade0e04", "scanner": "scanner-primary", "fingerprint": "f3e5ff40546e9af1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14f66f3d11d2c727", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/editor-modules-panel.tsx:89"}, "properties": {"repobilityId": "9df9689f0789be47", "scanner": "scanner-primary", "fingerprint": "14f66f3d11d2c727", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-05507936b3cfdb9f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/operator-licensing/invoices/invoices-table-panel.tsx:265"}, "properties": {"repobilityId": "a97c3c5977a0d801", "scanner": "scanner-primary", "fingerprint": "05507936b3cfdb9f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cdbc8e996decbdb1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/access-rights/skyai-access-matrix.tsx:213"}, "properties": {"repobilityId": "b2ed648cfd6431d1", "scanner": "scanner-primary", "fingerprint": "cdbc8e996decbdb1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-031c41be09ebc6d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/access-rights/access-sidebar.tsx:99"}, "properties": {"repobilityId": "f27d7c35d33e0f78", "scanner": "scanner-primary", "fingerprint": "031c41be09ebc6d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2eae8b9e23c29a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/department-detail.tsx:247"}, "properties": {"repobilityId": "c2428e926fd287c5", "scanner": "scanner-primary", "fingerprint": "f2eae8b9e23c29a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8beb1938684e4a55", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/people-sidebar.tsx:202"}, "properties": {"repobilityId": "df93431e5a3c8b30", "scanner": "scanner-primary", "fingerprint": "8beb1938684e4a55", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61a4fbfb60c3c10f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/people/workgroup-detail.tsx:272"}, "properties": {"repobilityId": "af4bfd1a833a5455", "scanner": "scanner-primary", "fingerprint": "61a4fbfb60c3c10f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d03d1cca99a627dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/_shared/icon-picker.tsx:58"}, "properties": {"repobilityId": "c456e3d6fe64bd1b", "scanner": "scanner-primary", "fingerprint": "d03d1cca99a627dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4524e80cd08c1866", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/sysadmin/_shared/sysadmin-center-header.tsx:54"}, "properties": {"repobilityId": "c5a2d0b371481d15", "scanner": "scanner-primary", "fingerprint": "4524e80cd08c1866", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8c5c4d2ec6e039ce", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/help/help-panel.tsx:166"}, "properties": {"repobilityId": "c449358bc7c59cf4", "scanner": "scanner-primary", "fingerprint": "8c5c4d2ec6e039ce", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-277fd2199c6b3523", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/filter-panel/fields.tsx:292"}, "properties": {"repobilityId": "edf62f24822a0da9", "scanner": "scanner-primary", "fingerprint": "277fd2199c6b3523", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e6db48f8c9e402a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/filter-panel/file-field.tsx:106"}, "properties": {"repobilityId": "8196d0bf0eca3155", "scanner": "scanner-primary", "fingerprint": "8e6db48f8c9e402a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2efa16d27b7ea09d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/journey-log/journey-log-config-shell.tsx:258"}, "properties": {"repobilityId": "91d4579d65a1cf41", "scanner": "scanner-primary", "fingerprint": "2efa16d27b7ea09d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b600f5ea74b1ffa9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-open-duties-section.tsx:371"}, "properties": {"repobilityId": "d1926eed332f9d04", "scanner": "scanner-primary", "fingerprint": "b600f5ea74b1ffa9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-97e128903708bceb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-filter-panel.tsx:176"}, "properties": {"repobilityId": "99d736e9f9d87b6b", "scanner": "scanner-primary", "fingerprint": "97e128903708bceb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a262a4e776a1e52", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/activity-hover-tooltip.tsx:149"}, "properties": {"repobilityId": "bff321317246a7a3", "scanner": "scanner-primary", "fingerprint": "9a262a4e776a1e52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fcca902d7bd47029", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/swap-approvals-panel.tsx:159"}, "properties": {"repobilityId": "048ed7bba1e98c35", "scanner": "scanner-primary", "fingerprint": "fcca902d7bd47029", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-114d53412818392c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-context-menu.tsx:1273"}, "properties": {"repobilityId": "dba95fdbeeb82d3a", "scanner": "scanner-primary", "fingerprint": "114d53412818392c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a2c9920b98ba466", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel.tsx:466"}, "properties": {"repobilityId": "5e87043f3e7834ee", "scanner": "scanner-primary", "fingerprint": "7a2c9920b98ba466", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d3f9138db1d78b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-command-palette.tsx:535"}, "properties": {"repobilityId": "8fbdf438e4858776", "scanner": "scanner-primary", "fingerprint": "2d3f9138db1d78b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39606191c5c6d943", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-activity-code-multiselect.tsx:84"}, "properties": {"repobilityId": "696704f0a8c43f6e", "scanner": "scanner-primary", "fingerprint": "39606191c5c6d943", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-914428688f4b2687", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-left-panel.tsx:297"}, "properties": {"repobilityId": "4e27a0012b37f68b", "scanner": "scanner-primary", "fingerprint": "914428688f4b2687", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2f40832f1b2e403", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-memo-overlay.tsx:82"}, "properties": {"repobilityId": "0c74785584e42f68", "scanner": "scanner-primary", "fingerprint": "e2f40832f1b2e403", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac2043084c95617e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-swap-overlay.tsx:210"}, "properties": {"repobilityId": "bc0b31cf8b98f4e2", "scanner": "scanner-primary", "fingerprint": "ac2043084c95617e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b34f64bca1df7baf", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:1114"}, "properties": {"repobilityId": "08e321ecb9ba95f8", "scanner": "scanner-primary", "fingerprint": "b34f64bca1df7baf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a3b9ead65df36df8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:427"}, "properties": {"repobilityId": "4c398bad663664db", "scanner": "scanner-primary", "fingerprint": "a3b9ead65df36df8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-68aa81a5a3723fff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/activity-code-picker.tsx:244"}, "properties": {"repobilityId": "ba17ea64c8bf3c95", "scanner": "scanner-primary", "fingerprint": "68aa81a5a3723fff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58cf1d17d066964d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/crew-ops/schedule/skyai/skyai-panel.tsx:102"}, "properties": {"repobilityId": "7c74864ee8e18675", "scanner": "scanner-primary", "fingerprint": "58cf1d17d066964d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72426ebc9e678fde", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/skyai/skyai-history-menu.tsx:60"}, "properties": {"repobilityId": "d5dc20a45d6756ed", "scanner": "scanner-primary", "fingerprint": "72426ebc9e678fde", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ae2480888069c0d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/legality-report-dialog.tsx:112"}, "properties": {"repobilityId": "3be12c40cd59e6f6", "scanner": "scanner-primary", "fingerprint": "8ae2480888069c0d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14e9e800557900ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/date-totals-dialog.tsx:132"}, "properties": {"repobilityId": "fff2edffffbff355", "scanner": "scanner-primary", "fingerprint": "14e9e800557900ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ccd70a654bbb684b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/temporary-base-dialog.tsx:302"}, "properties": {"repobilityId": "0c514a0b5519d4ce", "scanner": "scanner-primary", "fingerprint": "ccd70a654bbb684b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b66b7f771cec3fb4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/crew-on-pairing-dialog.tsx:72"}, "properties": {"repobilityId": "91226470d92f4d33", "scanner": "scanner-primary", "fingerprint": "b66b7f771cec3fb4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3485299697ddea1d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/pic-assignment-dialog.tsx:121"}, "properties": {"repobilityId": "ad4fee7ac77351a9", "scanner": "scanner-primary", "fingerprint": "3485299697ddea1d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1ddf3444c476d81d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/assign-pairing-dialog.tsx:215"}, "properties": {"repobilityId": "82717b1e08696f75", "scanner": "scanner-primary", "fingerprint": "1ddf3444c476d81d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7788f22ca2ab000e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/duty-amendments/pairing-summary-pane.tsx:187"}, "properties": {"repobilityId": "fc38b2b66e3073d5", "scanner": "scanner-primary", "fingerprint": "7788f22ca2ab000e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2d89bbae88195ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule/dialogs/duty-amendments/crew-target-picker.tsx:45"}, "properties": {"repobilityId": "d3e5616b65db89c6", "scanner": "scanner-primary", "fingerprint": "a2d89bbae88195ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c18b2eec142a7180", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/filter-panel/hotac-filter-panel.tsx:214"}, "properties": {"repobilityId": "61756257c7148637", "scanner": "scanner-primary", "fingerprint": "c18b2eec142a7180", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b1e5bbf14cac0af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/booking-inspector.tsx:68"}, "properties": {"repobilityId": "3e9f9b0f541624cb", "scanner": "scanner-primary", "fingerprint": "9b1e5bbf14cac0af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-173f95718e46c63c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/allocation-view.tsx:388"}, "properties": {"repobilityId": "95ee26a92f04a27d", "scanner": "scanner-primary", "fingerprint": "173f95718e46c63c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-15ba97efd3ea3e1e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/planning-view.tsx:153"}, "properties": {"repobilityId": "d8e6e419c1e09c52", "scanner": "scanner-primary", "fingerprint": "15ba97efd3ea3e1e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c37fed6f63425d32", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/communication-view.tsx:148"}, "properties": {"repobilityId": "6192baffa6af2b5b", "scanner": "scanner-primary", "fingerprint": "c37fed6f63425d32", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc6dd58d8daa7506", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/day-to-day-view.tsx:99"}, "properties": {"repobilityId": "ce7aafe92fb1102d", "scanner": "scanner-primary", "fingerprint": "cc6dd58d8daa7506", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0a4c64dfcc1ca14", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/hotac-row-context-menu.tsx:234"}, "properties": {"repobilityId": "4b2914483384891c", "scanner": "scanner-primary", "fingerprint": "e0a4c64dfcc1ca14", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65b0a83143792e91", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/audit-view.tsx:174"}, "properties": {"repobilityId": "e6e1af9d722fc187", "scanner": "scanner-primary", "fingerprint": "65b0a83143792e91", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-48cd0d50cf53fa66", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac/views/email-detail-pane.tsx:50"}, "properties": {"repobilityId": "125d59240882886f", "scanner": "scanner-primary", "fingerprint": "48cd0d50cf53fa66", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4d0aee80cff3c18b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-roster/crew-roster-filter-panel.tsx:159"}, "properties": {"repobilityId": "387e49bf696b0ad1", "scanner": "scanner-primary", "fingerprint": "4d0aee80cff3c18b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cf7f8839bca52459", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-context-menu.tsx:81"}, "properties": {"repobilityId": "33620d0b9153e202", "scanner": "scanner-primary", "fingerprint": "cf7f8839bca52459", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c5a2508f11907531", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-board.tsx:155"}, "properties": {"repobilityId": "da41cea8e882f653", "scanner": "scanner-primary", "fingerprint": "c5a2508f11907531", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1c98950045c977c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-filter-panel.tsx:180"}, "properties": {"repobilityId": "abc34cc8de7d6962", "scanner": "scanner-primary", "fingerprint": "d1c98950045c977c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-af134f1ff7c751fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-code-group-dialog.tsx:119"}, "properties": {"repobilityId": "94171942654659ed", "scanner": "scanner-primary", "fingerprint": "af134f1ff7c751fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ca6822a9576c2d56", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-data-grid.tsx:89"}, "properties": {"repobilityId": "810f07ad9a738e39", "scanner": "scanner-primary", "fingerprint": "ca6822a9576c2d56", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-221c834c63458858", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/hotac-config/hotac-config-shell.tsx:280"}, "properties": {"repobilityId": "8af41f41639e2229", "scanner": "scanner-primary", "fingerprint": "221c834c63458858", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e475e149c3e00fe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/common/crew-search-modal.tsx:230"}, "properties": {"repobilityId": "5a9c37721fa3a3d6", "scanner": "scanner-primary", "fingerprint": "1e475e149c3e00fe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7bbd8bbc45092fe9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/selection-criteria-panel.tsx:135"}, "properties": {"repobilityId": "0ae16b53e7a1df0b", "scanner": "scanner-primary", "fingerprint": "7bbd8bbc45092fe9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-642c122b14ce4e8d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/crew-list-panel.tsx:133"}, "properties": {"repobilityId": "78bce3da14a2372b", "scanner": "scanner-primary", "fingerprint": "642c122b14ce4e8d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec365833965c2184", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/document-list.tsx:143"}, "properties": {"repobilityId": "05cdc4d261ef8669", "scanner": "scanner-primary", "fingerprint": "ec365833965c2184", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9adcd3bab355a74d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-documents/common/crew-document-hero.tsx:90"}, "properties": {"repobilityId": "177cfed91e09db6d", "scanner": "scanner-primary", "fingerprint": "9adcd3bab355a74d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ecb6a0743a0d28fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/duty-swap-config/duty-swap-config-shell.tsx:446"}, "properties": {"repobilityId": "ac365f3c503f2b5f", "scanner": "scanner-primary", "fingerprint": "ecb6a0743a0d28fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46c70e6c3315c6b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-pairings/crew-pairings-list.tsx:103"}, "properties": {"repobilityId": "a606561a1c6f177e", "scanner": "scanner-primary", "fingerprint": "46c70e6c3315c6b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a4ca84d13b44b047", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-pairings/crew-pairings-detail.tsx:267"}, "properties": {"repobilityId": "42cf29948d42c185", "scanner": "scanner-primary", "fingerprint": "a4ca84d13b44b047", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5de73408087beb30", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing-config/pairing-config-shell.tsx:358"}, "properties": {"repobilityId": "54a4417c0505f856", "scanner": "scanner-primary", "fingerprint": "5de73408087beb30", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f597e68ba15685da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-absence/panels.tsx:159"}, "properties": {"repobilityId": "a57fdf10ea5c6251", "scanner": "scanner-primary", "fingerprint": "f597e68ba15685da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9bb9d47ae477c719", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-absence/register-table.tsx:164"}, "properties": {"repobilityId": "7557c6affb679ef5", "scanner": "scanner-primary", "fingerprint": "9bb9d47ae477c719", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-83697fae52d6ef42", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/crew-schedule-stability-filter-panel.tsx:153"}, "properties": {"repobilityId": "366dd8b5c123b5c2", "scanner": "scanner-primary", "fingerprint": "83697fae52d6ef42", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-527341388c7fb2e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/StabilityBreakdown.tsx:81"}, "properties": {"repobilityId": "3371226a36d067dd", "scanner": "scanner-primary", "fingerprint": "527341388c7fb2e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b9b3f286cc05568", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/StabilityKpiTile.tsx:126"}, "properties": {"repobilityId": "7ac206eccbcfb415", "scanner": "scanner-primary", "fingerprint": "1b9b3f286cc05568", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-db561e4c336da480", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/CrewDetailDrawer.tsx:217"}, "properties": {"repobilityId": "849cb7101031eed3", "scanner": "scanner-primary", "fingerprint": "db561e4c336da480", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0dbfbd059dbe3821", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-schedule-stability/explore/StabilityRadial.tsx:365"}, "properties": {"repobilityId": "849f4bb407532e1f", "scanner": "scanner-primary", "fingerprint": "0dbfbd059dbe3821", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-766332afbb0d470c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/ground-communication-view.tsx:147"}, "properties": {"repobilityId": "b44daecc2a3d062f", "scanner": "scanner-primary", "fingerprint": "766332afbb0d470c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f1f1c790b09a539e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/ground-planning-view.tsx:263"}, "properties": {"repobilityId": "02ce1ae6eddb9bf1", "scanner": "scanner-primary", "fingerprint": "f1f1c790b09a539e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8bd08a89c5bbb337", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/flight-booking-drawer.tsx:577"}, "properties": {"repobilityId": "c0287193ffa49d5c", "scanner": "scanner-primary", "fingerprint": "8bd08a89c5bbb337", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-19e4eeaea4e33270", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/transport-audit-view.tsx:145"}, "properties": {"repobilityId": "9f2d4e4e3ae63162", "scanner": "scanner-primary", "fingerprint": "19e4eeaea4e33270", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-080163d66000ebd8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/trip-inspector.tsx:54"}, "properties": {"repobilityId": "63d1f169702b73bc", "scanner": "scanner-primary", "fingerprint": "080163d66000ebd8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-969ca072d044bec0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/transport/views/transport-email-detail.tsx:49"}, "properties": {"repobilityId": "712454a5cc092ab8", "scanner": "scanner-primary", "fingerprint": "969ca072d044bec0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2fcf60fec75f5493", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/data-import/data-import-shell.tsx:172"}, "properties": {"repobilityId": "5ccad39a9265f4e7", "scanner": "scanner-primary", "fingerprint": "2fcf60fec75f5493", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8f48a73f52383ee9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule-audit/schedule-audit-table.tsx:305"}, "properties": {"repobilityId": "e1526fe3bdc34cfb", "scanner": "scanner-primary", "fingerprint": "8f48a73f52383ee9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-390c20ed23373f2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/config-shared.tsx:165"}, "properties": {"repobilityId": "6d4d22b462f70bf2", "scanner": "scanner-primary", "fingerprint": "390c20ed23373f2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35abd4e447530ef2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-detail.tsx:78"}, "properties": {"repobilityId": "96c5e1b65a7797bd", "scanner": "scanner-primary", "fingerprint": "35abd4e447530ef2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59780adf39af27f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-log-shell.tsx:199"}, "properties": {"repobilityId": "8893d14a4a28271c", "scanner": "scanner-primary", "fingerprint": "59780adf39af27f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fb23b37281a3ac1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/add-country-picker.tsx:158"}, "properties": {"repobilityId": "b2313e0db23aa397", "scanner": "scanner-primary", "fingerprint": "fb23b37281a3ac1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2870663693e1f8df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-working-area.tsx:98"}, "properties": {"repobilityId": "2b34cdda3a50c9f4", "scanner": "scanner-primary", "fingerprint": "2870663693e1f8df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f1b208ec4a49850b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/country-detail.tsx:63"}, "properties": {"repobilityId": "6298ba9c4fad3d2a", "scanner": "scanner-primary", "fingerprint": "f1b208ec4a49850b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dfc698f975e356e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-cusres-modal.tsx:89"}, "properties": {"repobilityId": "d3e2ecba284eda2e", "scanner": "scanner-primary", "fingerprint": "dfc698f975e356e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7324e924be516040", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/country-list.tsx:131"}, "properties": {"repobilityId": "cc0e70e4b91793c5", "scanner": "scanner-primary", "fingerprint": "7324e924be516040", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-520cc2cbd72e9567", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/apis/apis-transmission-filter-panel.tsx:266"}, "properties": {"repobilityId": "2daf12df85e40e3d", "scanner": "scanner-primary", "fingerprint": "520cc2cbd72e9567", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-18235e1422bcb2c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing-categories/pairing-categories-shell.tsx:374"}, "properties": {"repobilityId": "c9921fae88b299ab", "scanner": "scanner-primary", "fingerprint": "18235e1422bcb2c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2725c7487a75d503", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/shell/pairing-optimizer-shell.tsx:217"}, "properties": {"repobilityId": "a7554d13f41a5dd1", "scanner": "scanner-primary", "fingerprint": "2725c7487a75d503", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dabee8636c53de8b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/pairing-optimizer-stepper.tsx:85"}, "properties": {"repobilityId": "00ba42faca60d7b9", "scanner": "scanner-primary", "fingerprint": "dabee8636c53de8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17163608e83064fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/colgen-telemetry.tsx:47"}, "properties": {"repobilityId": "2374a8b0056eb0fe", "scanner": "scanner-primary", "fingerprint": "17163608e83064fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0f7661e3a2bb00a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/solver-telemetry-panel.tsx:79"}, "properties": {"repobilityId": "ef8e621641a44a82", "scanner": "scanner-primary", "fingerprint": "f0f7661e3a2bb00a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ac2f1517eb31a405", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/optimizer/telemetry/kpi-tiles.tsx:46"}, "properties": {"repobilityId": "b822890549491608", "scanner": "scanner-primary", "fingerprint": "ac2f1517eb31a405", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-587f0ca19325183c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-canvas.tsx:1316"}, "properties": {"repobilityId": "3a5dabc36e2b231e", "scanner": "scanner-primary", "fingerprint": "587f0ca19325183c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c7b9cfc775390ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector-panel/index.tsx:1155"}, "properties": {"repobilityId": "e433c62eddc04084", "scanner": "scanner-primary", "fingerprint": "4c7b9cfc775390ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b92aa71820d668fb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/layover-chip.tsx:80"}, "properties": {"repobilityId": "a758fb4d67326890", "scanner": "scanner-primary", "fingerprint": "b92aa71820d668fb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c0084fc0ee405c0f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/pairing-list-panel.tsx:512"}, "properties": {"repobilityId": "da911fb987af29b9", "scanner": "scanner-primary", "fingerprint": "c0084fc0ee405c0f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-705c90ff0d89c165", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/inspect-pairing-panel.tsx:111"}, "properties": {"repobilityId": "93433596c716499e", "scanner": "scanner-primary", "fingerprint": "705c90ff0d89c165", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32a848aba203639a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/text-view/selection-inspector-panel.tsx:524"}, "properties": {"repobilityId": "5d90b520c2f4dd19", "scanner": "scanner-primary", "fingerprint": "32a848aba203639a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef89f90e894c4361", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/dialogs/bulk-delete-pairing-dialog.tsx:227"}, "properties": {"repobilityId": "156aa0fbf08302a7", "scanner": "scanner-primary", "fingerprint": "ef89f90e894c4361", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e17febc1a4ab8c59", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/pairing/dialogs/replicate-pairing-dialog.tsx:397"}, "properties": {"repobilityId": "fa2ebf963d56ddb2", "scanner": "scanner-primary", "fingerprint": "e17febc1a4ab8c59", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d93b2da53f205d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/manpower-planning/tabs/events-tab.tsx:149"}, "properties": {"repobilityId": "379a127fd4ab3c71", "scanner": "scanner-primary", "fingerprint": "6d93b2da53f205d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c9a6111e17efccb3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/email-report-dialog.tsx:142"}, "properties": {"repobilityId": "63b6d76e69675fa9", "scanner": "scanner-primary", "fingerprint": "c9a6111e17efccb3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-97bd9af6372ec730", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew-info-tabs.tsx:300"}, "properties": {"repobilityId": "4332b7156ce7253f", "scanner": "scanner-primary", "fingerprint": "97bd9af6372ec730", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6eefc556bd89cdeb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew-info-filter-panel.tsx:297"}, "properties": {"repobilityId": "eaf665299c7b9965", "scanner": "scanner-primary", "fingerprint": "6eefc556bd89cdeb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25790c511e961f1b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/operating-crew-info/operating-crew-info-personal.tsx:46"}, "properties": {"repobilityId": "ffe44334eefe3e27", "scanner": "scanner-primary", "fingerprint": "25790c511e961f1b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f69699048cd44e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/crew-profile-filter-panel.tsx:197"}, "properties": {"repobilityId": "ec3ba5938637925a", "scanner": "scanner-primary", "fingerprint": "2f69699048cd44e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-19be7f2820f0f7ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/common/tab-layout.tsx:143"}, "properties": {"repobilityId": "3ee7ffb767e3977e", "scanner": "scanner-primary", "fingerprint": "19be7f2820f0f7ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6d082f417fbff77", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/grid/aircraft-qualifications-grid.tsx:803"}, "properties": {"repobilityId": "62717e8728fd43b7", "scanner": "scanner-primary", "fingerprint": "d6d082f417fbff77", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-60ea90d8c32f0ecf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/employment-tab.tsx:344"}, "properties": {"repobilityId": "7c85476ad613e752", "scanner": "scanner-primary", "fingerprint": "60ea90d8c32f0ecf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-754a03e4dadad5c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/expiries-tab.tsx:391"}, "properties": {"repobilityId": "e6bad50f2ef37af4", "scanner": "scanner-primary", "fingerprint": "754a03e4dadad5c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-29c268341c2dee3c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/identity-tab.tsx:386"}, "properties": {"repobilityId": "9f56a697d41eb959", "scanner": "scanner-primary", "fingerprint": "29c268341c2dee3c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-77cebaccf063b0a4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/crew-ops/crew-profile/tabs/audit-history-tab.tsx:18"}, "properties": {"repobilityId": "1ff53e29f601fd8f", "scanner": "scanner-primary", "fingerprint": "77cebaccf063b0a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bdf013aff6867a08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/schedule-publish/schedule-publish-filter-panel.tsx:201"}, "properties": {"repobilityId": "efb9b4a3af5feb0e", "scanner": "scanner-primary", "fingerprint": "bdf013aff6867a08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39ff1dfe4fbd8162", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/open-flights-bidding/open-flights-bidding-shell.tsx:256"}, "properties": {"repobilityId": "e35fa37eec64b49b", "scanner": "scanner-primary", "fingerprint": "39ff1dfe4fbd8162", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-80055a80df94f8da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/scheduling-config/scheduling-config-shell.tsx:771"}, "properties": {"repobilityId": "a199441b3deb3ef9", "scanner": "scanner-primary", "fingerprint": "80055a80df94f8da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d93cbc2f07fb985", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-count/crew-count-charts.tsx:187"}, "properties": {"repobilityId": "2c5829a01cf23e8f", "scanner": "scanner-primary", "fingerprint": "7d93cbc2f07fb985", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-749d98b673c59319", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-count/crew-count-matrix.tsx:65"}, "properties": {"repobilityId": "480a3def528f6513", "scanner": "scanner-primary", "fingerprint": "749d98b673c59319", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-072feab947307859", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/comm-contacts-tab.tsx:206"}, "properties": {"repobilityId": "aacf55abe7266fb3", "scanner": "scanner-primary", "fingerprint": "072feab947307859", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b1f78c17f5e15fd1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/comm-logs-tab.tsx:180"}, "properties": {"repobilityId": "776903c78129eab8", "scanner": "scanner-primary", "fingerprint": "b1f78c17f5e15fd1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-350c142d3ddda6c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/check-in/check-in-crew-list.tsx:173"}, "properties": {"repobilityId": "be1b956541217fcf", "scanner": "scanner-primary", "fingerprint": "350c142d3ddda6c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-449d74451198d18c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx:1928"}, "properties": {"repobilityId": "fb8a7bd90573d39b", "scanner": "scanner-primary", "fingerprint": "449d74451198d18c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f03ad54bdbd65f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/panels.tsx:436"}, "properties": {"repobilityId": "ee02f89ecf5846b5", "scanner": "scanner-primary", "fingerprint": "0f03ad54bdbd65f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-55b73240cc7d0452", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/category-donut.tsx:102"}, "properties": {"repobilityId": "4842df3b8d7b08ba", "scanner": "scanner-primary", "fingerprint": "55b73240cc7d0452", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d9f29a5b7c2de7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-expiry/expiry-register-table.tsx:162"}, "properties": {"repobilityId": "e2ac67a79f4eecce", "scanner": "scanner-primary", "fingerprint": "7d9f29a5b7c2de7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc1a821120cc4ffe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-table.tsx:346"}, "properties": {"repobilityId": "813d62d36efe0afc", "scanner": "scanner-primary", "fingerprint": "cc1a821120cc4ffe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-546ea08c094a2f5b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-shell.tsx:147"}, "properties": {"repobilityId": "e019d836c1356aae", "scanner": "scanner-primary", "fingerprint": "546ea08c094a2f5b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6beb64a707dc3f39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-audit/crew-app-audit-filter-panel.tsx:223"}, "properties": {"repobilityId": "4ea6bdc1b32313c3", "scanner": "scanner-primary", "fingerprint": "6beb64a707dc3f39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0d0fded69f123c7f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-app-config/crew-app-config-shell.tsx:419"}, "properties": {"repobilityId": "281a9bf1b166b921", "scanner": "scanner-primary", "fingerprint": "0d0fded69f123c7f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-87983e17efe0ab4c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-out-of-base/crew-out-of-base-station-pairings.tsx:69"}, "properties": {"repobilityId": "d33aa6b442160b8f", "scanner": "scanner-primary", "fingerprint": "87983e17efe0ab4c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7c0a5b29c5459ce5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/crew-out-of-base/crew-out-of-base-list.tsx:136"}, "properties": {"repobilityId": "68c39a064b4870c8", "scanner": "scanner-primary", "fingerprint": "7c0a5b29c5459ce5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9030f510a2a8f834", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/auto-roster/auto-roster-telemetry-panel.tsx:180"}, "properties": {"repobilityId": "cc29ca129fa5e18c", "scanner": "scanner-primary", "fingerprint": "9030f510a2a8f834", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e01a8ed99e4d91d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx:1925"}, "properties": {"repobilityId": "eac15665c0c204bf", "scanner": "scanner-primary", "fingerprint": "0e01a8ed99e4d91d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-237d820132a4ec03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/training/sessions/session-inspector.tsx:109"}, "properties": {"repobilityId": "8ed1cc8e6513c870", "scanner": "scanner-primary", "fingerprint": "237d820132a4ec03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff5cce3d20b9cd33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/crew-ops/training/sim-schedule/sim-schedule-gantt.tsx:97"}, "properties": {"repobilityId": "58f414b82dafa158", "scanner": "scanner-primary", "fingerprint": "ff5cce3d20b9cd33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-437523d83a190a2e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/disruption-feed.tsx:364"}, "properties": {"repobilityId": "508d3316d2c16f9d", "scanner": "scanner-primary", "fingerprint": "437523d83a190a2e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d29cdd54d4a112fc", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/disruption-center/workflow-timeline.tsx:195"}, "properties": {"repobilityId": "b3deb8d1938c974e", "scanner": "scanner-primary", "fingerprint": "d29cdd54d4a112fc", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0c54d2c8f8b0ef1e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/assign-to-picker.tsx:105"}, "properties": {"repobilityId": "49f46af3550b9be7", "scanner": "scanner-primary", "fingerprint": "0c54d2c8f8b0ef1e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f78a2c04439f3f2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/disruption-center/disruption-hero.tsx:249"}, "properties": {"repobilityId": "e2311fc30de50a73", "scanner": "scanner-primary", "fingerprint": "0f78a2c04439f3f2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-2f7268edeb08a8fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/resolve-dialog.tsx:84"}, "properties": {"repobilityId": "c20e78ba6161d002", "scanner": "scanner-primary", "fingerprint": "2f7268edeb08a8fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-324679028f14e3f6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/advisor-drawer.tsx:110"}, "properties": {"repobilityId": "2d3bb71f40e6b46d", "scanner": "scanner-primary", "fingerprint": "324679028f14e3f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-db987c36821695e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/active-bulletins-ribbon.tsx:166"}, "properties": {"repobilityId": "c6b1dfa0ba7213f0", "scanner": "scanner-primary", "fingerprint": "db987c36821695e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d58f264fbeb77b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/recovery-advisor-panel.tsx:234"}, "properties": {"repobilityId": "8a9d2f29cede9421", "scanner": "scanner-primary", "fingerprint": "7d58f264fbeb77b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-328b89929da67509", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/recovery-apply-confirm.tsx:187"}, "properties": {"repobilityId": "28fedd984cd3c127", "scanner": "scanner-primary", "fingerprint": "328b89929da67509", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23fe5f62ec3b0483", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/customization/customization-shell.tsx:398"}, "properties": {"repobilityId": "fe2260edb060012a", "scanner": "scanner-primary", "fingerprint": "23fe5f62ec3b0483", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-389e513438fc439a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/kpi/severity-donut-card.tsx:96"}, "properties": {"repobilityId": "4885fb86b3e8c624", "scanner": "scanner-primary", "fingerprint": "389e513438fc439a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-091dce0e33f8bd1b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/kpi/workflow-status-card.tsx:74"}, "properties": {"repobilityId": "02ff01c01c12b2b4", "scanner": "scanner-primary", "fingerprint": "091dce0e33f8bd1b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0255c988f345c26c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/ml-training-shell.tsx:191"}, "properties": {"repobilityId": "05ecd08c7d4e5457", "scanner": "scanner-primary", "fingerprint": "0255c988f345c26c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-49f2f1a159a34797", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/sections/dataset-section.tsx:375"}, "properties": {"repobilityId": "83524a4748f3647e", "scanner": "scanner-primary", "fingerprint": "49f2f1a159a34797", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f4f6d41f9e6666f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/disruption-center/ml-training/sections/weather-section.tsx:393"}, "properties": {"repobilityId": "b5b0167826e32702", "scanner": "scanner-primary", "fingerprint": "f4f6d41f9e6666f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f4170e311dffff2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-messaging/send-panel.tsx:298"}, "properties": {"repobilityId": "4bf233fc8481f37f", "scanner": "scanner-primary", "fingerprint": "f4170e311dffff2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-129bc95c74f38e5d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-messaging/message-log-table.tsx:227"}, "properties": {"repobilityId": "cde79fd2551675f6", "scanner": "scanner-primary", "fingerprint": "129bc95c74f38e5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f1e1a93dacc37890", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/fleet-utilization/top-utilization-card.tsx:75"}, "properties": {"repobilityId": "d4cc00833f9a7ecd", "scanner": "scanner-primary", "fingerprint": "f1e1a93dacc37890", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aeb1d5920ca905d3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/diff-summary-card.tsx:117"}, "properties": {"repobilityId": "b0366dd2dc45e0c2", "scanner": "scanner-primary", "fingerprint": "aeb1d5920ca905d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c8076a0b2c5659de", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/gantt-canvas.tsx:1070"}, "properties": {"repobilityId": "d899cb8b4c3b8020", "scanner": "scanner-primary", "fingerprint": "c8076a0b2c5659de", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c4019962be14f6c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/crew-impact-side-sheet.tsx:100"}, "properties": {"repobilityId": "cbd7189554685abf", "scanner": "scanner-primary", "fingerprint": "1c4019962be14f6c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-158ea01ffa071ae7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/gantt/gantt-shell.tsx:52"}, "properties": {"repobilityId": "cf903ed7558f48a1", "scanner": "scanner-primary", "fingerprint": "158ea01ffa071ae7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-2bfb391207bab3db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/delays-tab.tsx:368"}, "properties": {"repobilityId": "5d59c86b0430878b", "scanner": "scanner-primary", "fingerprint": "2bfb391207bab3db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-16549354c0f273c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/jumpseater-dialog.tsx:245"}, "properties": {"repobilityId": "31f89ef76c90120d", "scanner": "scanner-primary", "fingerprint": "16549354c0f273c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4781398c4f2123be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/gendec-send-panel.tsx:195"}, "properties": {"repobilityId": "15afc5383b4054f5", "scanner": "scanner-primary", "fingerprint": "4781398c4f2123be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ce6e404a5588e8a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/messages-tab.tsx:146"}, "properties": {"repobilityId": "7751d9d9140f853c", "scanner": "scanner-primary", "fingerprint": "8ce6e404a5588e8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b98646002f8bf0f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/gantt/flight-information/times-tab.tsx:240"}, "properties": {"repobilityId": "7279b140dd0e8207", "scanner": "scanner-primary", "fingerprint": "b98646002f8bf0f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f714f6c71e971b9d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/calendar-tab.tsx:77"}, "properties": {"repobilityId": "ab8a855752a541d5", "scanner": "scanner-primary", "fingerprint": "f714f6c71e971b9d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2dae9df28b9c45f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/slot-filter-panel.tsx:431"}, "properties": {"repobilityId": "cd24c6ad9a79a2c6", "scanner": "scanner-primary", "fingerprint": "d2dae9df28b9c45f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f6a498b410631ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/fleet-overview.tsx:201"}, "properties": {"repobilityId": "cc5cb365225ed0ee", "scanner": "scanner-primary", "fingerprint": "1f6a498b410631ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1afa4f927bbd1a55", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/airport-list-panel.tsx:218"}, "properties": {"repobilityId": "7ccaa11ab75a9ee3", "scanner": "scanner-primary", "fingerprint": "1afa4f927bbd1a55", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c2dbaae630f0bbc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/components/airport-accordion-row.tsx:103"}, "properties": {"repobilityId": "95a53d1ca9f4cc81", "scanner": "scanner-primary", "fingerprint": "9c2dbaae630f0bbc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6480f6ae304343a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/slots/components/unified-series-row.tsx:167"}, "properties": {"repobilityId": "166cdb3a3faf1765", "scanner": "scanner-primary", "fingerprint": "6480f6ae304343a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-253662aa9757c731", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/shared/predictive-cells.tsx:6"}, "properties": {"repobilityId": "e2f8bee25fa85111", "scanner": "scanner-primary", "fingerprint": "253662aa9757c731", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1fec9dd3be5da15e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/public-timetable/public-timetable-ticket.tsx:74"}, "properties": {"repobilityId": "0e5222a7edd37b01", "scanner": "scanner-primary", "fingerprint": "1fec9dd3be5da15e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-07f434b57cbed6a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/public-timetable/airport-combobox.tsx:140"}, "properties": {"repobilityId": "02f747e68192a08e", "scanner": "scanner-primary", "fingerprint": "07f434b57cbed6a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0dd69cb6a4ee2ae9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-summary/kpi-strip.tsx:38"}, "properties": {"repobilityId": "c421a194d0a648c8", "scanner": "scanner-primary", "fingerprint": "0dd69cb6a4ee2ae9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-625ee8f2572b00b2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-summary/section-header.tsx:20"}, "properties": {"repobilityId": "9619141ae5a08b15", "scanner": "scanner-primary", "fingerprint": "625ee8f2572b00b2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f7819c67e3dbfdb8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/scenario-compare/scenario-compare-overview.tsx:229"}, "properties": {"repobilityId": "ebf8f97ebfcd2999", "scanner": "scanner-primary", "fingerprint": "f7819c67e3dbfdb8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-24b9f2ff7ca99ae3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/grid-cell.tsx:331"}, "properties": {"repobilityId": "ad440ab14042a60b", "scanner": "scanner-primary", "fingerprint": "24b9f2ff7ca99ae3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b9e5b5cce6e74cd2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/schedule-grid/use-grid-keyboard.ts:283"}, "properties": {"repobilityId": "83b9a26555a7db8d", "scanner": "scanner-primary", "fingerprint": "b9e5b5cce6e74cd2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-383a56d5727cff25", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/grid-header.tsx:64"}, "properties": {"repobilityId": "66f6f9895aef98b2", "scanner": "scanner-primary", "fingerprint": "383a56d5727cff25", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c26318dec79f7045", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/message-dialog.tsx:167"}, "properties": {"repobilityId": "69ae0cfc028ccb2c", "scanner": "scanner-primary", "fingerprint": "c26318dec79f7045", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed739131a316f52c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/ssim-export-dialog.tsx:232"}, "properties": {"repobilityId": "cf8dff9e68af78cb", "scanner": "scanner-primary", "fingerprint": "ed739131a316f52c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-378e95fc3917567b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/column-filter-dropdown.tsx:200"}, "properties": {"repobilityId": "38d0e90fbe82d5d3", "scanner": "scanner-primary", "fingerprint": "378e95fc3917567b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a789bab4c9984c77", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/scenario-panel.tsx:385"}, "properties": {"repobilityId": "16f1bf98f3f32d77", "scanner": "scanner-primary", "fingerprint": "a789bab4c9984c77", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-051e0fad22e2c6c9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/schedule-grid/ribbon/ribbon-toolbar.tsx:166"}, "properties": {"repobilityId": "9bd1dc7aead25813", "scanner": "scanner-primary", "fingerprint": "051e0fad22e2c6c9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5a0ab0e659ca6ac2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/codeshare/agreement-detail-panel.tsx:384"}, "properties": {"repobilityId": "151c5af1938bdd04", "scanner": "scanner-primary", "fingerprint": "5a0ab0e659ca6ac2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-902e270700648d61", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/codeshare/codeshare-types.ts:35"}, "properties": {"repobilityId": "45fec878ccdb440a", "scanner": "scanner-primary", "fingerprint": "902e270700648d61", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9d869cfc922994dc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/codeshare/partner-list-panel.tsx:97"}, "properties": {"repobilityId": "c2eb955ecfea0cc1", "scanner": "scanner-primary", "fingerprint": "9d869cfc922994dc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1cda0bb985ad1e7c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/apply-confirmation-dialog.tsx:208"}, "properties": {"repobilityId": "5ba12f4aede8112c", "scanner": "scanner-primary", "fingerprint": "1cda0bb985ad1e7c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c92c594e12f5ccb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs-shell.tsx:268"}, "properties": {"repobilityId": "db22e2b064b99865", "scanner": "scanner-primary", "fingerprint": "4c92c594e12f5ccb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d6347af662521c39", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/network/optimizer/network-optimizer-splash.tsx:184"}, "properties": {"repobilityId": "26627045944699db", "scanner": "scanner-primary", "fingerprint": "d6347af662521c39", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8393649b8cef8615", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/scenario-list.tsx:37"}, "properties": {"repobilityId": "48a686163fa70af4", "scanner": "scanner-primary", "fingerprint": "8393649b8cef8615", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c7573f8d8938327", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/optimizer-footer.tsx:98"}, "properties": {"repobilityId": "70698b6c3b6b0007", "scanner": "scanner-primary", "fingerprint": "9c7573f8d8938327", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-967a13b45a2074fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs/audit-inspector.tsx:52"}, "properties": {"repobilityId": "1ed1baceda8e044b", "scanner": "scanner-primary", "fingerprint": "967a13b45a2074fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-822de0c0a632b4d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/runs/runs-table.tsx:110"}, "properties": {"repobilityId": "02fa78cf0926ea06", "scanner": "scanner-primary", "fingerprint": "822de0c0a632b4d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9b9e249931393f9b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/inspector/inspector.tsx:117"}, "properties": {"repobilityId": "3f9dac9bdc127760", "scanner": "scanner-primary", "fingerprint": "9b9e249931393f9b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc52cf2effd19da5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/optimizer/inspector/priority-slider.tsx:38"}, "properties": {"repobilityId": "802d07b62fbf1f12", "scanner": "scanner-primary", "fingerprint": "cc52cf2effd19da5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a2ca980949758d9", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/components/network/optimizer/inspector/priority-panel.tsx:22"}, "properties": {"repobilityId": "b9bd16b77b2e35a8", "scanner": "scanner-primary", "fingerprint": "0a2ca980949758d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-894cf609ed723f8a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/contract-detail-panel.tsx:177"}, "properties": {"repobilityId": "7abc87c0b54034e9", "scanner": "scanner-primary", "fingerprint": "894cf609ed723f8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8f098f9a2fe43c7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/charter-filter-panel.tsx:254"}, "properties": {"repobilityId": "8a5d725b5a43c156", "scanner": "scanner-primary", "fingerprint": "8f098f9a2fe43c7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8fc87b2b0b6d0471", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/charter/contract-list-panel.tsx:167"}, "properties": {"repobilityId": "c1d1fdaffdb0749c", "scanner": "scanner-primary", "fingerprint": "8fc87b2b0b6d0471", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c287277ed4855d1f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/skyai/skyai-history-menu.tsx:61"}, "properties": {"repobilityId": "7b0649a40e38e551", "scanner": "scanner-primary", "fingerprint": "c287277ed4855d1f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b9f06df12b28f0f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/daily-schedule/report-table.tsx:163"}, "properties": {"repobilityId": "f73cdece11cadea8", "scanner": "scanner-primary", "fingerprint": "0b9f06df12b28f0f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc70dbe1220d3918", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/daily-schedule/filter-panel.tsx:478"}, "properties": {"repobilityId": "95c13ba171da5681", "scanner": "scanner-primary", "fingerprint": "bc70dbe1220d3918", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c4bf32d09ce3863", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analysis-route-table.tsx:98"}, "properties": {"repobilityId": "e016aaa5d7315ded", "scanner": "scanner-primary", "fingerprint": "0c4bf32d09ce3863", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ada1009c6c50c2ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analysis-heatmap.tsx:164"}, "properties": {"repobilityId": "149b115b976268d0", "scanner": "scanner-primary", "fingerprint": "ada1009c6c50c2ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ce6fc7a4e2fe70e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/network/frequency-analysis/frequency-analysis-pattern-chart.tsx:164"}, "properties": {"repobilityId": "ec33e87a52d219f2", "scanner": "scanner-primary", "fingerprint": "5ce6fc7a4e2fe70e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2d644b804486b0e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/global-runway-progress.tsx:662"}, "properties": {"repobilityId": "12cf5bd417bcc2d0", "scanner": "scanner-primary", "fingerprint": "f2d644b804486b0e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d188126c550fb4ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/timezone-dropdown.tsx:185"}, "properties": {"repobilityId": "3c68b3ac66a66edf", "scanner": "scanner-primary", "fingerprint": "d188126c550fb4ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d67048431168a49", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/ListScreenHeader.tsx:65"}, "properties": {"repobilityId": "70c33cca4ce16526", "scanner": "scanner-primary", "fingerprint": "6d67048431168a49", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4fde99b9a4abb7ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/dropdown.tsx:127"}, "properties": {"repobilityId": "2468b6376adaa6c7", "scanner": "scanner-primary", "fingerprint": "4fde99b9a4abb7ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aecce0b70b294358", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/DetailScreenHeader.tsx:83"}, "properties": {"repobilityId": "ea9478f414a4df6c", "scanner": "scanner-primary", "fingerprint": "aecce0b70b294358", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb309205e4dd4f24", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/combobox.tsx:299"}, "properties": {"repobilityId": "f80a058bdb83d653", "scanner": "scanner-primary", "fingerprint": "bb309205e4dd4f24", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f6b9dacb44dfe0cb", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/runway-loading-panel.tsx:44"}, "properties": {"repobilityId": "1a1ab6f760c5345b", "scanner": "scanner-primary", "fingerprint": "f6b9dacb44dfe0cb", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1b1a009682aadb86", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/communication-deck/message-raw-card.tsx:376"}, "properties": {"repobilityId": "ef49513194f37035", "scanner": "scanner-primary", "fingerprint": "1b1a009682aadb86", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6d330c69950a9fbe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/communication-deck/release-all-modal.tsx:125"}, "properties": {"repobilityId": "c0789d2c6c55265e", "scanner": "scanner-primary", "fingerprint": "6d330c69950a9fbe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-67b26cf147d65e7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/selection-criteria/multi-select.tsx:40"}, "properties": {"repobilityId": "488e8cf48fa8fc6c", "scanner": "scanner-primary", "fingerprint": "67b26cf147d65e7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ecd64a9e3214c065", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/form-primitives.tsx:211"}, "properties": {"repobilityId": "77a03077c1fc1a25", "scanner": "scanner-primary", "fingerprint": "ecd64a9e3214c065", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-22fa3a508accc1af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-types/aircraft-type-detail.tsx:1352"}, "properties": {"repobilityId": "6e20cb2831ef5048", "scanner": "scanner-primary", "fingerprint": "22fa3a508accc1af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ba8fdc50112ef41c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-types/aircraft-type-list.tsx:115"}, "properties": {"repobilityId": "18d47ce4ac443fdc", "scanner": "scanner-primary", "fingerprint": "ba8fdc50112ef41c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8acc62ea3caf329c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/non-crew-people/non-crew-people-list.tsx:146"}, "properties": {"repobilityId": "b8e574a07eae805b", "scanner": "scanner-primary", "fingerprint": "8acc62ea3caf329c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9940227556be24e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/non-crew-people/non-crew-people-detail.tsx:619"}, "properties": {"repobilityId": "fb8399768aecedca", "scanner": "scanner-primary", "fingerprint": "9940227556be24e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f6cffddf48ac23ef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/duty-patterns/duty-pattern-detail.tsx:585"}, "properties": {"repobilityId": "51bcd2ab4e7e8b08", "scanner": "scanner-primary", "fingerprint": "f6cffddf48ac23ef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fa8bcf65bbf27072", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/duty-patterns/duty-pattern-list.tsx:125"}, "properties": {"repobilityId": "2bde6fdb699dd43e", "scanner": "scanner-primary", "fingerprint": "fa8bcf65bbf27072", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d63865c6b0f724a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-transport-vendors/crew-transport-vendor-list.tsx:129"}, "properties": {"repobilityId": "737d6ba93dca4596", "scanner": "scanner-primary", "fingerprint": "3d63865c6b0f724a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8220b6100313cee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/task-scheduler-shell.tsx:272"}, "properties": {"repobilityId": "ab9a3a2846c5de6f", "scanner": "scanner-primary", "fingerprint": "b8220b6100313cee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a2deab1b4e2d378", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/run-history-modal.tsx:101"}, "properties": {"repobilityId": "ffce9e9f19a66fb7", "scanner": "scanner-primary", "fingerprint": "3a2deab1b4e2d378", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-564de13adbe9b211", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/task-scheduler/task-config-drawer.tsx:119"}, "properties": {"repobilityId": "af5bc24d1ca39ec8", "scanner": "scanner-primary", "fingerprint": "564de13adbe9b211", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cdb41a3ad51f2125", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/operators/operators-shell.tsx:151"}, "properties": {"repobilityId": "85829f08fa4101dc", "scanner": "scanner-primary", "fingerprint": "cdb41a3ad51f2125", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93911e9b71b269a4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-positions/crew-position-detail.tsx:722"}, "properties": {"repobilityId": "396acafd19373394", "scanner": "scanner-primary", "fingerprint": "93911e9b71b269a4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd33423c7b0060cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-positions/crew-position-list.tsx:115"}, "properties": {"repobilityId": "c2d359c6a8ae1d6c", "scanner": "scanner-primary", "fingerprint": "cd33423c7b0060cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2d2bc129226792a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/maintenance-checks/maintenance-check-detail.tsx:843"}, "properties": {"repobilityId": "31f832a5f9a8c91d", "scanner": "scanner-primary", "fingerprint": "d2d2bc129226792a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9af58a7eaa05e6f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/maintenance-checks/maintenance-check-list.tsx:100"}, "properties": {"repobilityId": "9566233ede94cab8", "scanner": "scanner-primary", "fingerprint": "9af58a7eaa05e6f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7efd001d99ecbf12", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-hotels/crew-hotel-list.tsx:129"}, "properties": {"repobilityId": "c89e288b2bd25425", "scanner": "scanner-primary", "fingerprint": "7efd001d99ecbf12", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5987059bb4d6ef34", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-hotels/crew-hotel-detail.tsx:405"}, "properties": {"repobilityId": "5198484c71fa2482", "scanner": "scanner-primary", "fingerprint": "5987059bb4d6ef34", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51bf4911f00673fd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/service-types/service-types-shell.tsx:203"}, "properties": {"repobilityId": "4e8d0c5d3d88515d", "scanner": "scanner-primary", "fingerprint": "51bf4911f00673fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c133e185cedfad94", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/mpp-lead-times/mpp-group-list.tsx:86"}, "properties": {"repobilityId": "5027c9aa6ed99ab0", "scanner": "scanner-primary", "fingerprint": "c133e185cedfad94", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8362f041b58dbe08", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/mpp-lead-times/mpp-group-detail.tsx:512"}, "properties": {"repobilityId": "22dfd3481c8a0127", "scanner": "scanner-primary", "fingerprint": "8362f041b58dbe08", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-237f29b2feec0711", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ai-integration/ai-integration-shell.tsx:331"}, "properties": {"repobilityId": "44bde8239ff273c4", "scanner": "scanner-primary", "fingerprint": "237f29b2feec0711", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0dc5752aa86faddd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ai-integration/section-prompts.tsx:204"}, "properties": {"repobilityId": "88b019174ca742ea", "scanner": "scanner-primary", "fingerprint": "0dc5752aa86faddd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9dc3f077bdeeaebf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/fdtl-rules/fdtl-rules-hero.tsx:143"}, "properties": {"repobilityId": "540d2ae63674dca7", "scanner": "scanner-primary", "fingerprint": "9dc3f077bdeeaebf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7decb734c671fd9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/turnaround-template-list.tsx:165"}, "properties": {"repobilityId": "0a0d1b3f51ea770e", "scanner": "scanner-primary", "fingerprint": "b7decb734c671fd9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5422de4e9cc6d388", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/turnaround-template-detail.tsx:304"}, "properties": {"repobilityId": "2d73e2548ef0b2e0", "scanner": "scanner-primary", "fingerprint": "5422de4e9cc6d388", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62c18c309e95a448", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/service-definition-list.tsx:162"}, "properties": {"repobilityId": "4b20ef07a41bc502", "scanner": "scanner-primary", "fingerprint": "62c18c309e95a448", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9bbbdbfb48f1e49e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/sla-contract-detail.tsx:262"}, "properties": {"repobilityId": "fd3eca57ec3cd33c", "scanner": "scanner-primary", "fingerprint": "9bbbdbfb48f1e49e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bcf4ea4ec794c01c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/alert-rules-shell.tsx:322"}, "properties": {"repobilityId": "97d03d2d06bdbc91", "scanner": "scanner-primary", "fingerprint": "bcf4ea4ec794c01c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02b78d9b3e3d159a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/service-definition-detail.tsx:209"}, "properties": {"repobilityId": "121d083d3ac42d67", "scanner": "scanner-primary", "fingerprint": "02b78d9b3e3d159a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a5311edd9f4fc0d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/ground-handling-agent-list.tsx:134"}, "properties": {"repobilityId": "6a3e04c62454c167", "scanner": "scanner-primary", "fingerprint": "a5311edd9f4fc0d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d1ab87a830a9c7d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/ground-handling-agent-detail.tsx:215"}, "properties": {"repobilityId": "aebee095b58f13fa", "scanner": "scanner-primary", "fingerprint": "d1ab87a830a9c7d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7904c9d256cecb47", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/ground-ops-config/sla-contract-list.tsx:159"}, "properties": {"repobilityId": "4b355a22ad3e6bf8", "scanner": "scanner-primary", "fingerprint": "7904c9d256cecb47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb53cdee3c384c8a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/flight-training-activities/flight-training-activity-detail.tsx:627"}, "properties": {"repobilityId": "15acd49fb1a1fe48", "scanner": "scanner-primary", "fingerprint": "bb53cdee3c384c8a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2998b56fc9d742e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/flight-training-activities/flight-training-activity-list.tsx:120"}, "properties": {"repobilityId": "ce2780aa402d154d", "scanner": "scanner-primary", "fingerprint": "a2998b56fc9d742e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7b681b659f6d2da8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/airports/airport-list.tsx:110"}, "properties": {"repobilityId": "6f9b2d61835ffb00", "scanner": "scanner-primary", "fingerprint": "7b681b659f6d2da8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6836355efe6817b9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/airports/airport-detail.tsx:786"}, "properties": {"repobilityId": "f7e3999ff64a4c61", "scanner": "scanner-primary", "fingerprint": "6836355efe6817b9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7f8b112616458f0b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/transmission-config/transmission-config-shell.tsx:334"}, "properties": {"repobilityId": "19563c9b0ada7a29", "scanner": "scanner-primary", "fingerprint": "7f8b112616458f0b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e61193c5598b3523", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-registrations/aircraft-registration-list.tsx:125"}, "properties": {"repobilityId": "ef40f27f590c0a7b", "scanner": "scanner-primary", "fingerprint": "e61193c5598b3523", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2422de95bef07bab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/aircraft-registrations/aircraft-registration-detail.tsx:1187"}, "properties": {"repobilityId": "ba02ee804507fc04", "scanner": "scanner-primary", "fingerprint": "2422de95bef07bab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e9f547d942b7be56", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/delay-codes/delay-codes-shell.tsx:333"}, "properties": {"repobilityId": "b0dd106d6a63ce1d", "scanner": "scanner-primary", "fingerprint": "e9f547d942b7be56", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3067433537b37388", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/instructor-qual-codes/instructor-qual-code-detail.tsx:450"}, "properties": {"repobilityId": "1b0459931e93e622", "scanner": "scanner-primary", "fingerprint": "3067433537b37388", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6bde30d3f0ce9f0d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/instructor-qual-codes/instructor-qual-code-list.tsx:139"}, "properties": {"repobilityId": "b9aee913fe3b0484", "scanner": "scanner-primary", "fingerprint": "6bde30d3f0ce9f0d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2e39774896f7f501", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-facilities/training-facility-detail.tsx:550"}, "properties": {"repobilityId": "7150eb8212c5ec5f", "scanner": "scanner-primary", "fingerprint": "2e39774896f7f501", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3af6a852c1da5f1e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-facilities/training-facility-list.tsx:138"}, "properties": {"repobilityId": "8e7c74180c4febee", "scanner": "scanner-primary", "fingerprint": "3af6a852c1da5f1e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3d2fea722c75f6d1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/weather-integration/weather-integration-shell.tsx:264"}, "properties": {"repobilityId": "18b85920863ad065", "scanner": "scanner-primary", "fingerprint": "3d2fea722c75f6d1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c14218915e466195", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-groups/crew-group-detail.tsx:432"}, "properties": {"repobilityId": "c4c7575ffe04b15b", "scanner": "scanner-primary", "fingerprint": "c14218915e466195", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de1a26b22ef6cc64", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-groups/crew-group-list.tsx:93"}, "properties": {"repobilityId": "13bff9aeafb60114", "scanner": "scanner-primary", "fingerprint": "de1a26b22ef6cc64", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f377550f4a0968fa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/carrier-codes/carrier-codes-shell.tsx:270"}, "properties": {"repobilityId": "6893a541c164ffdb", "scanner": "scanner-primary", "fingerprint": "f377550f4a0968fa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9febf992065299f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-courses/training-course-list.tsx:131"}, "properties": {"repobilityId": "0639547d2f7f3e83", "scanner": "scanner-primary", "fingerprint": "9febf992065299f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4232066e821977ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/training-courses/training-course-detail.tsx:681"}, "properties": {"repobilityId": "e35c79156de05680", "scanner": "scanner-primary", "fingerprint": "4232066e821977ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7119c17ede75e53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/smtp-config/smtp-config-shell.tsx:242"}, "properties": {"repobilityId": "79af74b6bb805c7a", "scanner": "scanner-primary", "fingerprint": "a7119c17ede75e53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6079d139fdd5d4a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-bases/crew-bases-shell.tsx:284"}, "properties": {"repobilityId": "c4359da7bb3f7d89", "scanner": "scanner-primary", "fingerprint": "6079d139fdd5d4a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-21b180b338ad8705", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/cabin-class-detail.tsx:851"}, "properties": {"repobilityId": "7832903c5f4f864f", "scanner": "scanner-primary", "fingerprint": "21b180b338ad8705", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-63650ca243307f3d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/lopa-config-detail.tsx:1000"}, "properties": {"repobilityId": "66d1349bad61c74c", "scanner": "scanner-primary", "fingerprint": "63650ca243307f3d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dac1050bf75aa907", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/lopa/lopa-list.tsx:152"}, "properties": {"repobilityId": "ea3b9e9f88cfa1dd", "scanner": "scanner-primary", "fingerprint": "dac1050bf75aa907", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc16cac468778a18", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-complements/crew-complement-table.tsx:393"}, "properties": {"repobilityId": "3467b41a069886ae", "scanner": "scanner-primary", "fingerprint": "bc16cac468778a18", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-729b8f8d7b4a1a96", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/crew-complements/crew-complement-type-list.tsx:57"}, "properties": {"repobilityId": "04826478df4cbda0", "scanner": "scanner-primary", "fingerprint": "729b8f8d7b4a1a96", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-549f2a8d80c138a1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/expiry-codes/expiry-code-list.tsx:141"}, "properties": {"repobilityId": "ae6ca0d699ffd1f0", "scanner": "scanner-primary", "fingerprint": "549f2a8d80c138a1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b6d311473d736b3e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/activity-codes/activity-code-list.tsx:294"}, "properties": {"repobilityId": "cb9b275979862491", "scanner": "scanner-primary", "fingerprint": "b6d311473d736b3e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44a1d0ffd8e02db3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/city-pairs/citypair-detail.tsx:1387"}, "properties": {"repobilityId": "4576f4544e02d12c", "scanner": "scanner-primary", "fingerprint": "44a1d0ffd8e02db3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4d90480b8be4bfc3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/city-pairs/citypair-list.tsx:124"}, "properties": {"repobilityId": "60410f10b6a874d9", "scanner": "scanner-primary", "fingerprint": "4d90480b8be4bfc3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a2dccddcf7e1ba05", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/countries/country-detail.tsx:807"}, "properties": {"repobilityId": "b7d7ff24daafa8c9", "scanner": "scanner-primary", "fingerprint": "a2dccddcf7e1ba05", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-60ead8ac4e21f773", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/countries/country-list.tsx:77"}, "properties": {"repobilityId": "fdc97e4aa887076d", "scanner": "scanner-primary", "fingerprint": "60ead8ac4e21f773", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c946de3d7565ba43", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/consumer-form-modal.tsx:476"}, "properties": {"repobilityId": "976c56b78eff2e2d", "scanner": "scanner-primary", "fingerprint": "c946de3d7565ba43", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ebf2c2185ac70a89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/section-held.tsx:289"}, "properties": {"repobilityId": "d345c5aa308e7e1a", "scanner": "scanner-primary", "fingerprint": "ebf2c2185ac70a89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5378b8b594e0ce1c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/asm-ssm-transmission-shell.tsx:265"}, "properties": {"repobilityId": "5cb2d8a55f88d36c", "scanner": "scanner-primary", "fingerprint": "5378b8b594e0ce1c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed4bfa2750e5ac3d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/asm-ssm-transmission/section-consumers.tsx:183"}, "properties": {"repobilityId": "95ebd204475aa336", "scanner": "scanner-primary", "fingerprint": "ed4bfa2750e5ac3d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb67533346ad9e41", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/_shared/aircraft-type-multi-select.tsx:253"}, "properties": {"repobilityId": "a31772cfb176bbe9", "scanner": "scanner-primary", "fingerprint": "eb67533346ad9e41", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-abff54de9a2c2faa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/admin/_shared/role-select.tsx:106"}, "properties": {"repobilityId": "42ee1c0ca25c85f0", "scanner": "scanner-primary", "fingerprint": "abff54de9a2c2faa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9ab90fec8fd0f91d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/journey-log/signature-pad.tsx:34"}, "properties": {"repobilityId": "74b220e2511bdae8", "scanner": "scanner-primary", "fingerprint": "9ab90fec8fd0f91d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-3db90c9194f7a451", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/journey-log/journey-log-occ-shell.tsx:316"}, "properties": {"repobilityId": "8b16327bac11ec15", "scanner": "scanner-primary", "fingerprint": "3db90c9194f7a451", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e7c658f9148bbe98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/fuel-charts.tsx:245"}, "properties": {"repobilityId": "79ca6eac3f1622b0", "scanner": "scanner-primary", "fingerprint": "e7c658f9148bbe98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-60ecad11b6dc6c7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/RadialNavigator.tsx:308"}, "properties": {"repobilityId": "0c291b8cf9fc1bc4", "scanner": "scanner-primary", "fingerprint": "60ecad11b6dc6c7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-078baa62276154c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/SyncedBreakdown.tsx:56"}, "properties": {"repobilityId": "77baff89da066bd2", "scanner": "scanner-primary", "fingerprint": "078baa62276154c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d716b24304a26b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/fuel-report/intel/NodeDetailDrawer.tsx:261"}, "properties": {"repobilityId": "db0cb004e984d6bc", "scanner": "scanner-primary", "fingerprint": "2d716b24304a26b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8fa10f5e8756909e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-report/annual-table.tsx:373"}, "properties": {"repobilityId": "803e86994e2d0112", "scanner": "scanner-primary", "fingerprint": "8fa10f5e8756909e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d2340f75cb55694b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/optimize-tails-dialog.tsx:615"}, "properties": {"repobilityId": "f4b344458b933bbe", "scanner": "scanner-primary", "fingerprint": "d2340f75cb55694b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61d1a4af97c0c154", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/gantt/recovery-dialog.tsx:408"}, "properties": {"repobilityId": "a439bbc58bf85903", "scanner": "scanner-primary", "fingerprint": "61d1a4af97c0c154", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b58501e06e9ff38e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/mvt-message-dialog.tsx:287"}, "properties": {"repobilityId": "1962844e5e57af3d", "scanner": "scanner-primary", "fingerprint": "b58501e06e9ff38e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58d4496c31b39856", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/communication-panel.tsx:307"}, "properties": {"repobilityId": "40f3da13a797d058", "scanner": "scanner-primary", "fingerprint": "58d4496c31b39856", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-650cd7b5524e155b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/recovery-solutions-panel.tsx:179"}, "properties": {"repobilityId": "f7ecb7ec69c832f1", "scanner": "scanner-primary", "fingerprint": "650cd7b5524e155b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-221c8bae6ebd5776", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/gantt/asm-message-dialog.tsx:218"}, "properties": {"repobilityId": "44349fafb528d162", "scanner": "scanner-primary", "fingerprint": "221c8bae6ebd5776", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-17d1cc289b752f48", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/block-time-report/result-table.tsx:110"}, "properties": {"repobilityId": "f5fbfa926644c80b", "scanner": "scanner-primary", "fingerprint": "17d1cc289b752f48", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4001298494a72ffd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/block-time-report/block-time-explore.tsx:182"}, "properties": {"repobilityId": "54040c546e14dde3", "scanner": "scanner-primary", "fingerprint": "4001298494a72ffd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42c8217c8cd67b55", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-config/emissions-config-header.tsx:53"}, "properties": {"repobilityId": "477fd127f9c950d1", "scanner": "scanner-primary", "fingerprint": "42c8217c8cd67b55", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3eb9daa5e2120aef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/emissions-config/section-sidebar.tsx:62"}, "properties": {"repobilityId": "f49b256e4dc44f59", "scanner": "scanner-primary", "fingerprint": "3eb9daa5e2120aef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0eff4176936f1994", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/daily-ops-summary/panels.tsx:275"}, "properties": {"repobilityId": "c378740f3dfda3cd", "scanner": "scanner-primary", "fingerprint": "0eff4176936f1994", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4b662276c0ed9da3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/panels.tsx:319"}, "properties": {"repobilityId": "3826bd939cec0216", "scanner": "scanner-primary", "fingerprint": "4b662276c0ed9da3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5bafa86454c3e460", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/detail-table.tsx:154"}, "properties": {"repobilityId": "1ff4ab4edf9e6015", "scanner": "scanner-primary", "fingerprint": "5bafa86454c3e460", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec5aa6f0bce412c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/irops-report/category-donut.tsx:89"}, "properties": {"repobilityId": "6c036733df72aec4", "scanner": "scanner-primary", "fingerprint": "ec5aa6f0bce412c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd37aa974250999e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/skyai/proposal-diff-modal.tsx:337"}, "properties": {"repobilityId": "6dceaef53434bcbd", "scanner": "scanner-primary", "fingerprint": "cd37aa974250999e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82c62676aba9ec1f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/skyai/flight-ops-skyai-launcher.tsx:536"}, "properties": {"repobilityId": "81b1b5eaf99e0c52", "scanner": "scanner-primary", "fingerprint": "82c62676aba9ec1f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b8e15cbce37eb2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/disruption-center/ai-customization/ai-customization-shell.tsx:356"}, "properties": {"repobilityId": "cc068f2ce8dd897b", "scanner": "scanner-primary", "fingerprint": "5b8e15cbce37eb2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f88bac681ec6c48", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/occ-flight-row.tsx:69"}, "properties": {"repobilityId": "07d029f36982c12c", "scanner": "scanner-primary", "fingerprint": "1f88bac681ec6c48", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b3b8e9318e88169", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/band-data-feeds.tsx:220"}, "properties": {"repobilityId": "045808a8d53974f0", "scanner": "scanner-primary", "fingerprint": "5b3b8e9318e88169", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39a132183f3302f1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/flight-ops/control/occ-dashboard/occ-hero.tsx:193"}, "properties": {"repobilityId": "d0c61b927181921c", "scanner": "scanner-primary", "fingerprint": "39a132183f3302f1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0bd1deff6e35ba1f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/performance-factor/period-sidebar.tsx:72"}, "properties": {"repobilityId": "2a2d004e22ae342f", "scanner": "scanner-primary", "fingerprint": "0bd1deff6e35ba1f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8da76ad0fcac8137", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/flight-ops/performance-factor/pf-center.tsx:97"}, "properties": {"repobilityId": "f8d1d9fe8e11ade2", "scanner": "scanner-primary", "fingerprint": "8da76ad0fcac8137", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f0d96a9d129aa9e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/maintenance/status-board/aircraft-strip-row.tsx:198"}, "properties": {"repobilityId": "605c05148362e7fb", "scanner": "scanner-primary", "fingerprint": "f0d96a9d129aa9e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a76ee6dec46d9ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/maintenance/planning/planning-gantt-row.tsx:200"}, "properties": {"repobilityId": "e3e5041dac2acec1", "scanner": "scanner-primary", "fingerprint": "6a76ee6dec46d9ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fdf57ac2cafcde3a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ground-ops/flight-view/dialogs/vehicle-dispatch-dialog.tsx:313"}, "properties": {"repobilityId": "8684828d9c2c65c4", "scanner": "scanner-primary", "fingerprint": "fdf57ac2cafcde3a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-854649923a0008df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/world-map/world-map-kpi-panels.tsx:67"}, "properties": {"repobilityId": "f527e6410ad60d9e", "scanner": "scanner-primary", "fingerprint": "854649923a0008df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d13fceab5df0e23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/world-map/world-map-clock-dock.tsx:335"}, "properties": {"repobilityId": "8a86c904f46164a3", "scanner": "scanner-primary", "fingerprint": "2d13fceab5df0e23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-953cd27fd9f228c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-comparison/sections/section-frame.tsx:35"}, "properties": {"repobilityId": "85a93646489adc97", "scanner": "scanner-primary", "fingerprint": "953cd27fd9f228c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-667ee774507e9afa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-comparison/sections/fleet-mix-donut.tsx:224"}, "properties": {"repobilityId": "748d9a04e1a34c25", "scanner": "scanner-primary", "fingerprint": "667ee774507e9afa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-76fcd40f1e464ab1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ssim-import/parsed-preview.tsx:181"}, "properties": {"repobilityId": "54d85306195b6d35", "scanner": "scanner-primary", "fingerprint": "76fcd40f1e464ab1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e1b9817c01fae1a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/settings/admin/operator-config/page.tsx:240"}, "properties": {"repobilityId": "a06cbb9dce56a2b0", "scanner": "scanner-primary", "fingerprint": "0e1b9817c01fae1a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6703eaace8ed802a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/hub/page.tsx:964"}, "properties": {"repobilityId": "a0af5688cdb2e5ad", "scanner": "scanner-primary", "fingerprint": "6703eaace8ed802a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8fe752900cde96b6", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/page.tsx:93"}, "properties": {"repobilityId": "09dc3fdcd78e344c", "scanner": "scanner-primary", "fingerprint": "8fe752900cde96b6", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7ebc550ab59b6c14", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/reset-password/page.tsx:115"}, "properties": {"repobilityId": "40cd748ee8cba15d", "scanner": "scanner-primary", "fingerprint": "7ebc550ab59b6c14", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-33b74a0b8ea32375", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/app/login/forgot-password/page.tsx:63"}, "properties": {"repobilityId": "2293e81cf3397b53", "scanner": "scanner-primary", "fingerprint": "33b74a0b8ea32375", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-238e81ae56997fdd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/admin/page.tsx:406"}, "properties": {"repobilityId": "50efa0c08d598c01", "scanner": "scanner-primary", "fingerprint": "238e81ae56997fdd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-13b610441af0e21b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/app/ground-ops/cargo/cargo-manifest/components/LoadingDock.tsx:78"}, "properties": {"repobilityId": "c3818a4b0e566266", "scanner": "scanner-primary", "fingerprint": "13b610441af0e21b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84884de7f19f0b99", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/read-test-plan.js:9"}, "properties": {"repobilityId": "9c7b006195e54c5c", "scanner": "scanner-primary", "fingerprint": "84884de7f19f0b99", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04406ef0df8f4b5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/gen-crew-schedule-test-plan.js:474"}, "properties": {"repobilityId": "bfe52ae8fe8c4629", "scanner": "scanner-primary", "fingerprint": "04406ef0df8f4b5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0058d9d8f22b450", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/copy-audit.ts:466"}, "properties": {"repobilityId": "a8900c2008aaead2", "scanner": "scanner-primary", "fingerprint": "e0058d9d8f22b450", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d84b7c6a7b509462", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/hooks/pre-commit.js:66"}, "properties": {"repobilityId": "d38c079d64f6f990", "scanner": "scanner-primary", "fingerprint": "d84b7c6a7b509462", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b096c0d6f4c6964", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/constants/src/operators.ts:21"}, "properties": {"repobilityId": "7239c4c851514cba", "scanner": "scanner-primary", "fingerprint": "6b096c0d6f4c6964", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-54dbeec9391ad0b1", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/validator.ts:6"}, "properties": {"repobilityId": "105721fdc252f823", "scanner": "scanner-primary", "fingerprint": "54dbeec9391ad0b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a7cbabf7086b763b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/seed-operator-rules.ts:16"}, "properties": {"repobilityId": "5348f4ae7a6bdc93", "scanner": "scanner-primary", "fingerprint": "a7cbabf7086b763b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0fe6bfbfce29251e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/fdtl/engine.ts:8"}, "properties": {"repobilityId": "115426014ccada3a", "scanner": "scanner-primary", "fingerprint": "0fe6bfbfce29251e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-fd57ed0787744ec0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/geo.ts:95"}, "properties": {"repobilityId": "0a10d34be7ba5d1d", "scanner": "scanner-primary", "fingerprint": "fd57ed0787744ec0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-80593191a992524f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/advisor-summary-builder.ts:1"}, "properties": {"repobilityId": "d242aa3653d93943", "scanner": "scanner-primary", "fingerprint": "80593191a992524f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6566929eb899be3a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/schedule-rule-evaluator.ts:1"}, "properties": {"repobilityId": "3645943dd17bf6ab", "scanner": "scanner-primary", "fingerprint": "6566929eb899be3a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-d99e43b66df3b39a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/utils/solver-stream.ts:1"}, "properties": {"repobilityId": "24eda89c0e6f87e6", "scanner": "scanner-primary", "fingerprint": "d99e43b66df3b39a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4e2ed9b602fd83d6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/messaging/slot-message-parser.ts:8"}, "properties": {"repobilityId": "10228de792cfdef3", "scanner": "scanner-primary", "fingerprint": "4e2ed9b602fd83d6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e799df6d1fd2c396", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/logic/src/messaging/slot-message-generator.ts:8"}, "properties": {"repobilityId": "ea90a8db6218edbd", "scanner": "scanner-primary", "fingerprint": "e799df6d1fd2c396", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ff1d8d805a6344fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-may1-coverage.ts:115"}, "properties": {"repobilityId": "b3b45d02ca8002ec", "scanner": "scanner-primary", "fingerprint": "ff1d8d805a6344fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2731566eed3a5feb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-stability-report.ts:42"}, "properties": {"repobilityId": "8c618fc91bb8e480", "scanner": "scanner-primary", "fingerprint": "2731566eed3a5feb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-03d5a059fc86854a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-aug-upgrade.ts:43"}, "properties": {"repobilityId": "f9fd24a1c7002e53", "scanner": "scanner-primary", "fingerprint": "03d5a059fc86854a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a3ac9d7180d379a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/migrate-core-modules-on.ts:22"}, "properties": {"repobilityId": "44fb0588dba77ab5", "scanner": "scanner-primary", "fingerprint": "1a3ac9d7180d379a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb49ddd5854d6824", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/audit-activity-code-rest.ts:40"}, "properties": {"repobilityId": "f1efe2ac97228c62", "scanner": "scanner-primary", "fingerprint": "fb49ddd5854d6824", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-581ec5b97c182802", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-fdtl-computation-type.ts:45"}, "properties": {"repobilityId": "c874f8253f26a2ff", "scanner": "scanner-primary", "fingerprint": "581ec5b97c182802", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9d9d227697c376c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-ca-sgn-shortfall.ts:161"}, "properties": {"repobilityId": "c610b93b812a6685", "scanner": "scanner-primary", "fingerprint": "e9d9d227697c376c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-83f223ed57712f53", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/inspect-aircraft-image.ts:31"}, "properties": {"repobilityId": "acaf3f011ded9097", "scanner": "scanner-primary", "fingerprint": "83f223ed57712f53", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1326358df096fe9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-seed-coverage.ts:33"}, "properties": {"repobilityId": "582c706f95dfdfed", "scanner": "scanner-primary", "fingerprint": "d1326358df096fe9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aecf0a1ae6761fb1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-tail-optimizer-e2e.ts:37"}, "properties": {"repobilityId": "4b4dc6a7dedf6afe", "scanner": "scanner-primary", "fingerprint": "aecf0a1ae6761fb1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b103635b61fb1b35", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-actuals-fdtl.ts:46"}, "properties": {"repobilityId": "2a2866ec64ef992c", "scanner": "scanner-primary", "fingerprint": "b103635b61fb1b35", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f41b5f8d6817423b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/check-active-bulletins.ts:21"}, "properties": {"repobilityId": "1244e9c9c64ee774", "scanner": "scanner-primary", "fingerprint": "f41b5f8d6817423b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-514cbb3803c70f98", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/verify-openai-key.ts:34"}, "properties": {"repobilityId": "a42b7e1c4275e658", "scanner": "scanner-primary", "fingerprint": "514cbb3803c70f98", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-069aedcee4f2b651", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/drop-stale-operator-scheduling-index.ts:11"}, "properties": {"repobilityId": "2c5749c614de2fc1", "scanner": "scanner-primary", "fingerprint": "069aedcee4f2b651", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbc8aa8aead6a31f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-pu-day-distribution.ts:194"}, "properties": {"repobilityId": "20f9589000b3ea43", "scanner": "scanner-primary", "fingerprint": "fbc8aa8aead6a31f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1969daec888c0b30", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/seed-runway-bulletin.ts:70"}, "properties": {"repobilityId": "aac66826cbdb9c03", "scanner": "scanner-primary", "fingerprint": "1969daec888c0b30", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ede0cce6c3310879", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/backfill-flight-climatology.ts:79"}, "properties": {"repobilityId": "cf03e606554d5096", "scanner": "scanner-primary", "fingerprint": "ede0cce6c3310879", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6559791a7acbc10d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-pairopt-fdtl.ts:26"}, "properties": {"repobilityId": "e16dc428af970f2c", "scanner": "scanner-primary", "fingerprint": "6559791a7acbc10d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78c5427c826d04e7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-colgen-e2e.ts:63"}, "properties": {"repobilityId": "1ba022175f960d4e", "scanner": "scanner-primary", "fingerprint": "78c5427c826d04e7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ec27499e812b74a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/reextract-bulletin-scopes.ts:28"}, "properties": {"repobilityId": "a09d41736423b70c", "scanner": "scanner-primary", "fingerprint": "ec27499e812b74a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1615a9b127add8f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/fit-s-curve.ts:98"}, "properties": {"repobilityId": "8fcd3da8e1dae7a7", "scanner": "scanner-primary", "fingerprint": "1615a9b127add8f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-488ac49a37f71fe3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/patch-off-color.ts:16"}, "properties": {"repobilityId": "687eaee6340ddfc8", "scanner": "scanner-primary", "fingerprint": "488ac49a37f71fe3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31e475b7a1faa6a9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/check-flight-ops-ai-accuracy.ts:74"}, "properties": {"repobilityId": "06f373073d7df299", "scanner": "scanner-primary", "fingerprint": "31e475b7a1faa6a9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6af8a08e301c089a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/scripts/probe-duty-amendments.ts:52"}, "properties": {"repobilityId": "054068a07c3e8d95", "scanner": "scanner-primary", "fingerprint": "6af8a08e301c089a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7cff54047db1c70", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-hotel-contacts.ts:69"}, "properties": {"repobilityId": "7c484f429a0168b9", "scanner": "scanner-primary", "fingerprint": "a7cff54047db1c70", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-085eaef7b4e4db79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-performance-factors.ts:42"}, "properties": {"repobilityId": "7522a2308af936f7", "scanner": "scanner-primary", "fingerprint": "085eaef7b4e4db79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ec0927d412de33d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-contacts.ts:212"}, "properties": {"repobilityId": "2f7f9e97f4036e90", "scanner": "scanner-primary", "fingerprint": "2ec0927d412de33d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1baac6d54bd0f46c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/dedupe-scheduled-flights.ts:23"}, "properties": {"repobilityId": "6b021747035939d4", "scanner": "scanner-primary", "fingerprint": "1baac6d54bd0f46c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-042f99ee1ce4383e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-ground-ops.ts:162"}, "properties": {"repobilityId": "5596f4a03a5469c7", "scanner": "scanner-primary", "fingerprint": "042f99ee1ce4383e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-813ce4d5dd8d9ebc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/run-oooi-reseed.ts:32"}, "properties": {"repobilityId": "beb9cf02b60d95bb", "scanner": "scanner-primary", "fingerprint": "813ce4d5dd8d9ebc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-115debf5d0fd780b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-vac-scatter.ts:49"}, "properties": {"repobilityId": "93163f830db9aa81", "scanner": "scanner-primary", "fingerprint": "115debf5d0fd780b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cd61cdd376fb96b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/trim-cabin.ts:25"}, "properties": {"repobilityId": "e84c52e95325e969", "scanner": "scanner-primary", "fingerprint": "7cd61cdd376fb96b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-48f6f35966be9c77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/issue-pin-eid.ts:41"}, "properties": {"repobilityId": "0bb062ed03ed62ea", "scanner": "scanner-primary", "fingerprint": "48f6f35966be9c77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8be66a3d900d5f25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/repair-tail-overlaps.ts:58"}, "properties": {"repobilityId": "7cbc368c4bbf232d", "scanner": "scanner-primary", "fingerprint": "8be66a3d900d5f25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d79e3962b9b57f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/purge-crew-positions.ts:41"}, "properties": {"repobilityId": "03d75165d55ee724", "scanner": "scanner-primary", "fingerprint": "1d79e3962b9b57f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5c64cfc1b7c1f572", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-pairing-tails.ts:49"}, "properties": {"repobilityId": "698ff3b2e829c068", "scanner": "scanner-primary", "fingerprint": "5c64cfc1b7c1f572", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7260502cb38902a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-ca-han-topup.ts:241"}, "properties": {"repobilityId": "69ecacae72a75859", "scanner": "scanner-primary", "fingerprint": "7260502cb38902a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1b5ef5c54176cd1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-capacity-ledger.ts:23"}, "properties": {"repobilityId": "12907a2166126e2b", "scanner": "scanner-primary", "fingerprint": "b1b5ef5c54176cd1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-94e4a4cdae3ca840", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-flight-instance-dates.ts:20"}, "properties": {"repobilityId": "14900ccfab73da3b", "scanner": "scanner-primary", "fingerprint": "94e4a4cdae3ca840", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e19bbfbb9ee8b79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-one-assignment.ts:28"}, "properties": {"repobilityId": "90214a10dd4c1538", "scanner": "scanner-primary", "fingerprint": "3e19bbfbb9ee8b79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b8c29a9661ff4eb8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-cabin-shortfall-topup.ts:233"}, "properties": {"repobilityId": "68393d03cf020b27", "scanner": "scanner-primary", "fingerprint": "b8c29a9661ff4eb8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d2ca15fbd4c213f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-user.ts:29"}, "properties": {"repobilityId": "bd3c4e34f3f1a0dd", "scanner": "scanner-primary", "fingerprint": "6d2ca15fbd4c213f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be66ed5be8be0e73", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/purge-stale-crewcounts.ts:43"}, "properties": {"repobilityId": "1021f91a5c62f9d5", "scanner": "scanner-primary", "fingerprint": "be66ed5be8be0e73", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6e6467a9ad79392", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-duty-amendment-rules.ts:76"}, "properties": {"repobilityId": "73cd014c9e323d6f", "scanner": "scanner-primary", "fingerprint": "d6e6467a9ad79392", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-15e9c6bcf71f3c1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-irops.ts:32"}, "properties": {"repobilityId": "e25e70241e3f3d34", "scanner": "scanner-primary", "fingerprint": "15e9c6bcf71f3c1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8a3b17dae53d1d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-positions.ts:20"}, "properties": {"repobilityId": "8ee2c3807877376d", "scanner": "scanner-primary", "fingerprint": "a8a3b17dae53d1d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ca477a97c4fa29fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-al-scatter.ts:50"}, "properties": {"repobilityId": "8f016a8cb884de94", "scanner": "scanner-primary", "fingerprint": "ca477a97c4fa29fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dea2fd5ef5b0715e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-10178.ts:19"}, "properties": {"repobilityId": "ef490be0e03c9354", "scanner": "scanner-primary", "fingerprint": "dea2fd5ef5b0715e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b96d8bf67380be1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-runways.ts:50"}, "properties": {"repobilityId": "f4aca3101b0d49cf", "scanner": "scanner-primary", "fingerprint": "4b96d8bf67380be1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-63401a20197837a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-capital-coords.ts:230"}, "properties": {"repobilityId": "f1e21575e8c67445", "scanner": "scanner-primary", "fingerprint": "63401a20197837a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c81bdae7bacb76f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-ground-handling-agents.ts:65"}, "properties": {"repobilityId": "5ba58e13e2056ea8", "scanner": "scanner-primary", "fingerprint": "c81bdae7bacb76f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c20312f87e5178f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/count-pu-fa.ts:12"}, "properties": {"repobilityId": "b8b594bfaa859b50", "scanner": "scanner-primary", "fingerprint": "c20312f87e5178f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87e4ddcbd33359a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-smart-actuals.ts:60"}, "properties": {"repobilityId": "24d92d4d41aed927", "scanner": "scanner-primary", "fingerprint": "87e4ddcbd33359a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65a198c645273d6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-expiries-lastdone.ts:26"}, "properties": {"repobilityId": "2a7fe33d4e856287", "scanner": "scanner-primary", "fingerprint": "65a198c645273d6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d70c6b07418d8849", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-expiry-positions.ts:28"}, "properties": {"repobilityId": "6d2cddb6e1e0670b", "scanner": "scanner-primary", "fingerprint": "d70c6b07418d8849", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60c9e7b7e67d8a1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-tail.ts:11"}, "properties": {"repobilityId": "313b2adf4f6a4209", "scanner": "scanner-primary", "fingerprint": "60c9e7b7e67d8a1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d970f4e460657ae6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-skyai-license-grandfather.ts:26"}, "properties": {"repobilityId": "bc7c4b57ee19bc4a", "scanner": "scanner-primary", "fingerprint": "d970f4e460657ae6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-00a5c7c68f483e12", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-al-to-vac.ts:21"}, "properties": {"repobilityId": "9c955dc80ca477f8", "scanner": "scanner-primary", "fingerprint": "00a5c7c68f483e12", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb4110219d61a15d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-pairings.ts:10"}, "properties": {"repobilityId": "9ecc8cc9c495438c", "scanner": "scanner-primary", "fingerprint": "cb4110219d61a15d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-896e70b4590dc65b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-maintenance-events.ts:27"}, "properties": {"repobilityId": "261f6e1ead3b6c3c", "scanner": "scanner-primary", "fingerprint": "896e70b4590dc65b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7b50c5bd6bb59a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/mark-sby-system.ts:49"}, "properties": {"repobilityId": "3be50ad0b33ebd7b", "scanner": "scanner-primary", "fingerprint": "a7b50c5bd6bb59a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aab07b6a91e2874e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed.ts:178"}, "properties": {"repobilityId": "7e3864f3a43db1f4", "scanner": "scanner-primary", "fingerprint": "aab07b6a91e2874e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b4dbc8bc27f82eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/check-gantt-overlap.ts:37"}, "properties": {"repobilityId": "16bb83032d0d4768", "scanner": "scanner-primary", "fingerprint": "0b4dbc8bc27f82eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef80909b24403f2b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-rbac.ts:19"}, "properties": {"repobilityId": "758bb53ba480d1ef", "scanner": "scanner-primary", "fingerprint": "ef80909b24403f2b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bcd0853eeb928d1e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/trim-cabin-buffer.ts:30"}, "properties": {"repobilityId": "fc858cd91310d70a", "scanner": "scanner-primary", "fingerprint": "bcd0853eeb928d1e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f9a2c190869529a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-aug-max-sectors.ts:44"}, "properties": {"repobilityId": "be590b7c3ad10b65", "scanner": "scanner-primary", "fingerprint": "f9a2c190869529a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05c32ad26bd160ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-complements.ts:13"}, "properties": {"repobilityId": "d9e3830c75bfd673", "scanner": "scanner-primary", "fingerprint": "05c32ad26bd160ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-160698144c93155c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/index.ts:281"}, "properties": {"repobilityId": "966123b8e19cb728", "scanner": "scanner-primary", "fingerprint": "160698144c93155c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-760c9eb5d12dd272", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-hotels.ts:256"}, "properties": {"repobilityId": "e2b5170e02a93cab", "scanner": "scanner-primary", "fingerprint": "760c9eb5d12dd272", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1c22d3c7dbb5a5d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-elp-groups.ts:63"}, "properties": {"repobilityId": "ef31340d6d69ab60", "scanner": "scanner-primary", "fingerprint": "b1c22d3c7dbb5a5d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f586fddebef9e945", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/purge-stale-elp-expiries.ts:33"}, "properties": {"repobilityId": "97b85be7478df4df", "scanner": "scanner-primary", "fingerprint": "f586fddebef9e945", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-58c3b7ddd2f29179", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/check-scheduling-cfg.ts:10"}, "properties": {"repobilityId": "268aa4df999fe883", "scanner": "scanner-primary", "fingerprint": "58c3b7ddd2f29179", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ba97a1512ff5aad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-a320-cp.ts:284"}, "properties": {"repobilityId": "31ce41fb59787f46", "scanner": "scanner-primary", "fingerprint": "5ba97a1512ff5aad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6b857dd362574c4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/cleanup-sample-pairings.ts:12"}, "properties": {"repobilityId": "3d3c810486879b64", "scanner": "scanner-primary", "fingerprint": "6b857dd362574c4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7bbfbadb615ea1b0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-10204.ts:19"}, "properties": {"repobilityId": "1125240a0c1fa2c1", "scanner": "scanner-primary", "fingerprint": "7bbfbadb615ea1b0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-247e1f4ddc7952de", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/diagnose-unassigned.ts:34"}, "properties": {"repobilityId": "257148055ae0f076", "scanner": "scanner-primary", "fingerprint": "247e1f4ddc7952de", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3d77d4ea0668a2f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/purge-pairing-seat-codes.ts:26"}, "properties": {"repobilityId": "f6c84f02aa9f7a40", "scanner": "scanner-primary", "fingerprint": "a3d77d4ea0668a2f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-02756b1a2a126707", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/diagnose-tail-overlap.ts:46"}, "properties": {"repobilityId": "dcb122dd5d69cb5f", "scanner": "scanner-primary", "fingerprint": "02756b1a2a126707", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbbf151495adba56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/diag-crew-10178.ts:15"}, "properties": {"repobilityId": "d01f14de4045c9a9", "scanner": "scanner-primary", "fingerprint": "dbbf151495adba56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-335e5f31d77bceec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-fleet.ts:14"}, "properties": {"repobilityId": "dd0211560b30d2f5", "scanner": "scanner-primary", "fingerprint": "335e5f31d77bceec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc9c3a9e1cdd4b74", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-journeylog-pairingid.ts:27"}, "properties": {"repobilityId": "2af6e05134da2300", "scanner": "scanner-primary", "fingerprint": "dc9c3a9e1cdd4b74", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9375bb1ccb4b6489", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-passports.ts:63"}, "properties": {"repobilityId": "44437b18f6693533", "scanner": "scanner-primary", "fingerprint": "9375bb1ccb4b6489", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-016a344f3f7ece04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-cargo-categories.ts:29"}, "properties": {"repobilityId": "f8146cbbd35fb109", "scanner": "scanner-primary", "fingerprint": "016a344f3f7ece04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5313cc955ff941f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-bulk-assignments.ts:40"}, "properties": {"repobilityId": "b0d1e3094a17bc5b", "scanner": "scanner-primary", "fingerprint": "a5313cc955ff941f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fff02917e224d4cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/trim-crew.ts:32"}, "properties": {"repobilityId": "ecb7739f5ee5f212", "scanner": "scanner-primary", "fingerprint": "fff02917e224d4cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a439af370ef72e16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-crew-iso3.ts:36"}, "properties": {"repobilityId": "02e715ab6c739bf1", "scanner": "scanner-primary", "fingerprint": "a439af370ef72e16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d40fa5033f0db1aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-fdtl-scheme.ts:12"}, "properties": {"repobilityId": "6ebd4e46f3fc13fe", "scanner": "scanner-primary", "fingerprint": "d40fa5033f0db1aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-66d9547cf45f89f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-all-fleets.ts:484"}, "properties": {"repobilityId": "f2c2dc152c519f26", "scanner": "scanner-primary", "fingerprint": "66d9547cf45f89f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f10c0e83bb2866e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-lopa.ts:80"}, "properties": {"repobilityId": "ba1e4bed249ed5dc", "scanner": "scanner-primary", "fingerprint": "9f10c0e83bb2866e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af237ab588beb214", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-gendec-check.ts:57"}, "properties": {"repobilityId": "cef7c266fa6b601a", "scanner": "scanner-primary", "fingerprint": "af237ab588beb214", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f7473e72a1ffb67d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-date-formats.ts:18"}, "properties": {"repobilityId": "7e58981959b6fd1d", "scanner": "scanner-primary", "fingerprint": "f7473e72a1ffb67d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ffefbadf9b60e1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-expiries.ts:116"}, "properties": {"repobilityId": "d9ba5771126ee11b", "scanner": "scanner-primary", "fingerprint": "0ffefbadf9b60e1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ecc15ec1d4b20b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-april-crewcounts.ts:17"}, "properties": {"repobilityId": "5b9fabbd43dd01c8", "scanner": "scanner-primary", "fingerprint": "9ecc15ec1d4b20b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42082984b44bb0eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-phones.ts:46"}, "properties": {"repobilityId": "61a5d8f444ddb375", "scanner": "scanner-primary", "fingerprint": "42082984b44bb0eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da012f03db78dfd1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-scheduling-config-indexes.ts:16"}, "properties": {"repobilityId": "4241ffaf53db114c", "scanner": "scanner-primary", "fingerprint": "da012f03db78dfd1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90ea132b36ffe833", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-maintenance-checks.ts:315"}, "properties": {"repobilityId": "c7f0d97258ff0fc1", "scanner": "scanner-primary", "fingerprint": "90ea132b36ffe833", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47ddfa2f59b4227d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-pairing-legality.ts:43"}, "properties": {"repobilityId": "319a2584a8c05304", "scanner": "scanner-primary", "fingerprint": "47ddfa2f59b4227d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a858f998571b4aa6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/count-a320.ts:45"}, "properties": {"repobilityId": "ca69bbf5c7b7862c", "scanner": "scanner-primary", "fingerprint": "a858f998571b4aa6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b4665dcb80c29ce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/reseed-seniority.ts:16"}, "properties": {"repobilityId": "ad7df99167884635", "scanner": "scanner-primary", "fingerprint": "8b4665dcb80c29ce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-707a21afd05b38b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-daily-ops.ts:29"}, "properties": {"repobilityId": "63a01a8130149dac", "scanner": "scanner-primary", "fingerprint": "707a21afd05b38b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-24cd3a8eaccc87f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-april-sample.ts:30"}, "properties": {"repobilityId": "03497f54de899d28", "scanner": "scanner-primary", "fingerprint": "24cd3a8eaccc87f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ac31841b3c7e50d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-crew-transport-vendors.ts:99"}, "properties": {"repobilityId": "a41e43045a440166", "scanner": "scanner-primary", "fingerprint": "9ac31841b3c7e50d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf95a1b340c69b99", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/check-aug.ts:17"}, "properties": {"repobilityId": "5e11d4aadcdfad4f", "scanner": "scanner-primary", "fingerprint": "cf95a1b340c69b99", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6a6ae2edac32894", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/force-cancel-run.ts:21"}, "properties": {"repobilityId": "b59162e3952d3714", "scanner": "scanner-primary", "fingerprint": "f6a6ae2edac32894", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5347531683a0ee4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-seniority-from-employment.ts:29"}, "properties": {"repobilityId": "93342f326274fc38", "scanner": "scanner-primary", "fingerprint": "c5347531683a0ee4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-430860c1c21d056b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-weather-config.ts:25"}, "properties": {"repobilityId": "ac123f4ecd61b691", "scanner": "scanner-primary", "fingerprint": "430860c1c21d056b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-62144d2a2aab20f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/fix-tail-doublebook.ts:40"}, "properties": {"repobilityId": "c6fca176437af25e", "scanner": "scanner-primary", "fingerprint": "62144d2a2aab20f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-01e3b6928c78da1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-crew-expiry.ts:34"}, "properties": {"repobilityId": "be525122e29fc8db", "scanner": "scanner-primary", "fingerprint": "01e3b6928c78da1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3fd359d5d313fd0f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/backfill-crew-rolling-snapshot.ts:55"}, "properties": {"repobilityId": "f2613d65155ff3d4", "scanner": "scanner-primary", "fingerprint": "3fd359d5d313fd0f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d2a6328ec727a58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-diversions.ts:190"}, "properties": {"repobilityId": "c481df8a6a9959b1", "scanner": "scanner-primary", "fingerprint": "9d2a6328ec727a58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-879c9a26c89ac7ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/migrate-from-supabase.ts:62"}, "properties": {"repobilityId": "992a5b04cefe6c32", "scanner": "scanner-primary", "fingerprint": "879c9a26c89ac7ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-42eb456d0b189f6e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-scheduled-tasks.ts:185"}, "properties": {"repobilityId": "da90bd20d08f95e9", "scanner": "scanner-primary", "fingerprint": "42eb456d0b189f6e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f431fb6ad2c670d0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/probe-flights.ts:21"}, "properties": {"repobilityId": "13fb71e57f896df7", "scanner": "scanner-primary", "fingerprint": "f431fb6ad2c670d0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-599277a0984260c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-fuel-cargo.ts:90"}, "properties": {"repobilityId": "0dd34be64fff65c9", "scanner": "scanner-primary", "fingerprint": "599277a0984260c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a823297534ec367", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/seed-pu-sgn-topup.ts:204"}, "properties": {"repobilityId": "1fd4432b0aa1407e", "scanner": "scanner-primary", "fingerprint": "4a823297534ec367", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2282fdc4cc91e22", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-activity-codes.ts:10"}, "properties": {"repobilityId": "fd0af4619d2422b5", "scanner": "scanner-primary", "fingerprint": "e2282fdc4cc91e22", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35f93c4bdba67ecc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-system-activity-codes.ts:325"}, "properties": {"repobilityId": "8161f506e46e463e", "scanner": "scanner-primary", "fingerprint": "35f93c4bdba67ecc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a1942f77ae07981", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-crew-currency.ts:54"}, "properties": {"repobilityId": "2e8e2a637237935d", "scanner": "scanner-primary", "fingerprint": "7a1942f77ae07981", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e47293ca79102e4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-tails.ts:13"}, "properties": {"repobilityId": "4274ce5ca135a382", "scanner": "scanner-primary", "fingerprint": "e47293ca79102e4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f5b993607e99f7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/backfill-pairing-times.ts:19"}, "properties": {"repobilityId": "59b6933302f02c6a", "scanner": "scanner-primary", "fingerprint": "9f5b993607e99f7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffd32910b85d5495", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-sick-call.ts:13"}, "properties": {"repobilityId": "435122152b0c705a", "scanner": "scanner-primary", "fingerprint": "ffd32910b85d5495", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa2cf5eb8a7503bd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-demo-users.ts:737"}, "properties": {"repobilityId": "25a5739120a8d190", "scanner": "scanner-primary", "fingerprint": "fa2cf5eb8a7503bd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-59a6b29fe8bf6393", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-skyai-access.ts:40"}, "properties": {"repobilityId": "a8e42749557c72f8", "scanner": "scanner-primary", "fingerprint": "59a6b29fe8bf6393", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a11abc16d5988bf0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-user.ts:34"}, "properties": {"repobilityId": "32e02dabe05bbc76", "scanner": "scanner-primary", "fingerprint": "a11abc16d5988bf0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1e2fb90ba377ddf5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-crew-absences.ts:129"}, "properties": {"repobilityId": "befb09e411daf4e8", "scanner": "scanner-primary", "fingerprint": "1e2fb90ba377ddf5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-235b078ee5712ed0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/bidline-smoke.ts:239"}, "properties": {"repobilityId": "8cfc5b1163e71cb3", "scanner": "scanner-primary", "fingerprint": "235b078ee5712ed0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99f37dd3df8e11ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/seed-journey-logs.ts:280"}, "properties": {"repobilityId": "52f3c1a52649c51b", "scanner": "scanner-primary", "fingerprint": "99f37dd3df8e11ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cd31f6d0b13ab5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-roles.ts:11"}, "properties": {"repobilityId": "a3655615bf1d2244", "scanner": "scanner-primary", "fingerprint": "1cd31f6d0b13ab5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c1e0fd068bac48f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/backfill-local-day-activities.ts:28"}, "properties": {"repobilityId": "f042331b59533643", "scanner": "scanner-primary", "fingerprint": "4c1e0fd068bac48f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d237765c49cf5db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/probe-people.ts:19"}, "properties": {"repobilityId": "3027df6abf834b8c", "scanner": "scanner-primary", "fingerprint": "6d237765c49cf5db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0d59c886f830f90", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/bidline-force-delete.ts:34"}, "properties": {"repobilityId": "3fc9cfe6e2f91802", "scanner": "scanner-primary", "fingerprint": "b0d59c886f830f90", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29733a150360dffb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/scripts/set-user-password.ts:36"}, "properties": {"repobilityId": "0f5b142858999d5d", "scanner": "scanner-primary", "fingerprint": "29733a150360dffb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cebe4e380a8e1e55", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/auth.ts:362"}, "properties": {"repobilityId": "1888caeb2100811b", "scanner": "scanner-primary", "fingerprint": "cebe4e380a8e1e55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-04b7573e8a64324c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/contact-submissions.ts:63"}, "properties": {"repobilityId": "a78cf61e5e9f3eeb", "scanner": "scanner-primary", "fingerprint": "04b7573e8a64324c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e67f59dd6e4af4e9", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/src/routes/pairings.ts:755"}, "properties": {"repobilityId": "6ee41f33128ebdd6", "scanner": "scanner-primary", "fingerprint": "e67f59dd6e4af4e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-bcb1ca239aea0ae2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/auto-roster.ts:84"}, "properties": {"repobilityId": "ea55f4247114da16", "scanner": "scanner-primary", "fingerprint": "bcb1ca239aea0ae2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-708e5553d945669a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/crew-schedule.ts:321"}, "properties": {"repobilityId": "a54abee183a120a7", "scanner": "scanner-primary", "fingerprint": "708e5553d945669a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a6722a459a388fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/routes/recovery.ts:96"}, "properties": {"repobilityId": "49ab25b458a2e76f", "scanner": "scanner-primary", "fingerprint": "7a6722a459a388fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5cccda27a75de965", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/workers/ml-trainer-worker.ts:30"}, "properties": {"repobilityId": "9aefd852328a4f72", "scanner": "scanner-primary", "fingerprint": "5cccda27a75de965", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a203155d28b66e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/email.ts:24"}, "properties": {"repobilityId": "861bb574bf3dfd7d", "scanner": "scanner-primary", "fingerprint": "1a203155d28b66e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-367e4c9fffcff03a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/crew-change-emitter.ts:120"}, "properties": {"repobilityId": "474c3a755ceb4aec", "scanner": "scanner-primary", "fingerprint": "367e4c9fffcff03a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be65a30a7d184501", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/auto-roster-rebalance.ts:78"}, "properties": {"repobilityId": "a01c8cff00e1fb3c", "scanner": "scanner-primary", "fingerprint": "be65a30a7d184501", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4b0a560e97783865", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/auto-roster-orchestrator.ts:349"}, "properties": {"repobilityId": "1e880fc6abfa7fad", "scanner": "scanner-primary", "fingerprint": "4b0a560e97783865", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb12c7b5593a5769", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/weather-client.ts:83"}, "properties": {"repobilityId": "0f6b1bf7c720c45a", "scanner": "scanner-primary", "fingerprint": "bb12c7b5593a5769", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ee8e3e6c3f01ec7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/hotel-email-delivery.ts:46"}, "properties": {"repobilityId": "b2ed6024f2ef5057", "scanner": "scanner-primary", "fingerprint": "7ee8e3e6c3f01ec7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb56eaba9d12dbd6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/asm-ssm-delivery.ts:64"}, "properties": {"repobilityId": "078e3cfb7015901d", "scanner": "scanner-primary", "fingerprint": "cb56eaba9d12dbd6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a955169b7561ef9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/crew-fdtl-reeval.ts:53"}, "properties": {"repobilityId": "4f0dc4b5f58a8900", "scanner": "scanner-primary", "fingerprint": "8a955169b7561ef9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e51a1ecb02b8f315", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/services/skyai/engine.ts:785"}, "properties": {"repobilityId": "d6df77a25f986af9", "scanner": "scanner-primary", "fingerprint": "e51a1ecb02b8f315", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-08ce573b8b2d9fc5", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/src/services/open-flight-bidding/notifier.ts:21"}, "properties": {"repobilityId": "9622e0213f5cb1d2", "scanner": "scanner-primary", "fingerprint": "08ce573b8b2d9fc5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-6027d0f3a2a55100", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/db/connection.ts:9"}, "properties": {"repobilityId": "3ef3ccd37d155f27", "scanner": "scanner-primary", "fingerprint": "6027d0f3a2a55100", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed1797306f9f98e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/transport-email-deliver.ts:171"}, "properties": {"repobilityId": "4aba852b97a728ac", "scanner": "scanner-primary", "fingerprint": "ed1797306f9f98e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-084af3cea27fd5b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/allocation-report-email-deliver.ts:136"}, "properties": {"repobilityId": "40023b5fe5129baf", "scanner": "scanner-primary", "fingerprint": "084af3cea27fd5b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4c34910154598e3b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/weather-poll.ts:137"}, "properties": {"repobilityId": "e49190e54df09043", "scanner": "scanner-primary", "fingerprint": "4c34910154598e3b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee61f1846dea0d26", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/audit-notify-tick.ts:22"}, "properties": {"repobilityId": "5ceec7134c7a44eb", "scanner": "scanner-primary", "fingerprint": "ee61f1846dea0d26", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5165a835cbd5dcfd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/hotel-email-deliver.ts:176"}, "properties": {"repobilityId": "29439d588b8865f7", "scanner": "scanner-primary", "fingerprint": "5165a835cbd5dcfd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5ce63e6576ae014", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/task-scheduler.ts:28"}, "properties": {"repobilityId": "a34b760a39b81091", "scanner": "scanner-primary", "fingerprint": "d5ce63e6576ae014", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df8564c99333bc9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/turnaround-tick.ts:23"}, "properties": {"repobilityId": "dced6cae16334089", "scanner": "scanner-primary", "fingerprint": "df8564c99333bc9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1da294016ae62549", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/mvt-auto-transmit.ts:134"}, "properties": {"repobilityId": "d2da3bc4ded7cdca", "scanner": "scanner-primary", "fingerprint": "1da294016ae62549", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-014d35cfc755ae43", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/asm-ssm-deliver.ts:200"}, "properties": {"repobilityId": "63893817d526af3b", "scanner": "scanner-primary", "fingerprint": "014d35cfc755ae43", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-86bc13ba6ec1929f", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 server/src/jobs/tasks/network-ai-accuracy-eval.ts:135"}, "properties": {"repobilityId": "07b6317d39295631", "scanner": "scanner-primary", "fingerprint": "86bc13ba6ec1929f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7d5eb9e176f984e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/tasks/network-ai-accuracy-eval.ts:145"}, "properties": {"repobilityId": "67375ebd05e3002f", "scanner": "scanner-primary", "fingerprint": "7d5eb9e176f984e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3d5472847d56f5a3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/src/jobs/tasks/daily-crew-activity-log.ts:863"}, "properties": {"repobilityId": "987235d3541f0f78", "scanner": "scanner-primary", "fingerprint": "3d5472847d56f5a3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-157840b048b0b985", "level": "warning", "message": {"text": "Privileged port 587 in use"}, "properties": {"repobilityId": "a87a96c3b2e62c08", "scanner": "scanner-primary", "fingerprint": "157840b048b0b985", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/src/routes/operator-smtp-config.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d33a475ea6ae0f63", "level": "warning", "message": {"text": "Dockerfile runs as root: services/auto-roster-solver/Dockerfile"}, "properties": {"repobilityId": "814a0b5a50129695", "scanner": "scanner-primary", "fingerprint": "d33a475ea6ae0f63", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-b49862eed136a392", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "74b58578f4e710ef", "scanner": "scanner-primary", "fingerprint": "b49862eed136a392", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/auto-roster-solver/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-103422798f6c7348", "level": "warning", "message": {"text": "Dockerfile runs as root: services/network-constraint-evaluator/Dockerfile"}, "properties": {"repobilityId": "38bdf426e1e56026", "scanner": "scanner-primary", "fingerprint": "103422798f6c7348", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-41c9e4028517b103", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "a1cf86df51b66d47", "scanner": "scanner-primary", "fingerprint": "41c9e4028517b103", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/network-constraint-evaluator/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-df7a3e13d4a328e1", "level": "warning", "message": {"text": "Dockerfile runs as root: services/recovery-solver/Dockerfile"}, "properties": {"repobilityId": "ed20f0b0926d4563", "scanner": "scanner-primary", "fingerprint": "df7a3e13d4a328e1", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-e6e4344449fe4f31", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "02347923608e85fa", "scanner": "scanner-primary", "fingerprint": "e6e4344449fe4f31", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/recovery-solver/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-abf7eb0e6f76b01b", "level": "warning", "message": {"text": "Dockerfile runs as root: services/otp-predictor/Dockerfile"}, "properties": {"repobilityId": "1ec33e5037d9df42", "scanner": "scanner-primary", "fingerprint": "abf7eb0e6f76b01b", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-8997d8ba17dd2e83", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "2d01909e64ad7998", "scanner": "scanner-primary", "fingerprint": "8997d8ba17dd2e83", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/otp-predictor/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c9fb68dc972aa914", "level": "warning", "message": {"text": "Dockerfile runs as root: services/pairing-optimizer/Dockerfile"}, "properties": {"repobilityId": "affc5e59f7f5b541", "scanner": "scanner-primary", "fingerprint": "c9fb68dc972aa914", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-134da0d649aa3759", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "ec8b73812a509f28", "scanner": "scanner-primary", "fingerprint": "134da0d649aa3759", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/pairing-optimizer/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e2d9e99c11cdfe8", "level": "warning", "message": {"text": "Dockerfile runs as root: services/demand-forecaster/Dockerfile"}, "properties": {"repobilityId": "8b2a2fa24178cbcb", "scanner": "scanner-primary", "fingerprint": "0e2d9e99c11cdfe8", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-6b743da92996d1fb", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "ec0b9f2572df2b9b", "scanner": "scanner-primary", "fingerprint": "6b743da92996d1fb", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/demand-forecaster/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-3987475b1e27a13c", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in apps/mobile/src/components/sysadmin/sso/sso-cards.tsx:127"}, "properties": {"repobilityId": "164a629b69798dd6", "scanner": "scanner-primary", "fingerprint": "3987475b1e27a13c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/mobile/src/components/sysadmin/sso/sso-cards.tsx"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-a5d94cf0fce79c18", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/crew/design-mock.html:1708"}, "properties": {"repobilityId": "47f1b14a65c8128c", "scanner": "scanner-primary", "fingerprint": "a5d94cf0fce79c18", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/crew/design-mock.html"}, "region": {"startLine": 1708}}}]}, {"ruleId": "scanner-a5a12527b9d7398c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/src/stores/use-gantt-store.ts:567"}, "properties": {"repobilityId": "814bdc9f14857635", "scanner": "scanner-primary", "fingerprint": "a5a12527b9d7398c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/stores/use-gantt-store.ts"}, "region": {"startLine": 567}}}]}, {"ruleId": "scanner-d1a3424333b1d317", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/wallpaper-bg.tsx:119"}, "properties": {"repobilityId": "7679e1b7cf2748e7", "scanner": "scanner-primary", "fingerprint": "d1a3424333b1d317", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/wallpaper-bg.tsx"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-6cada8d706a7199e", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in apps/web/src/components/sysadmin/sso/sso-shell.tsx:201"}, "properties": {"repobilityId": "c6cfea86756212e2", "scanner": "scanner-primary", "fingerprint": "6cada8d706a7199e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/sysadmin/sso/sso-shell.tsx"}, "region": {"startLine": 201}}}]}, {"ruleId": "scanner-e3b3e81d9293d9cf", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/disruption-center/workflow-timeline.tsx:195"}, "properties": {"repobilityId": "1f4fbeb09fe56847", "scanner": "scanner-primary", "fingerprint": "e3b3e81d9293d9cf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/disruption-center/workflow-timeline.tsx"}, "region": {"startLine": 195}}}]}, {"ruleId": "scanner-73be89c107086dd3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/disruption-center/disruption-hero.tsx:249"}, "properties": {"repobilityId": "b00b9af914909f4a", "scanner": "scanner-primary", "fingerprint": "73be89c107086dd3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/disruption-center/disruption-hero.tsx"}, "region": {"startLine": 249}}}]}, {"ruleId": "scanner-30346cf3185f6386", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/network/optimizer/network-optimizer-splash.tsx:184"}, "properties": {"repobilityId": "926905fe813d8364", "scanner": "scanner-primary", "fingerprint": "30346cf3185f6386", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/network/optimizer/network-optimizer-splash.tsx"}, "region": {"startLine": 184}}}]}, {"ruleId": "scanner-ee7d77e886ca2d45", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/global-runway-progress.tsx:662"}, "properties": {"repobilityId": "d9e47833b69a3126", "scanner": "scanner-primary", "fingerprint": "ee7d77e886ca2d45", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/ui/global-runway-progress.tsx"}, "region": {"startLine": 662}}}]}, {"ruleId": "scanner-a8638ba66ea38bb6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/runway-loading-panel.tsx:44"}, "properties": {"repobilityId": "ba0e049d523f90d4", "scanner": "scanner-primary", "fingerprint": "a8638ba66ea38bb6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/ui/runway-loading-panel.tsx"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-892e71b6f4bbda5b", "level": "error", "message": {"text": "Insecure pattern 'eval_used' in apps/web/src/components/admin/ai-integration/network-write-confirm-modal.tsx:54"}, "properties": {"repobilityId": "98369ae7540aa19f", "scanner": "scanner-primary", "fingerprint": "892e71b6f4bbda5b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "eval_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/admin/ai-integration/network-write-confirm-modal.tsx"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-355e8dcecc36dd57", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/journey-log/signature-pad.tsx:34"}, "properties": {"repobilityId": "a89821889041b7e0", "scanner": "scanner-primary", "fingerprint": "355e8dcecc36dd57", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/flight-ops/journey-log/signature-pad.tsx"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-bff441d61d18b4d6", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/gantt/recovery-dialog.tsx:408"}, "properties": {"repobilityId": "405af720cba4b826", "scanner": "scanner-primary", "fingerprint": "bff441d61d18b4d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/flight-ops/gantt/recovery-dialog.tsx"}, "region": {"startLine": 408}}}]}, {"ruleId": "scanner-43d849dd30072322", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/flight-ops/control/occ-dashboard/occ-hero.tsx:193"}, "properties": {"repobilityId": "d5575c3b93f30f6b", "scanner": "scanner-primary", "fingerprint": "43d849dd30072322", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/flight-ops/control/occ-dashboard/occ-hero.tsx"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-830cdf57384fabba", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/src/app/auth/sso/callback/route.ts:24"}, "properties": {"repobilityId": "cc85a50c4b99abbc", "scanner": "scanner-primary", "fingerprint": "830cdf57384fabba", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/app/auth/sso/callback/route.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-6f36df2156b796b0", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/page.tsx:93"}, "properties": {"repobilityId": "3b8acb2860c29833", "scanner": "scanner-primary", "fingerprint": "6f36df2156b796b0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/app/login/page.tsx"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-a14c5ce5772fd40c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/reset-password/page.tsx:115"}, "properties": {"repobilityId": "b0da1d1b4c7c583c", "scanner": "scanner-primary", "fingerprint": "a14c5ce5772fd40c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/app/login/reset-password/page.tsx"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-17a2df069ba3da58", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/app/login/forgot-password/page.tsx:63"}, "properties": {"repobilityId": "0bbcbe3a918484d8", "scanner": "scanner-primary", "fingerprint": "17a2df069ba3da58", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/app/login/forgot-password/page.tsx"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-0351e161cdaffd72", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/free-solver-port.mjs:17"}, "properties": {"repobilityId": "b3a69d9e676e6661", "scanner": "scanner-primary", "fingerprint": "0351e161cdaffd72", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/free-solver-port.mjs"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-9e3fb3c868418962", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/hooks/pre-commit.js:16"}, "properties": {"repobilityId": "7f8f9b2ad335277b", "scanner": "scanner-primary", "fingerprint": "9e3fb3c868418962", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/hooks/pre-commit.js"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-ea2d337fa51a0468", "level": "error", "message": {"text": "Possible secret in server/src/scripts/seed-demo-users.ts"}, "properties": {"repobilityId": "bcf37a67ff649a7d", "scanner": "scanner-primary", "fingerprint": "ea2d337fa51a0468", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/src/scripts/seed-demo-users.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-6f36b29fa2274144", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/src/routes/pairing-optimizer.ts:1723"}, "properties": {"repobilityId": "f862ef1931a7eba2", "scanner": "scanner-primary", "fingerprint": "6f36b29fa2274144", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/src/routes/pairing-optimizer.ts"}, "region": {"startLine": 1723}}}]}, {"ruleId": "scanner-d45bbb41dc3ae9b8", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/src/routes/auto-roster.ts:959"}, "properties": {"repobilityId": "7df4612c20981c84", "scanner": "scanner-primary", "fingerprint": "d45bbb41dc3ae9b8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/src/routes/auto-roster.ts"}, "region": {"startLine": 959}}}]}, {"ruleId": "scanner-8ad562b3bec1d371", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/src/routes/recovery-advisor.ts:113"}, "properties": {"repobilityId": "01a507a33b7d61f9", "scanner": "scanner-primary", "fingerprint": "8ad562b3bec1d371", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/src/routes/recovery-advisor.ts"}, "region": {"startLine": 113}}}]}, {"ruleId": "scanner-a7f020bb43abcaae", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server/src/routes/recovery.ts:493"}, "properties": {"repobilityId": "44fd0a597bba904c", "scanner": "scanner-primary", "fingerprint": "a7f020bb43abcaae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/src/routes/recovery.ts"}, "region": {"startLine": 493}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7640466c92034bac", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8805470db04747b3", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3130c0a2c5ea460e", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25b60a6e225495ae", "level": "note", "message": {"text": "Very large file: apps/mobile/app/(tabs)/settings/aircraft-type-detail.tsx (1546 lines)"}, "properties": {"repobilityId": "c3816d9e30121b81", "scanner": "scanner-primary", "fingerprint": "25b60a6e225495ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5c174bbd9f5ebb4b", "level": "note", "message": {"text": "Very large file: apps/web/src/stores/use-crew-schedule-store.ts (2655 lines)"}, "properties": {"repobilityId": "4cb4c7d256ba2050", "scanner": "scanner-primary", "fingerprint": "5c174bbd9f5ebb4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-474fd2059e00ba1b", "level": "note", "message": {"text": "Very large file: apps/web/src/components/help/help-heroes.tsx (1904 lines)"}, "properties": {"repobilityId": "a3a3bcba4c58219a", "scanner": "scanner-primary", "fingerprint": "474fd2059e00ba1b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fa8ef0ecac556bb4", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel.tsx (1996 lines)"}, "properties": {"repobilityId": "27cd563775343fab", "scanner": "scanner-primary", "fingerprint": "fa8ef0ecac556bb4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f6be32dfc10e8102", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-canvas.tsx (2781 lines)"}, "properties": {"repobilityId": "c186593237c66bdc", "scanner": "scanner-primary", "fingerprint": "f6be32dfc10e8102", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-591464def23f309d", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx (1473 lines)"}, "properties": {"repobilityId": "cb506ef3770a7094", "scanner": "scanner-primary", "fingerprint": "591464def23f309d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1460d81a4165bb59", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/duty-swap-config/section-heroes.tsx (1405 lines)"}, "properties": {"repobilityId": "20cbc715adfaefec", "scanner": "scanner-primary", "fingerprint": "1460d81a4165bb59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dda57baf713436f5", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-canvas.tsx (1651 lines)"}, "properties": {"repobilityId": "ec5b4a05c2b0d9bf", "scanner": "scanner-primary", "fingerprint": "dda57baf713436f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-40e3101cac3be408", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector-panel/index.tsx (1723 lines)"}, "properties": {"repobilityId": "bf5aba85f77b7d61", "scanner": "scanner-primary", "fingerprint": "40e3101cac3be408", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2bbd1c58706d7229", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/scheduling-config/scheduling-config-shell.tsx (2268 lines)"}, "properties": {"repobilityId": "9f095d7ef18adfe5", "scanner": "scanner-primary", "fingerprint": "2bbd1c58706d7229", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7d2851c4b2bc1876", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/scheduling-config/section-heroes.tsx (1665 lines)"}, "properties": {"repobilityId": "70ba2914974cd41a", "scanner": "scanner-primary", "fingerprint": "7d2851c4b2bc1876", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4868cd482cc11f82", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx (2361 lines)"}, "properties": {"repobilityId": "09733b2c154bf7cf", "scanner": "scanner-primary", "fingerprint": "4868cd482cc11f82", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-94d1ebd9d8f652f7", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/crew-app-config/crew-app-config-shell.tsx (2602 lines)"}, "properties": {"repobilityId": "4ce4f00e6d18ccbb", "scanner": "scanner-primary", "fingerprint": "94d1ebd9d8f652f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-803c2388ea77222f", "level": "note", "message": {"text": "Very large file: apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx (6689 lines)"}, "properties": {"repobilityId": "57d6eb57ddff7b71", "scanner": "scanner-primary", "fingerprint": "803c2388ea77222f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6bd7cb3d48081d64", "level": "note", "message": {"text": "Very large file: apps/web/src/components/admin/aircraft-types/aircraft-type-detail.tsx (1577 lines)"}, "properties": {"repobilityId": "d998c1dcce05921a", "scanner": "scanner-primary", "fingerprint": "6bd7cb3d48081d64", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1c678e4b44982789", "level": "note", "message": {"text": "Very large file: apps/web/src/components/admin/aircraft-registrations/aircraft-registration-detail.tsx (1378 lines)"}, "properties": {"repobilityId": "512911be88a5f627", "scanner": "scanner-primary", "fingerprint": "1c678e4b44982789", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1b128749bda0f739", "level": "note", "message": {"text": "Very large file: apps/web/src/components/admin/delay-codes/delay-codes-shell.tsx (1415 lines)"}, "properties": {"repobilityId": "b12e6a0b55818f47", "scanner": "scanner-primary", "fingerprint": "1b128749bda0f739", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-525f3226f0848fd0", "level": "note", "message": {"text": "Very large file: apps/web/src/components/admin/expiry-codes/expiry-code-detail.tsx (1555 lines)"}, "properties": {"repobilityId": "4a325a4e50968447", "scanner": "scanner-primary", "fingerprint": "525f3226f0848fd0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-407f42787c61f508", "level": "note", "message": {"text": "Very large file: apps/web/src/components/admin/city-pairs/citypair-detail.tsx (1552 lines)"}, "properties": {"repobilityId": "05673d7b927affe5", "scanner": "scanner-primary", "fingerprint": "407f42787c61f508", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b3a2c76767897681", "level": "note", "message": {"text": "Very large file: apps/web/src/components/flight-ops/gantt/ops-toolbar.tsx (1284 lines)"}, "properties": {"repobilityId": "e938d4ee65abd371", "scanner": "scanner-primary", "fingerprint": "b3a2c76767897681", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cabe6e3afd74cf23", "level": "note", "message": {"text": "Very large file: apps/web/src/components/flight-ops/control/disruption-center/ai-customization/ai-customization-shell.tsx (1462 lines)"}, "properties": {"repobilityId": "14144a5924b1f08a", "scanner": "scanner-primary", "fingerprint": "cabe6e3afd74cf23", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3066215f82854ba4", "level": "note", "message": {"text": "Very large file: apps/web/src/app/hub/page.tsx (1183 lines)"}, "properties": {"repobilityId": "ef8b3c85638dc87c", "scanner": "scanner-primary", "fingerprint": "3066215f82854ba4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-54605037fb7bd1cc", "level": "note", "message": {"text": "Very large file: packages/types/src/report-insights.ts (3024 lines)"}, "properties": {"repobilityId": "6b460914d038e651", "scanner": "scanner-primary", "fingerprint": "54605037fb7bd1cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5f57233e715e69e8", "level": "note", "message": {"text": "Very large file: packages/types/src/database.ts (2327 lines)"}, "properties": {"repobilityId": "e804aa8140aeebf4", "scanner": "scanner-primary", "fingerprint": "5f57233e715e69e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2294421ce8a7c263", "level": "note", "message": {"text": "Very large file: packages/api/src/client.ts (16975 lines)"}, "properties": {"repobilityId": "c491fbbb181d9ac3", "scanner": "scanner-primary", "fingerprint": "2294421ce8a7c263", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1790e691e03a879", "level": "note", "message": {"text": "Very large file: packages/ui/src/navigation/navData.ts (1797 lines)"}, "properties": {"repobilityId": "4e80d06548d8155e", "scanner": "scanner-primary", "fingerprint": "e1790e691e03a879", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-de0c03a08b8998f5", "level": "note", "message": {"text": "Very large file: packages/constants/src/module-registry.ts (1962 lines)"}, "properties": {"repobilityId": "bbede1cb3486c8fb", "scanner": "scanner-primary", "fingerprint": "de0c03a08b8998f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-59b1a1bd1817698d", "level": "note", "message": {"text": "Very large file: packages/logic/src/fdtl/evaluators.ts (1711 lines)"}, "properties": {"repobilityId": "b00d5930dee922be", "scanner": "scanner-primary", "fingerprint": "59b1a1bd1817698d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-727df26855a1e983", "level": "note", "message": {"text": "Very large file: packages/logic/src/fdtl/templates/caav-var15.ts (1495 lines)"}, "properties": {"repobilityId": "318a00d37369c445", "scanner": "scanner-primary", "fingerprint": "727df26855a1e983", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2bf0dc86f83b0ed6", "level": "note", "message": {"text": "Very large file: server/src/routes/pairing-optimizer.ts (2052 lines)"}, "properties": {"repobilityId": "6f3e61f58654e91b", "scanner": "scanner-primary", "fingerprint": "2bf0dc86f83b0ed6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-80dc97ad25e00f3c", "level": "note", "message": {"text": "Very large file: server/src/routes/pairings.ts (1602 lines)"}, "properties": {"repobilityId": "9f8134c3ea6ac417", "scanner": "scanner-primary", "fingerprint": "80dc97ad25e00f3c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-05f159e3d94fe746", "level": "note", "message": {"text": "Very large file: server/src/routes/gantt.ts (2710 lines)"}, "properties": {"repobilityId": "0e1a27aa0b4419aa", "scanner": "scanner-primary", "fingerprint": "05f159e3d94fe746", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6709f15c55b01d47", "level": "note", "message": {"text": "Very large file: server/src/routes/crew-schedule.ts (4969 lines)"}, "properties": {"repobilityId": "676af875db64159a", "scanner": "scanner-primary", "fingerprint": "6709f15c55b01d47", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-787e81de5216efec", "level": "note", "message": {"text": "Very large file: server/src/routes/reference.ts (3313 lines)"}, "properties": {"repobilityId": "330b4dd333e7de49", "scanner": "scanner-primary", "fingerprint": "787e81de5216efec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0ebb1d516c210a37", "level": "note", "message": {"text": "Very large file: server/src/routes/admin/operator-licensing.ts (1156 lines)"}, "properties": {"repobilityId": "ebca1f571e675cf2", "scanner": "scanner-primary", "fingerprint": "0ebb1d516c210a37", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dbc2bd040d39855f", "level": "note", "message": {"text": "Very large file: server/src/services/auto-roster-orchestrator.ts (5584 lines)"}, "properties": {"repobilityId": "fa15ad78f94ea6b7", "scanner": "scanner-primary", "fingerprint": "dbc2bd040d39855f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f92e87e00796d9aa", "level": "note", "message": {"text": "Very large file: server/src/services/skyai/tools.ts (4678 lines)"}, "properties": {"repobilityId": "86ce4cbd92f3797b", "scanner": "scanner-primary", "fingerprint": "f92e87e00796d9aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fc4e5593d9abded0", "level": "note", "message": {"text": "Very large file: server/src/services/skyai/report-insights/trim.ts (1609 lines)"}, "properties": {"repobilityId": "07b66955d5952411", "scanner": "scanner-primary", "fingerprint": "fc4e5593d9abded0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-928d855855bd4419", "level": "note", "message": {"text": "Very large file: services/auto-roster-solver/app/solver/cp_sat_engine.py (1855 lines)"}, "properties": {"repobilityId": "15296854dbdddf6e", "scanner": "scanner-primary", "fingerprint": "928d855855bd4419", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-a3b453048e9428f3", "level": "note", "message": {"text": "67 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "a3b453048e9428f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "ad0ef1882095e5c2", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-d0c2205560692580", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/mobile/package.json"}, "properties": {"repobilityId": "b3dfed7bb3d70ed3", "scanner": "scanner-primary", "fingerprint": "d0c2205560692580", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/mobile/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-56d43ffc0bb4469e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/crew/package.json"}, "properties": {"repobilityId": "ae4d37ef9458a8cf", "scanner": "scanner-primary", "fingerprint": "56d43ffc0bb4469e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/crew/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb3e52667c84fb86", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/types/package.json"}, "properties": {"repobilityId": "b5e2784f829944e6", "scanner": "scanner-primary", "fingerprint": "cb3e52667c84fb86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/types/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ff46e31478137e2c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/crew-db/package.json"}, "properties": {"repobilityId": "72b5b4d7ff445cd4", "scanner": "scanner-primary", "fingerprint": "ff46e31478137e2c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/crew-db/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0a0634ffe3eb1107", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/api/package.json"}, "properties": {"repobilityId": "61aa8b13d545e157", "scanner": "scanner-primary", "fingerprint": "0a0634ffe3eb1107", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50218c90b43393bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "properties": {"repobilityId": "637e26a8c754e81d", "scanner": "scanner-primary", "fingerprint": "50218c90b43393bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-afff30d5313e36fe", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/constants/package.json"}, "properties": {"repobilityId": "769e4b51efe16449", "scanner": "scanner-primary", "fingerprint": "afff30d5313e36fe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/constants/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5bec3265250f3018", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/logic/package.json"}, "properties": {"repobilityId": "6c8ec64dd3997082", "scanner": "scanner-primary", "fingerprint": "5bec3265250f3018", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/logic/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d7101ca1926e3342", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: server/package.json"}, "properties": {"repobilityId": "bbcd0a89809ced91", "scanner": "scanner-primary", "fingerprint": "d7101ca1926e3342", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ee0e9c353e562ac0", "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": "5a56519283cfd1f8", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "d64a43ffda7f365d", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "a84a2265d0af8f28", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "ce290b2c596e51f9", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "c256ebc8c16eeba7", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "9c5f2e01b0cc47c3", "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": "6905e4df1dfcefb4", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-6d5d7ca86c9702c5", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: apps/web/src/components/scheduling/CLAUDE.md"}, "properties": {"repobilityId": "56328c6027abc498", "scanner": "scanner-primary", "fingerprint": "6d5d7ca86c9702c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/scheduling/CLAUDE.md"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-d924dd77e7fd8058", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: apps/web/src/components/scheduling/CLAUDE.md"}, "properties": {"repobilityId": "4939176e624f6912", "scanner": "scanner-primary", "fingerprint": "d924dd77e7fd8058", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/scheduling/CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-57236c0e981aa7e9", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/agents/tdd-guide.md"}, "properties": {"repobilityId": "36868bf8f8d88390", "scanner": "scanner-primary", "fingerprint": "57236c0e981aa7e9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/tdd-guide.md"}, "region": {"startLine": 104}}}]}, {"ruleId": "scanner-9b719caf13f925b8", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/hooks/hooks.json"}, "properties": {"repobilityId": "ead1ce2df5ed7d55", "scanner": "scanner-primary", "fingerprint": "9b719caf13f925b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/hooks/hooks.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-698f2512f2447676", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/skills/horizon-db-conventions/SKILL.md"}, "properties": {"repobilityId": "d25c0316d09e36a6", "scanner": "scanner-primary", "fingerprint": "698f2512f2447676", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/horizon-db-conventions/SKILL.md"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-190113be1e2eb1e6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/strategic-compact/SKILL.md"}, "properties": {"repobilityId": "a98d4e27efc61075", "scanner": "scanner-primary", "fingerprint": "190113be1e2eb1e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/strategic-compact/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6ef8354276819632", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/components/schedule/import-dialog.tsx:55"}, "properties": {"repobilityId": "40c3a8b8bbc9174f", "scanner": "scanner-primary", "fingerprint": "6ef8354276819632", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc5982ac04e3c53f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/components/schedule/grid-cell.tsx:20"}, "properties": {"repobilityId": "657a46c7a1818adb", "scanner": "scanner-primary", "fingerprint": "fc5982ac04e3c53f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c39232c242aec52", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/charts/column-chart.tsx:1"}, "properties": {"repobilityId": "af77453200ebe8fc", "scanner": "scanner-primary", "fingerprint": "5c39232c242aec52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3918e138ec2605c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/hub/hub-module-panel.tsx:115"}, "properties": {"repobilityId": "a762e55f5282e1eb", "scanner": "scanner-primary", "fingerprint": "3918e138ec2605c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b292aa3f27858d4", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/hub/hub-carousel.tsx:121"}, "properties": {"repobilityId": "7a5ce1219ebac419", "scanner": "scanner-primary", "fingerprint": "3b292aa3f27858d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33a5ad31426ca2e1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/send-operating-crew-dialog.tsx:1"}, "properties": {"repobilityId": "9112b76c3339ed6a", "scanner": "scanner-primary", "fingerprint": "33a5ad31426ca2e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b39673cd27622f44", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/components/reports/network-analytics.ts:3"}, "properties": {"repobilityId": "8286dfe9e81da55f", "scanner": "scanner-primary", "fingerprint": "b39673cd27622f44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7f701e2ba33d10b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/operating-crew-card.tsx:1"}, "properties": {"repobilityId": "1d21c6e6abbe13f5", "scanner": "scanner-primary", "fingerprint": "f7f701e2ba33d10b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50aafe3aeebcb57d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/aggregations.ts:1"}, "properties": {"repobilityId": "226d4c8cdec47f8d", "scanner": "scanner-primary", "fingerprint": "50aafe3aeebcb57d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef574f0559c05ce5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/fdrs-sparkline.tsx:1"}, "properties": {"repobilityId": "2d8044d3c74f42d8", "scanner": "scanner-primary", "fingerprint": "ef574f0559c05ce5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a2003735324ffcf", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/components/reports/network-dashboard.tsx:3"}, "properties": {"repobilityId": "7b77ed552bdddfda", "scanner": "scanner-primary", "fingerprint": "8a2003735324ffcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-887f5269f898286d", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-pairings/pairings-detail.tsx:1"}, "properties": {"repobilityId": "cac6150c9095828f", "scanner": "scanner-primary", "fingerprint": "887f5269f898286d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88cc41148d22a362", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-pairings/pairings-cards.tsx:1"}, "properties": {"repobilityId": "e3ba73cdbcc9f3db", "scanner": "scanner-primary", "fingerprint": "88cc41148d22a362", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b131d2b32212861f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-pairings/pairings-filters.tsx:1"}, "properties": {"repobilityId": "6739d16344853bf6", "scanner": "scanner-primary", "fingerprint": "b131d2b32212861f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8806fbe8c7a01ca0", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-export.ts:1"}, "properties": {"repobilityId": "d6aa41b341ec2852", "scanner": "scanner-primary", "fingerprint": "8806fbe8c7a01ca0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56fd13c93a8a2ca2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-summary.tsx:1"}, "properties": {"repobilityId": "940fd8d9281f0e9a", "scanner": "scanner-primary", "fingerprint": "56fd13c93a8a2ca2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76bcad81e137193c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-filters.tsx:1"}, "properties": {"repobilityId": "c42364a7633c49de", "scanner": "scanner-primary", "fingerprint": "76bcad81e137193c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bc3b6c4a66091e4", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-schedule-stability/stability-crew-detail.tsx:1"}, "properties": {"repobilityId": "a9fd7f1db37d9b97", "scanner": "scanner-primary", "fingerprint": "6bc3b6c4a66091e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4b8dbf7dd9f0f2a", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/components/reports/crew-count/crew-count-charts.tsx:1"}, "properties": {"repobilityId": "d74d71a4e801db47", "scanner": "scanner-primary", "fingerprint": "d4b8dbf7dd9f0f2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adb2838a6bf1994b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-count/crew-count-filters.tsx:1"}, "properties": {"repobilityId": "4ed7a665d11b0b6f", "scanner": "scanner-primary", "fingerprint": "adb2838a6bf1994b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24e26cf75472fd0e", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/components/reports/crew-out-of-base/oob-map.tsx:1"}, "properties": {"repobilityId": "3f5f1765d0201baa", "scanner": "scanner-primary", "fingerprint": "24e26cf75472fd0e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e14310937df372c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/components/reports/crew-out-of-base/oob-station-pairings.tsx:1"}, "properties": {"repobilityId": "8a9e3ab8236f7e7e", "scanner": "scanner-primary", "fingerprint": "4e14310937df372c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15e30697477bdba9", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/components/reports/crew-out-of-base/oob-list.tsx:1"}, "properties": {"repobilityId": "b15bdfb1a66fd1a9", "scanner": "scanner-primary", "fingerprint": "15e30697477bdba9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8766b1704b6e9ac2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/index.tsx:18"}, "properties": {"repobilityId": "f51d8a6773f742b1", "scanner": "scanner-primary", "fingerprint": "8766b1704b6e9ac2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73d1c711be63cecd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/_layout.tsx:8"}, "properties": {"repobilityId": "9f291ec81d23498e", "scanner": "scanner-primary", "fingerprint": "73d1c711be63cecd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b2fec3c226e1e855", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/operator-config.tsx:441"}, "properties": {"repobilityId": "df25fdf3774e98b4", "scanner": "scanner-primary", "fingerprint": "b2fec3c226e1e855", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5a907f7cf859947f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/non-crew-person-detail.tsx:708"}, "properties": {"repobilityId": "86592de02a75f71d", "scanner": "scanner-primary", "fingerprint": "5a907f7cf859947f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-16d532d151290a04", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/settings/index.tsx:84"}, "properties": {"repobilityId": "e8fd1d561d49c488", "scanner": "scanner-primary", "fingerprint": "16d532d151290a04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8d68dd2990f111e9", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/settings/asm-ssm-transmission.tsx:36"}, "properties": {"repobilityId": "a736aaa608816219", "scanner": "scanner-primary", "fingerprint": "8d68dd2990f111e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccb00cebed63f68a", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-configurations.tsx:21"}, "properties": {"repobilityId": "fc097163dd358683", "scanner": "scanner-primary", "fingerprint": "ccb00cebed63f68a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb4251e7b5166f56", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/training-sessions.tsx:1"}, "properties": {"repobilityId": "0870b58f8b1079d7", "scanner": "scanner-primary", "fingerprint": "bb4251e7b5166f56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-245cb2c42a8eebba", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/apis-configuration.tsx:31"}, "properties": {"repobilityId": "2634a17ac05d17f4", "scanner": "scanner-primary", "fingerprint": "245cb2c42a8eebba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eadc6d8280c6d6d0", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/crew-count.tsx:4"}, "properties": {"repobilityId": "ba34fbed4ac11ce6", "scanner": "scanner-primary", "fingerprint": "eadc6d8280c6d6d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42527227e0bff4f2", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/apis-transmission-log.tsx:1"}, "properties": {"repobilityId": "734e351c43335054", "scanner": "scanner-primary", "fingerprint": "42527227e0bff4f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65e537ea118f9794", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-optimizer.tsx:4"}, "properties": {"repobilityId": "521cb16ea193001d", "scanner": "scanner-primary", "fingerprint": "65e537ea118f9794", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0f26d29afbcfad0", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/crew-schedule-stability.tsx:4"}, "properties": {"repobilityId": "2fe89fb5a3539509", "scanner": "scanner-primary", "fingerprint": "b0f26d29afbcfad0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9f41c6c92a9bfb9", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/training-expiries.tsx:1"}, "properties": {"repobilityId": "ee82ec2ad486a663", "scanner": "scanner-primary", "fingerprint": "b9f41c6c92a9bfb9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-378daab286a1b769", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-duty-swap-config.tsx:36"}, "properties": {"repobilityId": "087b0ee3c87b7d0a", "scanner": "scanner-primary", "fingerprint": "378daab286a1b769", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dfad6f4fe73dff7", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-text.tsx:4"}, "properties": {"repobilityId": "7255c97fdcd6d7d3", "scanner": "scanner-primary", "fingerprint": "3dfad6f4fe73dff7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-238870a887028e42", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/delete-pairings.tsx:1"}, "properties": {"repobilityId": "b6d8823b62e69864", "scanner": "scanner-primary", "fingerprint": "238870a887028e42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-251edc3d49c03098", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/schedule-audit.tsx:1"}, "properties": {"repobilityId": "07c83eb8fd62316b", "scanner": "scanner-primary", "fingerprint": "251edc3d49c03098", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-848461c4593b36da", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-open-flights-bidding.tsx:28"}, "properties": {"repobilityId": "c91d00dee7c886f9", "scanner": "scanner-primary", "fingerprint": "848461c4593b36da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9a65df0858a3975", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-categories.tsx:15"}, "properties": {"repobilityId": "871b0ef2db808b49", "scanner": "scanner-primary", "fingerprint": "e9a65df0858a3975", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dde85959450fc7b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/crew-app-audit.tsx:1"}, "properties": {"repobilityId": "4d00d8ac159405f4", "scanner": "scanner-primary", "fingerprint": "dde85959450fc7b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e024d0c41f9f46e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/apis-transmission.tsx:1"}, "properties": {"repobilityId": "6c9a1a87e29fe99e", "scanner": "scanner-primary", "fingerprint": "5e024d0c41f9f46e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e134ac0d859326ae", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-transport-management.tsx:1"}, "properties": {"repobilityId": "836671026dd269e7", "scanner": "scanner-primary", "fingerprint": "e134ac0d859326ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d058eb3bfaf5dad8", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/hotac-hotel-management.tsx:42"}, "properties": {"repobilityId": "4c3ec8b02bd8b369", "scanner": "scanner-primary", "fingerprint": "d058eb3bfaf5dad8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d4b12f322f7e0d0", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/journey-log.tsx:30"}, "properties": {"repobilityId": "fcb3d32e3880cf79", "scanner": "scanner-primary", "fingerprint": "8d4b12f322f7e0d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33d2984ef2dfa485", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/pairing-config.tsx:18"}, "properties": {"repobilityId": "7c945396261be6a4", "scanner": "scanner-primary", "fingerprint": "33d2984ef2dfa485", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d1b4450665a4032", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/schedule-legality-check.tsx:3"}, "properties": {"repobilityId": "bce5e8f193e2b18b", "scanner": "scanner-primary", "fingerprint": "5d1b4450665a4032", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3316b7ca7bdaa70", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/crew-app-config.tsx:49"}, "properties": {"repobilityId": "f29d181548240d0e", "scanner": "scanner-primary", "fingerprint": "d3316b7ca7bdaa70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9548844c4c477f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/training-reports.tsx:1"}, "properties": {"repobilityId": "ff6d67c16cc19506", "scanner": "scanner-primary", "fingerprint": "a9548844c4c477f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1aa4b4b56637160b", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-schedule-publish.tsx:1"}, "properties": {"repobilityId": "2b34700cfb0a4dd8", "scanner": "scanner-primary", "fingerprint": "1aa4b4b56637160b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61ddfa99c835e089", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/mobile/app/(tabs)/crew-ops/crew-scheduling-config.tsx:34"}, "properties": {"repobilityId": "5f59a40f24f28c59", "scanner": "scanner-primary", "fingerprint": "61ddfa99c835e089", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfcb2111c189949f", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-pairings.tsx:4"}, "properties": {"repobilityId": "d2b14f8b860037d9", "scanner": "scanner-primary", "fingerprint": "cfcb2111c189949f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d74bdcbfe7eae798", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/tracking-check-in.tsx:30"}, "properties": {"repobilityId": "f7616b16447861bd", "scanner": "scanner-primary", "fingerprint": "d74bdcbfe7eae798", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cbc5693152a113f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/app/(tabs)/crew-ops/tracking-check-in.tsx:76"}, "properties": {"repobilityId": "b46924af80f49789", "scanner": "scanner-primary", "fingerprint": "6cbc5693152a113f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a96a4ab667e0d5f6", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/manpower-planning.tsx:1"}, "properties": {"repobilityId": "14d63a1b55723e0a", "scanner": "scanner-primary", "fingerprint": "a96a4ab667e0d5f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64dc707aee22913d", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/crew-ops/data-import.tsx:41"}, "properties": {"repobilityId": "c342efbb3e1944ca", "scanner": "scanner-primary", "fingerprint": "64dc707aee22913d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd717ef93e4c1783", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/operating-crew-info.tsx:3"}, "properties": {"repobilityId": "0ee849b801034e51", "scanner": "scanner-primary", "fingerprint": "dd717ef93e4c1783", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bd7d09541cd9cf9", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/crew-ops/crew-out-of-base.tsx:4"}, "properties": {"repobilityId": "39528c0677973053", "scanner": "scanner-primary", "fingerprint": "9bd7d09541cd9cf9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef8607d2977b1159", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/rule-violation-messages.tsx:3"}, "properties": {"repobilityId": "29d17b9465e7f348", "scanner": "scanner-primary", "fingerprint": "ef8607d2977b1159", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a40bf7acdc9a676", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/crew-ops/crew-profile.tsx:1"}, "properties": {"repobilityId": "c155000c9e4275fd", "scanner": "scanner-primary", "fingerprint": "1a40bf7acdc9a676", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d8e74d10cf36556", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/crew-ops/documents.tsx:1"}, "properties": {"repobilityId": "aa2b38cafbcde47f", "scanner": "scanner-primary", "fingerprint": "8d8e74d10cf36556", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae4d1640e5a1bf78", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/network/schedule-grid.tsx:144"}, "properties": {"repobilityId": "70f1d642fec155e9", "scanner": "scanner-primary", "fingerprint": "ae4d1640e5a1bf78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9e14dd9e32cb34f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/network/frequency-planning.tsx:94"}, "properties": {"repobilityId": "f0ad08d4b110b149", "scanner": "scanner-primary", "fingerprint": "b9e14dd9e32cb34f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d495f785b99b009", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/network/gantt.tsx:1"}, "properties": {"repobilityId": "7985784dfe096183", "scanner": "scanner-primary", "fingerprint": "3d495f785b99b009", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-593d0d1241db4758", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/admin/audit-log.tsx:28"}, "properties": {"repobilityId": "e1610b38ae866bbc", "scanner": "scanner-primary", "fingerprint": "593d0d1241db4758", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e222dcfda8cad34", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/licensing.tsx:28"}, "properties": {"repobilityId": "e05e1660fc5810a3", "scanner": "scanner-primary", "fingerprint": "0e222dcfda8cad34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21e022726094a14b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/app/(tabs)/admin/index.tsx:18"}, "properties": {"repobilityId": "076c13d1a7756ccf", "scanner": "scanner-primary", "fingerprint": "21e022726094a14b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e3b2c344fef8f65", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/access-rights.tsx:25"}, "properties": {"repobilityId": "50de54fd0946fada", "scanner": "scanner-primary", "fingerprint": "6e3b2c344fef8f65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18f647bf19fd8b39", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/app/(tabs)/admin/users.tsx:12"}, "properties": {"repobilityId": "ab13709a69eabdc6", "scanner": "scanner-primary", "fingerprint": "18f647bf19fd8b39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b35efccc4983dd38", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/app/(tabs)/flight-ops/journey-log.tsx:24"}, "properties": {"repobilityId": "b3b901460e185d00", "scanner": "scanner-primary", "fingerprint": "b35efccc4983dd38", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5af280ee3f531f5", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/app/(tabs)/ground-ops/cargo-manifest.tsx:3"}, "properties": {"repobilityId": "204107b65a13538f", "scanner": "scanner-primary", "fingerprint": "f5af280ee3f531f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93998e1060eb30c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/lib/operating-crew-pdf.ts:1"}, "properties": {"repobilityId": "ff6035439aea5bea", "scanner": "scanner-primary", "fingerprint": "93998e1060eb30c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6c1656fdbd30696", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/lib/report-export.ts:1"}, "properties": {"repobilityId": "0abaaab78895fc57", "scanner": "scanner-primary", "fingerprint": "d6c1656fdbd30696", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65dbbb894247ad1a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/lib/hub-route-map.ts:84"}, "properties": {"repobilityId": "390fa0f58de5f754", "scanner": "scanner-primary", "fingerprint": "65dbbb894247ad1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8692f00ce72f14a7", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/hooks/useOperatorId.ts:17"}, "properties": {"repobilityId": "51523ac5bc5dc7c5", "scanner": "scanner-primary", "fingerprint": "8692f00ce72f14a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-829ea842f2770a51", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/stores/use-crew-checkin-store.ts:148"}, "properties": {"repobilityId": "f9fe153bc54536c4", "scanner": "scanner-primary", "fingerprint": "829ea842f2770a51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37a028ca0f6c6830", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/gantt/selection-action-bar.tsx:1"}, "properties": {"repobilityId": "6402f81c3058beac", "scanner": "scanner-primary", "fingerprint": "37a028ca0f6c6830", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59715ff52cc3df56", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/journey-log/config-sections.tsx:9"}, "properties": {"repobilityId": "51853691b62d220f", "scanner": "scanner-primary", "fingerprint": "59715ff52cc3df56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3545ccd9bda29bb", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/schedule/use-crew-schedule-store.ts:3"}, "properties": {"repobilityId": "405074682517ce2f", "scanner": "scanner-primary", "fingerprint": "d3545ccd9bda29bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dabd01746c669c6c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/components/crew-ops/schedule/crew-schedule-filter-sheet.tsx:4"}, "properties": {"repobilityId": "c08eae9005435efa", "scanner": "scanner-primary", "fingerprint": "dabd01746c669c6c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5a766366c5d08ac", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/layout-bridge.ts:3"}, "properties": {"repobilityId": "b7347727d6f3dd17", "scanner": "scanner-primary", "fingerprint": "c5a766366c5d08ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb3eaba76e4e18f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-canvas.tsx:81"}, "properties": {"repobilityId": "2225aa1a9d708229", "scanner": "scanner-primary", "fingerprint": "cb3eaba76e4e18f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7aa4d816e78cb6d7", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/legality-bridge.ts:3"}, "properties": {"repobilityId": "41cc620a06b67417", "scanner": "scanner-primary", "fingerprint": "7aa4d816e78cb6d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d1cd02aeeded854", "level": "none", "message": {"text": "Commented-code block (11 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-uncrewed-tray.tsx:3"}, "properties": {"repobilityId": "92be4bf13beebd88", "scanner": "scanner-primary", "fingerprint": "8d1cd02aeeded854", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87f67be247c2a316", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-dialogs.tsx:1"}, "properties": {"repobilityId": "a09e73c4f417b250", "scanner": "scanner-primary", "fingerprint": "87f67be247c2a316", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ecd9fd76ba8ef3a6", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-draw.tsx:3"}, "properties": {"repobilityId": "f9e2d80de8fc237e", "scanner": "scanner-primary", "fingerprint": "ecd9fd76ba8ef3a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa21179d9c4ee117", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-rail.tsx:3"}, "properties": {"repobilityId": "1a299cd062bc4b2f", "scanner": "scanner-primary", "fingerprint": "fa21179d9c4ee117", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4ab0dff7b5b2358", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-action-sheet.tsx:3"}, "properties": {"repobilityId": "6120e6bd75d9b368", "scanner": "scanner-primary", "fingerprint": "e4ab0dff7b5b2358", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ebb7b58b0d9f3c3", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-shell.tsx:3"}, "properties": {"repobilityId": "8f29a6e2222bbbad", "scanner": "scanner-primary", "fingerprint": "3ebb7b58b0d9f3c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c847727243b7ed35", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule/crew-schedule-inspector-sheet.tsx:1"}, "properties": {"repobilityId": "aee83c49e0850a09", "scanner": "scanner-primary", "fingerprint": "c847727243b7ed35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95ea195a2b250e87", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/hotac-config/primitives.tsx:1"}, "properties": {"repobilityId": "ec3de8d7f6768f0e", "scanner": "scanner-primary", "fingerprint": "95ea195a2b250e87", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48fd7b545cd80f3d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/hotac-config/section-heroes.tsx:1"}, "properties": {"repobilityId": "f8dee31f1020f837", "scanner": "scanner-primary", "fingerprint": "48fd7b545cd80f3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3943770a4dd3c615", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/training-reports/columns.tsx:1"}, "properties": {"repobilityId": "e7a74d692ddaedb6", "scanner": "scanner-primary", "fingerprint": "3943770a4dd3c615", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-779fa34341751aba", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-reports/export.ts:1"}, "properties": {"repobilityId": "1b17d6245bcfad5d", "scanner": "scanner-primary", "fingerprint": "779fa34341751aba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3728bea8da887c7", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/mobile/src/components/crew-ops/training-reports/training-report-shell.tsx:1"}, "properties": {"repobilityId": "adb381d143719e87", "scanner": "scanner-primary", "fingerprint": "c3728bea8da887c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-545e4db6e45a75ab", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/training-schedule/auto-schedule-shell.tsx:5"}, "properties": {"repobilityId": "33f736075c52a2a6", "scanner": "scanner-primary", "fingerprint": "545e4db6e45a75ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56ea781347f008a2", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-schedule/sim-schedule-shell.tsx:5"}, "properties": {"repobilityId": "8eb31193ef4e9c79", "scanner": "scanner-primary", "fingerprint": "56ea781347f008a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f328964295a402d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-schedule/booking-create-sheet.tsx:1"}, "properties": {"repobilityId": "4cbe5e541b1ce73c", "scanner": "scanner-primary", "fingerprint": "f328964295a402d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9186ccb98d0a0dc", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-schedule/sim-gantt-layout.ts:1"}, "properties": {"repobilityId": "06515dcb21b2fd32", "scanner": "scanner-primary", "fingerprint": "a9186ccb98d0a0dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1feebf0c57467e1b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-documents/documents-filter-panel.tsx:1"}, "properties": {"repobilityId": "983f5c336f5d0bb6", "scanner": "scanner-primary", "fingerprint": "1feebf0c57467e1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c688f2632fa741da", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-documents/crew-search-modal.tsx:1"}, "properties": {"repobilityId": "82efba8ee76aff1a", "scanner": "scanner-primary", "fingerprint": "c688f2632fa741da", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11effe52e0671b9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/duty-swap-config/section-bodies.tsx:1"}, "properties": {"repobilityId": "6679a72bade2895c", "scanner": "scanner-primary", "fingerprint": "11effe52e0671b9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30fdc17fc1dc9900", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-config/pairing-config-body.tsx:1"}, "properties": {"repobilityId": "6ed29a95ee94e626", "scanner": "scanner-primary", "fingerprint": "30fdc17fc1dc9900", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13f3b99dff497849", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing-config/pairing-config-hero.tsx:1"}, "properties": {"repobilityId": "9eea004415c8fcbe", "scanner": "scanner-primary", "fingerprint": "13f3b99dff497849", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c010d4963b401f22", "level": "none", "message": {"text": "Commented-code block (11 lines) in apps/mobile/src/components/crew-ops/data-import/import-templates.ts:3"}, "properties": {"repobilityId": "6f88fb64998d7682", "scanner": "scanner-primary", "fingerprint": "c010d4963b401f22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b8c688b412b378be", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/data-import/data-import-heroes.tsx:15"}, "properties": {"repobilityId": "9227e45e9e55e292", "scanner": "scanner-primary", "fingerprint": "b8c688b412b378be", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6fac792fea1914c", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/schedule-audit/schedule-audit-filters.tsx:1"}, "properties": {"repobilityId": "4ecc62cf068c5f0f", "scanner": "scanner-primary", "fingerprint": "e6fac792fea1914c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca2c8c2dee411c5b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/apis/log-detail-sheet.tsx:1"}, "properties": {"repobilityId": "676e84e662164342", "scanner": "scanner-primary", "fingerprint": "ca2c8c2dee411c5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a2bce612e9ef240", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/apis/log-cusres-sheet.tsx:1"}, "properties": {"repobilityId": "e02e2fe48225df51", "scanner": "scanner-primary", "fingerprint": "1a2bce612e9ef240", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ca95275fb4136e8", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/apis/transmission-filter-sheet.tsx:1"}, "properties": {"repobilityId": "e766456b2e323aeb", "scanner": "scanner-primary", "fingerprint": "7ca95275fb4136e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7dc04ff841d5c22", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/apis/transmission-working-area.tsx:1"}, "properties": {"repobilityId": "ea9150d07d509f7d", "scanner": "scanner-primary", "fingerprint": "d7dc04ff841d5c22", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dba43f4ffd305cc1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-categories/pairing-categories-hero.tsx:15"}, "properties": {"repobilityId": "d2708d54b11d1b2e", "scanner": "scanner-primary", "fingerprint": "dba43f4ffd305cc1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78c440f6fea7ff44", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/pairing-optimizer/shell.tsx:1"}, "properties": {"repobilityId": "21066b807efd6ed2", "scanner": "scanner-primary", "fingerprint": "78c440f6fea7ff44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c2f7d2d3dcc305a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-optimizer/use-pairing-run.ts:3"}, "properties": {"repobilityId": "2e26b93fc61a471d", "scanner": "scanner-primary", "fingerprint": "0c2f7d2d3dcc305a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6283cc071957f0d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-inspector.tsx:1"}, "properties": {"repobilityId": "907889e8feb11f3e", "scanner": "scanner-primary", "fingerprint": "6283cc071957f0d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-19aee0676d42b674", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/flight-pool-list.tsx:1"}, "properties": {"repobilityId": "3950316e1b7d61c9", "scanner": "scanner-primary", "fingerprint": "19aee0676d42b674", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4fdb296cbfa3778", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-store.ts:3"}, "properties": {"repobilityId": "d912ce1b37f9be2f", "scanner": "scanner-primary", "fingerprint": "b4fdb296cbfa3778", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cafee89e528ae4f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing/inspect-pairing-view.tsx:1"}, "properties": {"repobilityId": "e9ce83c0e86ee3ab", "scanner": "scanner-primary", "fingerprint": "cafee89e528ae4f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60ee0907e45200e8", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-list.tsx:1"}, "properties": {"repobilityId": "20f0cefc84c58c50", "scanner": "scanner-primary", "fingerprint": "60ee0907e45200e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13f1a99dbaf5c204", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/pairing/pairing-filter-panel.tsx:1"}, "properties": {"repobilityId": "b71c78c7b6805cf9", "scanner": "scanner-primary", "fingerprint": "13f1a99dbaf5c204", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edc56d52965ff0e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/paradigm-splashes.tsx:1"}, "properties": {"repobilityId": "e10df67b9b449011", "scanner": "scanner-primary", "fingerprint": "edc56d52965ff0e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c72f93b6c5a54336", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/optimizer-chooser.tsx:1"}, "properties": {"repobilityId": "bc019bd552d8a455", "scanner": "scanner-primary", "fingerprint": "c72f93b6c5a54336", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0485591bf48a527b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/shared.tsx:87"}, "properties": {"repobilityId": "2b4aff47379a48a4", "scanner": "scanner-primary", "fingerprint": "0485591bf48a527b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-351df77805ddfc25", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/dialogs.tsx:1"}, "properties": {"repobilityId": "1f32c5bdd6af8c53", "scanner": "scanner-primary", "fingerprint": "351df77805ddfc25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1557e66a1cd2bb2d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/award-step.tsx:1"}, "properties": {"repobilityId": "b41c88f61fa3ff01", "scanner": "scanner-primary", "fingerprint": "1557e66a1cd2bb2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b89bc0150a5b390a", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/bidlines/bidlines-shell.tsx:1"}, "properties": {"repobilityId": "25bf0bca8a79b135", "scanner": "scanner-primary", "fingerprint": "b89bc0150a5b390a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3c86c761fbfb905", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/generate-step.tsx:1"}, "properties": {"repobilityId": "b76ee01033ee44aa", "scanner": "scanner-primary", "fingerprint": "c3c86c761fbfb905", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dda6a70876f48860", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/auto-roster-shell.tsx:6"}, "properties": {"repobilityId": "5cd465fdfdb29371", "scanner": "scanner-primary", "fingerprint": "dda6a70876f48860", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae607418f6758b17", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/review-stats.ts:1"}, "properties": {"repobilityId": "4d414c63607d6711", "scanner": "scanner-primary", "fingerprint": "ae607418f6758b17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46736ccf566ca64f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/workload-histogram.tsx:1"}, "properties": {"repobilityId": "0b233910675b95d6", "scanner": "scanner-primary", "fingerprint": "46736ccf566ca64f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cdad3a78749b771", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/optimizer/auto-roster/review-step.tsx:1"}, "properties": {"repobilityId": "0a91bd4803d38653", "scanner": "scanner-primary", "fingerprint": "7cdad3a78749b771", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3730c2bfb05413ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/manpower-planning/manpower-config-panel.tsx:1"}, "properties": {"repobilityId": "aa23180163f3c5e8", "scanner": "scanner-primary", "fingerprint": "3730c2bfb05413ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9bb3214ca7197d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/manpower-planning/manpower-shared.tsx:1"}, "properties": {"repobilityId": "929ac174d11d5e0a", "scanner": "scanner-primary", "fingerprint": "b9bb3214ca7197d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8143c89d5d4ebc9d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-hero.tsx:1"}, "properties": {"repobilityId": "951898f07e84950b", "scanner": "scanner-primary", "fingerprint": "8143c89d5d4ebc9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-588595ef973193c7", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-confirm-dialog.tsx:1"}, "properties": {"repobilityId": "79cd1883ac73dbac", "scanner": "scanner-primary", "fingerprint": "588595ef973193c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d026df8b42430e4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/delete-pairings-results.tsx:1"}, "properties": {"repobilityId": "eb2b98d8ae56f89f", "scanner": "scanner-primary", "fingerprint": "d026df8b42430e4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-395ee50a4609ead3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/delete-pairings/danger-button.tsx:1"}, "properties": {"repobilityId": "e691a1e87f9d09b2", "scanner": "scanner-primary", "fingerprint": "395ee50a4609ead3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7195f235b94fc3c2", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule-publish/published-crew-export.ts:1"}, "properties": {"repobilityId": "51f0219b9ae96711", "scanner": "scanner-primary", "fingerprint": "7195f235b94fc3c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2dc78b53e2254d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/unpublish-picker.tsx:1"}, "properties": {"repobilityId": "202991f0adab5226", "scanner": "scanner-primary", "fingerprint": "e2dc78b53e2254d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-473c6d7b3c1bfd0a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/published-crew-table.tsx:1"}, "properties": {"repobilityId": "f43eb670844756f6", "scanner": "scanner-primary", "fingerprint": "473c6d7b3c1bfd0a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-002e31b7baee543f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/schedule-publish/schedule-publish-filters.tsx:1"}, "properties": {"repobilityId": "6dd7ebfc9348dd17", "scanner": "scanner-primary", "fingerprint": "002e31b7baee543f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-953555c1c5478a50", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/schedule-publish/schedule-publish-console.tsx:1"}, "properties": {"repobilityId": "84792c718b88903d", "scanner": "scanner-primary", "fingerprint": "953555c1c5478a50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d17c047f19ba9a2c", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/schedule-publish/specific-crew-sheet.tsx:1"}, "properties": {"repobilityId": "81a2d6545fce1dbb", "scanner": "scanner-primary", "fingerprint": "d17c047f19ba9a2c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90d70d0bf9058787", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/scheduling-config/section-bodies-fair.tsx:1"}, "properties": {"repobilityId": "bda57b7253e51772", "scanner": "scanner-primary", "fingerprint": "90d70d0bf9058787", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85f7d675549e4afc", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/crew-ops/scheduling-config/draft.ts:1"}, "properties": {"repobilityId": "d5dcd5bdd7d22e02", "scanner": "scanner-primary", "fingerprint": "85f7d675549e4afc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89d73c8658444d15", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/use-pairing-gantt-store.ts:3"}, "properties": {"repobilityId": "af15df3f82854237", "scanner": "scanner-primary", "fingerprint": "89d73c8658444d15", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74688d9125a49ffb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/pairing-gantt-canvas.tsx:1"}, "properties": {"repobilityId": "84585f20e33c786e", "scanner": "scanner-primary", "fingerprint": "74688d9125a49ffb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bb6fc1f167d36a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/pairing-gantt/pairing-types.ts:1"}, "properties": {"repobilityId": "24199a6ec87394d2", "scanner": "scanner-primary", "fingerprint": "9bb6fc1f167d36a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60be815034cab447", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/components/crew-ops/pairing-gantt/pairing-filter-sheet.tsx:2"}, "properties": {"repobilityId": "fc9ab1b9b477ab62", "scanner": "scanner-primary", "fingerprint": "60be815034cab447", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-15835eaa35dfc479", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-app-audit/specific-crew-search-modal.tsx:1"}, "properties": {"repobilityId": "96207761c1d57fbb", "scanner": "scanner-primary", "fingerprint": "15835eaa35dfc479", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98f6776cfa70dbf4", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/crew-app-audit/audit-filters.tsx:1"}, "properties": {"repobilityId": "811baefddf482281", "scanner": "scanner-primary", "fingerprint": "98f6776cfa70dbf4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c5bd761263ff0ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/session-inspector.tsx:1"}, "properties": {"repobilityId": "a31666ba1fd3a7c5", "scanner": "scanner-primary", "fingerprint": "3c5bd761263ff0ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42e4081174ccb7d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/expiries-results.tsx:1"}, "properties": {"repobilityId": "6fd8c663e5dfab1e", "scanner": "scanner-primary", "fingerprint": "42e4081174ccb7d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b27741638b786a1", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/mobile/src/components/crew-ops/training-core/session-create-dialog.tsx:1"}, "properties": {"repobilityId": "0e34c05328db0de1", "scanner": "scanner-primary", "fingerprint": "7b27741638b786a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ee2ff0d33748d5f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/crew-ops/training-core/expiries-filter-rail.tsx:1"}, "properties": {"repobilityId": "bb0696d391eb3bd0", "scanner": "scanner-primary", "fingerprint": "9ee2ff0d33748d5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad3fb430e3991bd5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelIntelMobile.tsx:1"}, "properties": {"repobilityId": "479ea7186837703e", "scanner": "scanner-primary", "fingerprint": "ad3fb430e3991bd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53188d1d178f7e52", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelRadialSkia.tsx:3"}, "properties": {"repobilityId": "7596475fad5e67c2", "scanner": "scanner-primary", "fingerprint": "53188d1d178f7e52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91a65491c204bedc", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelNodeSheet.tsx:1"}, "properties": {"repobilityId": "77cd31e3b762c8e8", "scanner": "scanner-primary", "fingerprint": "91a65491c204bedc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f8b244712f6e6b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelBreakdownList.tsx:1"}, "properties": {"repobilityId": "87e9eb4a97661cde", "scanner": "scanner-primary", "fingerprint": "0f8b244712f6e6b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f301621d9a142039", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/components/flight-ops/fuel-report/intel/FuelKpiStrip.tsx:1"}, "properties": {"repobilityId": "bbba099b44fdbb81", "scanner": "scanner-primary", "fingerprint": "f301621d9a142039", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0724f35f2aff29", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/emissions-report/emissions-parts.tsx:3"}, "properties": {"repobilityId": "5393b87ec8ae7a9e", "scanner": "scanner-primary", "fingerprint": "cc0724f35f2aff29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af52b0d9720ca85d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/status-board/kpi-cards.tsx:6"}, "properties": {"repobilityId": "8639d09101f11924", "scanner": "scanner-primary", "fingerprint": "af52b0d9720ca85d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4fa6fff2f133ad1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/maintenance-planning/event-action-sheet.tsx:1"}, "properties": {"repobilityId": "9dee6f7c3be9281b", "scanner": "scanner-primary", "fingerprint": "a4fa6fff2f133ad1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdf2d82c8e42d006", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/components/flight-ops/occ/flight-detail-modal.tsx:1"}, "properties": {"repobilityId": "c7ce22c03400141f", "scanner": "scanner-primary", "fingerprint": "bdf2d82c8e42d006", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f29f1401ef7b5a8", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/mobile/src/components/maintenance/maintenance-gantt-canvas.tsx:6"}, "properties": {"repobilityId": "cbecd1f09e8c6ed7", "scanner": "scanner-primary", "fingerprint": "3f29f1401ef7b5a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cbce95ad0e9cc84", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/gantt/cache.ts:1"}, "properties": {"repobilityId": "4a88382a7e5431b7", "scanner": "scanner-primary", "fingerprint": "0cbce95ad0e9cc84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ad95ae6cd008608", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/mobile/src/lib/gantt/wmdb-bridge.ts:1"}, "properties": {"repobilityId": "fc4aa6eb3283edca", "scanner": "scanner-primary", "fingerprint": "0ad95ae6cd008608", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bae18f889e2c811", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/lib/gantt/use-canvas-font.ts:3"}, "properties": {"repobilityId": "315b98f4dc15faa1", "scanner": "scanner-primary", "fingerprint": "4bae18f889e2c811", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4476ead00a438ff", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mobile/src/database/schema.ts:1"}, "properties": {"repobilityId": "cb981c87d1dbc5bf", "scanner": "scanner-primary", "fingerprint": "a4476ead00a438ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42c26c52d7b7ab95", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/database/wmdb-types.d.ts:1"}, "properties": {"repobilityId": "48407b85ff6649a3", "scanner": "scanner-primary", "fingerprint": "42c26c52d7b7ab95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a977e579f887d4a8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mobile/src/database/wmdb-types.d.ts:23"}, "properties": {"repobilityId": "444362d6320cc0b9", "scanner": "scanner-primary", "fingerprint": "a977e579f887d4a8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3cbe062cc0b322e8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/mobile/src/database/index.ts:1"}, "properties": {"repobilityId": "966253c2058c7571", "scanner": "scanner-primary", "fingerprint": "3cbe062cc0b322e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b1924ec4bc25acdb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/crew/app/_layout.tsx:65"}, "properties": {"repobilityId": "90275ff2330e65d2", "scanner": "scanner-primary", "fingerprint": "b1924ec4bc25acdb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0975e5f3cff486eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/crew/app/activity/[activityId].tsx:285"}, "properties": {"repobilityId": "5aeb15da97f8ea7a", "scanner": "scanner-primary", "fingerprint": "0975e5f3cff486eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b967ea0545d66c01", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/activity/[activityId].tsx:66"}, "properties": {"repobilityId": "82e78870fb41daec", "scanner": "scanner-primary", "fingerprint": "b967ea0545d66c01", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e4d0a853bfeb5203", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/crew/app/duty/[assignmentId].tsx:65"}, "properties": {"repobilityId": "100e0f76dd207493", "scanner": "scanner-primary", "fingerprint": "e4d0a853bfeb5203", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba7aca95efd490b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/duty/[assignmentId].tsx:144"}, "properties": {"repobilityId": "1a0c6bbe23fce508", "scanner": "scanner-primary", "fingerprint": "ba7aca95efd490b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7a3b08df3ce3d3a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/swap/vacation.tsx:103"}, "properties": {"repobilityId": "d7fbb2151a540671", "scanner": "scanner-primary", "fingerprint": "f7a3b08df3ce3d3a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a5a0b075f2e6e85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/(tabs)/messages.tsx:26"}, "properties": {"repobilityId": "0bca5e65aff78764", "scanner": "scanner-primary", "fingerprint": "6a5a0b075f2e6e85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-be9f842a449d29c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/crew/app/(tabs)/bidding.tsx:483"}, "properties": {"repobilityId": "d104cc78160e1aae", "scanner": "scanner-primary", "fingerprint": "be9f842a449d29c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4823aa7a0e8b2bb0", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/crew/app/(tabs)/roster.tsx:41"}, "properties": {"repobilityId": "45999046659fb1df", "scanner": "scanner-primary", "fingerprint": "4823aa7a0e8b2bb0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-89b6e9fc430697ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/app/(tabs)/roster.tsx:125"}, "properties": {"repobilityId": "ff460ff1ac695446", "scanner": "scanner-primary", "fingerprint": "89b6e9fc430697ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-73ba925bee64c222", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/crew/app/(tabs)/more.tsx:99"}, "properties": {"repobilityId": "9c58e45574d626df", "scanner": "scanner-primary", "fingerprint": "73ba925bee64c222", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0bd74db9da7675e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/crew/src/stores/use-crew-app-config-store.ts:231"}, "properties": {"repobilityId": "bbf4a77115ee4615", "scanner": "scanner-primary", "fingerprint": "0bd74db9da7675e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7fe993e21e5d8d9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/crew/src/components/AcknowledgementGateScreen.tsx:38"}, "properties": {"repobilityId": "f635c7850391c4fb", "scanner": "scanner-primary", "fingerprint": "d7fe993e21e5d8d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48db923f8464d37d", "level": "note", "message": {"text": "Legacy-named symbol `isLegacy` in apps/crew/src/theme/use-theme.ts:22"}, "properties": {"repobilityId": "696097f5116137c3", "scanner": "scanner-primary", "fingerprint": "48db923f8464d37d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e729abc3dfad9dd1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/crew/src/lib/api-client.ts:960"}, "properties": {"repobilityId": "f48476c1f94de2dc", "scanner": "scanner-primary", "fingerprint": "e729abc3dfad9dd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-001179e56bce8f98", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-schedule-legality-check-store.ts:110"}, "properties": {"repobilityId": "b5a4e81c93ec1e36", "scanner": "scanner-primary", "fingerprint": "001179e56bce8f98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6210275660ad168a", "level": "note", "message": {"text": "Legacy-named symbol `pairing_period_v1` in apps/web/src/stores/use-pairing-store.ts:176"}, "properties": {"repobilityId": "83681acfd5ada082", "scanner": "scanner-primary", "fingerprint": "6210275660ad168a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2c703ea800d493db", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-pairing-store.ts:91"}, "properties": {"repobilityId": "6f2e9b45146eed2f", "scanner": "scanner-primary", "fingerprint": "2c703ea800d493db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2175c400e1964d3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-gantt-store.ts:1035"}, "properties": {"repobilityId": "4661d9526ebe86f4", "scanner": "scanner-primary", "fingerprint": "d2175c400e1964d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39529d0d7f2e5c37", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-route-summary-store.ts:77"}, "properties": {"repobilityId": "2ef3e666f0ad3240", "scanner": "scanner-primary", "fingerprint": "39529d0d7f2e5c37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-790082b2bc842eb3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-frequency-planning-store.ts:257"}, "properties": {"repobilityId": "f64f606922d7a7a9", "scanner": "scanner-primary", "fingerprint": "790082b2bc842eb3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bb41c6a025e02b06", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-crew-schedule-store.ts:1349"}, "properties": {"repobilityId": "00b79bfba6f2298f", "scanner": "scanner-primary", "fingerprint": "bb41c6a025e02b06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71ac5842f1fd9311", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/stores/use-crew-schedule-store.ts:2524"}, "properties": {"repobilityId": "15bf4e706cadb839", "scanner": "scanner-primary", "fingerprint": "71ac5842f1fd9311", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cbab04562e5f19f4", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-checkin-store.ts:150"}, "properties": {"repobilityId": "69e743591dfa6672", "scanner": "scanner-primary", "fingerprint": "cbab04562e5f19f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f76d9e6ecc0df8a", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-pic-discretion-store.ts:82"}, "properties": {"repobilityId": "0af56769079f327c", "scanner": "scanner-primary", "fingerprint": "1f76d9e6ecc0df8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0ed7da3ad4c3a83", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-frequency-analysis-store.ts:57"}, "properties": {"repobilityId": "d1e4f7f0b79367e4", "scanner": "scanner-primary", "fingerprint": "d0ed7da3ad4c3a83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44f73d0e84d864fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/stores/use-schedule-audit-store.ts:206"}, "properties": {"repobilityId": "2cca972b13c47849", "scanner": "scanner-primary", "fingerprint": "44f73d0e84d864fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-177ae7d0a9448eb6", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/stores/use-airport-activity-store.ts:81"}, "properties": {"repobilityId": "712f0d6f4e08eb56", "scanner": "scanner-primary", "fingerprint": "177ae7d0a9448eb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-809cf34e616ede01", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-schedule-stability-store.ts:105"}, "properties": {"repobilityId": "4fa96f16979843ae", "scanner": "scanner-primary", "fingerprint": "809cf34e616ede01", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-77cbbddd33d29319", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-standby-store.ts:157"}, "properties": {"repobilityId": "47f2fdf5c4d589d1", "scanner": "scanner-primary", "fingerprint": "77cbbddd33d29319", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d36057a30e3928a3", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/stores/use-schedule-ref-store.ts:152"}, "properties": {"repobilityId": "db60357c330e6f0c", "scanner": "scanner-primary", "fingerprint": "d36057a30e3928a3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e8e313d3a78bcab", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-out-of-base-store.ts:150"}, "properties": {"repobilityId": "f1bf9b68d664b1d7", "scanner": "scanner-primary", "fingerprint": "6e8e313d3a78bcab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80987613b24e3dac", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/stores/use-crew-roster-store.ts:80"}, "properties": {"repobilityId": "fec7d46dfc3d2a8b", "scanner": "scanner-primary", "fingerprint": "80987613b24e3dac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3cd5eb613287b937", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/stores/use-crew-pairings-store.ts:167"}, "properties": {"repobilityId": "aa839540ab81638c", "scanner": "scanner-primary", "fingerprint": "3cd5eb613287b937", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec71c8fccb745ebd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/auth-provider.tsx:160"}, "properties": {"repobilityId": "21c9f110241503e8", "scanner": "scanner-primary", "fingerprint": "ec71c8fccb745ebd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd20dcdebaa69964", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/app-shell.tsx:27"}, "properties": {"repobilityId": "62a16f6b84e14640", "scanner": "scanner-primary", "fingerprint": "bd20dcdebaa69964", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d6ccb9126e66ba49", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/help/help-search-bar.tsx:54"}, "properties": {"repobilityId": "0b09f070c16dc1bb", "scanner": "scanner-primary", "fingerprint": "d6ccb9126e66ba49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6b81897b3be672a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/uncrewed-duties-tray.tsx:481"}, "properties": {"repobilityId": "fedecdbeafd99227", "scanner": "scanner-primary", "fingerprint": "6b81897b3be672a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da6bb05e59a23ed9", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-open-duties-section.tsx:66"}, "properties": {"repobilityId": "14436906a11622a9", "scanner": "scanner-primary", "fingerprint": "da6bb05e59a23ed9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8be6bf17a2baac3", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-context-menu.tsx:1077"}, "properties": {"repobilityId": "8b3454d86f501305", "scanner": "scanner-primary", "fingerprint": "e8be6bf17a2baac3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-533fc579f462bd93", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-right-panel.tsx:93"}, "properties": {"repobilityId": "9aae0bea35c9b144", "scanner": "scanner-primary", "fingerprint": "533fc579f462bd93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfbeceea2ec194e0", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-canvas.tsx:432"}, "properties": {"repobilityId": "735eb10e5e2b69cd", "scanner": "scanner-primary", "fingerprint": "cfbeceea2ec194e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fd139dc3dd0cc25", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-left-panel.tsx:101"}, "properties": {"repobilityId": "9981bcd0c2a3c9a8", "scanner": "scanner-primary", "fingerprint": "5fd139dc3dd0cc25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d1fe4cb494bb30d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/crew-schedule-shell.tsx:213"}, "properties": {"repobilityId": "320b8cd3f9cf2477", "scanner": "scanner-primary", "fingerprint": "3d1fe4cb494bb30d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc5a4904b891421c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/activity-code-picker.tsx:53"}, "properties": {"repobilityId": "470185999c75806e", "scanner": "scanner-primary", "fingerprint": "dc5a4904b891421c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93440f397b2898b5", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/schedule/skyai/skyai-panel.tsx:89"}, "properties": {"repobilityId": "a7c2584be6904624", "scanner": "scanner-primary", "fingerprint": "93440f397b2898b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bbf68dbf25352a2", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/skyai/skyai-chart.tsx:449"}, "properties": {"repobilityId": "84adc480f31eaaf5", "scanner": "scanner-primary", "fingerprint": "6bbf68dbf25352a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b848e0089459fb98", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/legality-check-dialog.tsx:88"}, "properties": {"repobilityId": "b6e624f40eae275b", "scanner": "scanner-primary", "fingerprint": "b848e0089459fb98", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b629d530553ddd99", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/temporary-base-dialog.tsx:85"}, "properties": {"repobilityId": "43008a89d8f0ad98", "scanner": "scanner-primary", "fingerprint": "b629d530553ddd99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18edab8d8734687a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/standby-callout-prompt-dialog.tsx:80"}, "properties": {"repobilityId": "0523ba1c7bd1f90e", "scanner": "scanner-primary", "fingerprint": "18edab8d8734687a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fff0ab008ebbdebe", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/schedule/dialogs/frms-review-dialog.tsx:407"}, "properties": {"repobilityId": "180b2f6a842aea49", "scanner": "scanner-primary", "fingerprint": "fff0ab008ebbdebe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-672eef99ead7db35", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/schedule/dialogs/pairing-details-dialog-host.tsx:38"}, "properties": {"repobilityId": "2a35786d847edc8a", "scanner": "scanner-primary", "fingerprint": "672eef99ead7db35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13ce60bec3a6841a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/hotac/status-meta.tsx:6"}, "properties": {"repobilityId": "7d6a12a1b113233b", "scanner": "scanner-primary", "fingerprint": "13ce60bec3a6841a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f915264a6e1958e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/hotac/shell/hotac-shell.tsx:167"}, "properties": {"repobilityId": "409697779a9a2d05", "scanner": "scanner-primary", "fingerprint": "8f915264a6e1958e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ded251fb6a423b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-schedule-stats/crew-schedule-stats-shell.tsx:111"}, "properties": {"repobilityId": "90b428f699cda6f5", "scanner": "scanner-primary", "fingerprint": "4ded251fb6a423b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26c1b0f7329a3405", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/crew-documents/document-list.tsx:69"}, "properties": {"repobilityId": "b688a037ced2ffbd", "scanner": "scanner-primary", "fingerprint": "26c1b0f7329a3405", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5d6c014f31771631", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/crew-documents/common/document-icons.ts:55"}, "properties": {"repobilityId": "ec879879a7f7595b", "scanner": "scanner-primary", "fingerprint": "5d6c014f31771631", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82018eb8493df67c", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/data-import/import-templates.ts:3"}, "properties": {"repobilityId": "f3f1bc014788fbdc", "scanner": "scanner-primary", "fingerprint": "82018eb8493df67c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7bc7bb2b57a6ce9", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/shell/pairing-optimizer-shell.tsx:148"}, "properties": {"repobilityId": "6526b46a681ad9d5", "scanner": "scanner-primary", "fingerprint": "d7bc7bb2b57a6ce9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99e4b17c5e0bd772", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/components/crew-ops/pairing/optimizer/steps/use-pairing-run.ts:330"}, "properties": {"repobilityId": "edc447ef1a256405", "scanner": "scanner-primary", "fingerprint": "99e4b17c5e0bd772", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ad0f90fb62c4cbc", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/pairing/gantt-view/pairing-gantt-canvas.tsx:621"}, "properties": {"repobilityId": "14fb20dddabaaadc", "scanner": "scanner-primary", "fingerprint": "5ad0f90fb62c4cbc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-061c43a8852b42ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/gantt-view/gantt-inspector-panel/index.tsx:452"}, "properties": {"repobilityId": "88091427b40bd42f", "scanner": "scanner-primary", "fingerprint": "061c43a8852b42ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c105d77ebb291fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/layover-chip.tsx:34"}, "properties": {"repobilityId": "cdc0e881dacb3959", "scanner": "scanner-primary", "fingerprint": "4c105d77ebb291fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5975290c79f24657", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/flight-pool-panel.tsx:38"}, "properties": {"repobilityId": "026f9da297a8b9d9", "scanner": "scanner-primary", "fingerprint": "5975290c79f24657", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5caf27c1c9d422d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/text-view/flight-grid/flight-grid-context-menu.tsx:282"}, "properties": {"repobilityId": "83d7973e66e80777", "scanner": "scanner-primary", "fingerprint": "5caf27c1c9d422d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de1ba4349413dc62", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/pairing/dialogs/pairing-details-dialog.tsx:150"}, "properties": {"repobilityId": "f4b2726dd8eb7add", "scanner": "scanner-primary", "fingerprint": "de1ba4349413dc62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0088f16a81dff2d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/crew-ops/pairing/dialogs/replicate-pairing-dialog.tsx:135"}, "properties": {"repobilityId": "96a5d61123fdc2f6", "scanner": "scanner-primary", "fingerprint": "0088f16a81dff2d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88595401afac6bfc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/crew-profile/crew-profile-shell.tsx:146"}, "properties": {"repobilityId": "7b99ee3a0663d32f", "scanner": "scanner-primary", "fingerprint": "88595401afac6bfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7366291b8f9ccc0", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-profile/grid/aircraft-qualifications-grid.tsx:622"}, "properties": {"repobilityId": "a9c6e33b13578a78", "scanner": "scanner-primary", "fingerprint": "f7366291b8f9ccc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27d0db51d21b21fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/check-in/check-in-shell.tsx:51"}, "properties": {"repobilityId": "0851efe531f5add3", "scanner": "scanner-primary", "fingerprint": "27d0db51d21b21fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6576516c85e27354", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/bidlines/bidlines-shell.tsx:366"}, "properties": {"repobilityId": "fce34c1ec00e5e7b", "scanner": "scanner-primary", "fingerprint": "6576516c85e27354", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb23919bf0613484", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/crew-ops/crew-app-config/crew-app-config-shell.tsx:757"}, "properties": {"repobilityId": "43434e1ea9b6b050", "scanner": "scanner-primary", "fingerprint": "fb23919bf0613484", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ab65e807eb28f4e", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/src/components/crew-ops/auto-roster/auto-roster-shell.tsx:347"}, "properties": {"repobilityId": "4d86ef7b58474105", "scanner": "scanner-primary", "fingerprint": "3ab65e807eb28f4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-592389976dc45638", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/training/sessions/training-sessions-shell.tsx:157"}, "properties": {"repobilityId": "89a1400b6cc03f37", "scanner": "scanner-primary", "fingerprint": "592389976dc45638", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e337dc1e62764c0a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/components/crew-ops/training/sim-schedule/sim-schedule-shell.tsx:186"}, "properties": {"repobilityId": "dc28d71d6c356d86", "scanner": "scanner-primary", "fingerprint": "e337dc1e62764c0a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-67a29ed0b4d85489", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/components/network/gantt/gantt-shell.tsx:64"}, "properties": {"repobilityId": "b339cab78021e301", "scanner": "scanner-primary", "fingerprint": "67a29ed0b4d85489", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad0ed249555d017e", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/network/slots/series-context-menu.tsx:79"}, "properties": {"repobilityId": "e5211e688f76b774", "scanner": "scanner-primary", "fingerprint": "ad0ed249555d017e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-960309b870cdfe04", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/network/slots/slot-manager-shell.tsx:326"}, "properties": {"repobilityId": "4550a25f35641905", "scanner": "scanner-primary", "fingerprint": "960309b870cdfe04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d5d968b4d907039", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/components/network/shared/predictive-cells.tsx:6"}, "properties": {"repobilityId": "626b0656de8d000e", "scanner": "scanner-primary", "fingerprint": "1d5d968b4d907039", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-220502bc1270f399", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/components/network/codeshare/codeshare-shell.tsx:21"}, "properties": {"repobilityId": "f8704c7e03161bec", "scanner": "scanner-primary", "fingerprint": "220502bc1270f399", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-39a9c9421633598c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/network/codeshare/codeshare-types.ts:35"}, "properties": {"repobilityId": "128db30075f22356", "scanner": "scanner-primary", "fingerprint": "39a9c9421633598c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-259afa5a09e860fe", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/network/optimizer/optimizer-shell.tsx:237"}, "properties": {"repobilityId": "4c819b6010fe7ecc", "scanner": "scanner-primary", "fingerprint": "259afa5a09e860fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1bec02646605dee", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/network/optimizer/inspector/inspector.tsx:226"}, "properties": {"repobilityId": "a591c59f2bc2802e", "scanner": "scanner-primary", "fingerprint": "d1bec02646605dee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62a551a71c97e8dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/network/skyai/skyai-chart.tsx:415"}, "properties": {"repobilityId": "308183ec4120f550", "scanner": "scanner-primary", "fingerprint": "62a551a71c97e8dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d5f13eb6dc4f819", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/flight-ops/skyai/flight-ops-skyai-launcher.tsx:119"}, "properties": {"repobilityId": "55f4884d2d1f1205", "scanner": "scanner-primary", "fingerprint": "7d5f13eb6dc4f819", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23bee3fc4eb950d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/hub/page.tsx:165"}, "properties": {"repobilityId": "fc4171c9f7391b8e", "scanner": "scanner-primary", "fingerprint": "23bee3fc4eb950d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba685c62683a6463", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/app/crew-ops/control/crew-schedule/page.tsx:1"}, "properties": {"repobilityId": "e1276135057dbaa9", "scanner": "scanner-primary", "fingerprint": "ba685c62683a6463", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0716ba7382104e79", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/lib/authed-fetch.ts:5"}, "properties": {"repobilityId": "833b81f54d9ada92", "scanner": "scanner-primary", "fingerprint": "0716ba7382104e79", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cd9ef0c5852e65ed", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/gantt/pairing-draw-helpers.ts:196"}, "properties": {"repobilityId": "2e53af488980a074", "scanner": "scanner-primary", "fingerprint": "cd9ef0c5852e65ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-589fe255743edd33", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/gantt/scenario-diff.ts:185"}, "properties": {"repobilityId": "71450f8aa86ef42b", "scanner": "scanner-primary", "fingerprint": "589fe255743edd33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1dcab04f82aeca39", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/gantt/diff-draw-helpers.ts:121"}, "properties": {"repobilityId": "2e0deb2d6f86ff27", "scanner": "scanner-primary", "fingerprint": "1dcab04f82aeca39", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e8d4a9cabdf76c1d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/world-map/aircraft-silhouette.ts:147"}, "properties": {"repobilityId": "1154bbc54042b7ea", "scanner": "scanner-primary", "fingerprint": "e8d4a9cabdf76c1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-262679e7c4e479ba", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/lib/crew-schedule/violations.ts:146"}, "properties": {"repobilityId": "d20e9bdb235624c8", "scanner": "scanner-primary", "fingerprint": "262679e7c4e479ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdb12dd83e588946", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/layout.ts:303"}, "properties": {"repobilityId": "4f7d502a85797f67", "scanner": "scanner-primary", "fingerprint": "bdb12dd83e588946", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2026f7d6c205b5c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/uncrewed-layout.ts:117"}, "properties": {"repobilityId": "6f07368535c1198e", "scanner": "scanner-primary", "fingerprint": "2026f7d6c205b5c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10520ca9164a6e4c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-schedule/drop-legality.ts:116"}, "properties": {"repobilityId": "ddb3841a25fe281e", "scanner": "scanner-primary", "fingerprint": "10520ca9164a6e4c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-734b172ef37069b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-coverage/compute-flight-coverage.ts:59"}, "properties": {"repobilityId": "d51122c1afb4dde9", "scanner": "scanner-primary", "fingerprint": "734b172ef37069b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-399a4beb4fd688d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/crew-coverage/compute-next-leg-candidates.ts:103"}, "properties": {"repobilityId": "914c389f67b77a4a", "scanner": "scanner-primary", "fingerprint": "399a4beb4fd688d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3378e9f2f6aeeded", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/types/src/crew-ops-ai-actions.ts:169"}, "properties": {"repobilityId": "20857bfab41baccd", "scanner": "scanner-primary", "fingerprint": "3378e9f2f6aeeded", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-11bd10eff1851bd7", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/crew-db/src/schema.ts:4"}, "properties": {"repobilityId": "949be1691cafa22e", "scanner": "scanner-primary", "fingerprint": "11bd10eff1851bd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccacda7b6e853ff4", "level": "none", "message": {"text": "Commented-code block (11 lines) in packages/crew-db/src/sync/sync-client.ts:101"}, "properties": {"repobilityId": "be926391b920a236", "scanner": "scanner-primary", "fingerprint": "ccacda7b6e853ff4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23e5abade79c13df", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/crew-db/src/sync/sync-client.ts:53"}, "properties": {"repobilityId": "47db975f9fb44c3f", "scanner": "scanner-primary", "fingerprint": "23e5abade79c13df", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-08a37d495abc7429", "level": "note", "message": {"text": "Legacy-named symbol `advisory_v1` in packages/api/src/client.ts:12009"}, "properties": {"repobilityId": "788c0b9da5b5cd11", "scanner": "scanner-primary", "fingerprint": "08a37d495abc7429", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-646e13661c44e0a7", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api/src/client.ts:4461"}, "properties": {"repobilityId": "f9394b99399dc65f", "scanner": "scanner-primary", "fingerprint": "646e13661c44e0a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc884be581bbe0e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api/src/client.ts:232"}, "properties": {"repobilityId": "e8e43ca52769c884", "scanner": "scanner-primary", "fingerprint": "dc884be581bbe0e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-52e0125e13dfce28", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/ui/src/components/SpotlightDock.tsx:1"}, "properties": {"repobilityId": "599da74f1066c990", "scanner": "scanner-primary", "fingerprint": "52e0125e13dfce28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b55de4114141a5f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/ui/src/components/UncertaintyValue.tsx:3"}, "properties": {"repobilityId": "209c9a7550d1b1e3", "scanner": "scanner-primary", "fingerprint": "b55de4114141a5f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc7e3bb42a83ca71", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/ui/src/components/uncertainty.ts:1"}, "properties": {"repobilityId": "1be3e780c97d4a79", "scanner": "scanner-primary", "fingerprint": "bc7e3bb42a83ca71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b504e42d12b6518", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/ui/src/components/scheduling/SchedulePolicyForm.tsx:3"}, "properties": {"repobilityId": "21bfb45c778a6327", "scanner": "scanner-primary", "fingerprint": "5b504e42d12b6518", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d7ddf4d46c4d413", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/ui/src/components/reports/ReportTable.tsx:1"}, "properties": {"repobilityId": "c3391b8cf63e7142", "scanner": "scanner-primary", "fingerprint": "9d7ddf4d46c4d413", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-165cedd77e0b2039", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/ui/src/components/reports/__tests__/ReportTable.test.tsx:1"}, "properties": {"repobilityId": "f44b6e5ad2097980", "scanner": "scanner-primary", "fingerprint": "165cedd77e0b2039", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16c0e48cbce453f2", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/constants/src/module-registry.ts:394"}, "properties": {"repobilityId": "202303017a1d257c", "scanner": "scanner-primary", "fingerprint": "16c0e48cbce453f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c1fb2113a7939ce", "level": "none", "message": {"text": "Commented-code block (43 lines) in packages/constants/src/permission-catalog.ts:23"}, "properties": {"repobilityId": "6e13a30307b8d255", "scanner": "scanner-primary", "fingerprint": "7c1fb2113a7939ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9a9b1a605f0f057", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/logic/src/index.ts:72"}, "properties": {"repobilityId": "44c9964272efaa76", "scanner": "scanner-primary", "fingerprint": "f9a9b1a605f0f057", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02b365b2ce0d618c", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/logic/src/fdtl/disruptive-rest.ts:1"}, "properties": {"repobilityId": "2ece6d91a163b202", "scanner": "scanner-primary", "fingerprint": "02b365b2ce0d618c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9f49ad937ef0ab6", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/crew-schedule-validator-types.ts:83"}, "properties": {"repobilityId": "74585d97069a0fae", "scanner": "scanner-primary", "fingerprint": "d9f49ad937ef0ab6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b8410e7f02f0051", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/commander-discretion.ts:1"}, "properties": {"repobilityId": "cebe5c1f78bec382", "scanner": "scanner-primary", "fingerprint": "8b8410e7f02f0051", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0fb27cbc6252a1d", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/evaluators.ts:334"}, "properties": {"repobilityId": "13abe12376e7aa2f", "scanner": "scanner-primary", "fingerprint": "b0fb27cbc6252a1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7dc392eeeaf9053a", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/logic/src/fdtl/split-duty.ts:1"}, "properties": {"repobilityId": "0fc7aa8a20f2f255", "scanner": "scanner-primary", "fingerprint": "7dc392eeeaf9053a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90d02c48f06d5b7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/validator.ts:168"}, "properties": {"repobilityId": "e9ead6cbcebb6ec7", "scanner": "scanner-primary", "fingerprint": "90d02c48f06d5b7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7c23721de79f66f4", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/logic/src/fdtl/schedule-duty-builder.ts:1"}, "properties": {"repobilityId": "8a2887af6f18816d", "scanner": "scanner-primary", "fingerprint": "7c23721de79f66f4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e7d83b00fd6f9d1", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/logic/src/fdtl/fdp-table.ts:1"}, "properties": {"repobilityId": "8379e5b8d74c463b", "scanner": "scanner-primary", "fingerprint": "8e7d83b00fd6f9d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff041bcc7beaa75c", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/logic/src/fdtl/engine.ts:11"}, "properties": {"repobilityId": "7e7fc7a06234b83c", "scanner": "scanner-primary", "fingerprint": "ff041bcc7beaa75c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5094c1606a6aeaca", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/min-local-nights.test.ts:5"}, "properties": {"repobilityId": "e0be5bdb83a44f0d", "scanner": "scanner-primary", "fingerprint": "5094c1606a6aeaca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3afe0772de5b04c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/min-rest-discretion.test.ts:5"}, "properties": {"repobilityId": "27dd9c6e509405ae", "scanner": "scanner-primary", "fingerprint": "c3afe0772de5b04c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee7765d9209f61d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/delayed-reporting.test.ts:6"}, "properties": {"repobilityId": "950b5e21d8b9df31", "scanner": "scanner-primary", "fingerprint": "ee7765d9209f61d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-305a1d7b7782f3f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/fdtl/__tests__/fdtl-phase-d.test.ts:5"}, "properties": {"repobilityId": "2877e74fa544367e", "scanner": "scanner-primary", "fingerprint": "305a1d7b7782f3f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b6d89212a223b8e", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/logic/src/fdtl/templates/caav-var15.ts:286"}, "properties": {"repobilityId": "fdd31fff942f6e8b", "scanner": "scanner-primary", "fingerprint": "7b6d89212a223b8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-359c2ebe3470f6bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/network/s-curve/s-curve.ts:8"}, "properties": {"repobilityId": "2fe3bcb31b19a0cb", "scanner": "scanner-primary", "fingerprint": "359c2ebe3470f6bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d87ad2e1af42d1c5", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/utils/ssim-codeshare.ts:116"}, "properties": {"repobilityId": "bca5a49486450aed", "scanner": "scanner-primary", "fingerprint": "d87ad2e1af42d1c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec1d889d362aa0ad", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/logic/src/utils/gantt-layout.ts:98"}, "properties": {"repobilityId": "365b2381287ba13e", "scanner": "scanner-primary", "fingerprint": "ec1d889d362aa0ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38223e35e522b732", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/logic/src/block-time/block-time.ts:3"}, "properties": {"repobilityId": "89b88aa32c7f8340", "scanner": "scanner-primary", "fingerprint": "38223e35e522b732", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d0af6c7aaba7c2a", "level": "note", "message": {"text": "Legacy-named symbol `logistic_regression_v1` in packages/logic/src/disruption-ml/trainer.ts:180"}, "properties": {"repobilityId": "77c859f43316d802", "scanner": "scanner-primary", "fingerprint": "2d0af6c7aaba7c2a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-13a690f4d66633dd", "level": "note", "message": {"text": "Legacy-named symbol `logistic_regression_v1` in packages/logic/src/disruption-ml/types.ts:27"}, "properties": {"repobilityId": "c823c3394481c02f", "scanner": "scanner-primary", "fingerprint": "13a690f4d66633dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a840073e86966253", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/logic/src/iata/mvt-parser.ts:236"}, "properties": {"repobilityId": "193ecf271aa56278", "scanner": "scanner-primary", "fingerprint": "a840073e86966253", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83db931904b13ef5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/logic/src/optimizers/network/predictor-client/otp-client.ts:35"}, "properties": {"repobilityId": "4275d4123a626e74", "scanner": "scanner-primary", "fingerprint": "83db931904b13ef5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f3f039a7489b191", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/logic/src/optimizers/network/engine/block-builder.ts:118"}, "properties": {"repobilityId": "9ae46a51bc002708", "scanner": "scanner-primary", "fingerprint": "8f3f039a7489b191", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63bc2dc27d52bfb7", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/logic/src/disruption/detectors.ts:353"}, "properties": {"repobilityId": "2fb6492595795a5e", "scanner": "scanner-primary", "fingerprint": "63bc2dc27d52bfb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec876e00caec4e35", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-ahm732.mjs:113"}, "properties": {"repobilityId": "58509fc568f24180", "scanner": "scanner-primary", "fingerprint": "ec876e00caec4e35", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-943979b8d15dbbf8", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/seed-performance.mjs:81"}, "properties": {"repobilityId": "9e73100147b1fec1", "scanner": "scanner-primary", "fingerprint": "943979b8d15dbbf8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5fe2fe4feb46858", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-performance.mjs:106"}, "properties": {"repobilityId": "2d9cc1d79cc55430", "scanner": "scanner-primary", "fingerprint": "b5fe2fe4feb46858", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6aa0364b88ae8931", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-regs.mjs:18"}, "properties": {"repobilityId": "08d351bf46c8e090", "scanner": "scanner-primary", "fingerprint": "6aa0364b88ae8931", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6b49e7d505ced592", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-block-hours-all.mjs:120"}, "properties": {"repobilityId": "6c611cb2c3da34eb", "scanner": "scanner-primary", "fingerprint": "6b49e7d505ced592", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c58599e9302a3bf5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-block-hours.mjs:103"}, "properties": {"repobilityId": "b297fd9212445bbd", "scanner": "scanner-primary", "fingerprint": "c58599e9302a3bf5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc78b4eb6fd26754", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/seed-delay-codes.mjs:10"}, "properties": {"repobilityId": "e448dc9bb8f59e47", "scanner": "scanner-primary", "fingerprint": "fc78b4eb6fd26754", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c95a39c47b1f7e99", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/scripts/fit-s-curve.ts:142"}, "properties": {"repobilityId": "c9ae5613c58cfa93", "scanner": "scanner-primary", "fingerprint": "c95a39c47b1f7e99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-080df787557dd9ff", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/dedupe-scheduled-flights.ts:3"}, "properties": {"repobilityId": "4e7b0ddc0fe70c54", "scanner": "scanner-primary", "fingerprint": "080df787557dd9ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05447651c48e9712", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/seed-runways.ts:54"}, "properties": {"repobilityId": "0976913995df95a1", "scanner": "scanner-primary", "fingerprint": "05447651c48e9712", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-685976ad7b9e0bd3", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/mark-sby-system.ts:1"}, "properties": {"repobilityId": "5c5b6d5761babc0c", "scanner": "scanner-primary", "fingerprint": "685976ad7b9e0bd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79efe3a0ac93af4a", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/index.ts:641"}, "properties": {"repobilityId": "e05f87cc3f7bc177", "scanner": "scanner-primary", "fingerprint": "79efe3a0ac93af4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e28b461facd16d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/probe-flights.ts:16"}, "properties": {"repobilityId": "b2be2c3199bba4f2", "scanner": "scanner-primary", "fingerprint": "5e28b461facd16d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa3385feef492edf", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/src/models/OperatorSchedulingConfig.ts:128"}, "properties": {"repobilityId": "8e9cd0e71a8f5fdf", "scanner": "scanner-primary", "fingerprint": "aa3385feef492edf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a424c601230914b7", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/models/CrewQualification.ts:23"}, "properties": {"repobilityId": "35629c3bd0ce2df4", "scanner": "scanner-primary", "fingerprint": "a424c601230914b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1f08f25bfef63fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/models/JourneyLog.ts:105"}, "properties": {"repobilityId": "7f697ff36e5ffe1a", "scanner": "scanner-primary", "fingerprint": "a1f08f25bfef63fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf6476fc06c2cfff", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/models/RecoveryRun.ts:31"}, "properties": {"repobilityId": "39c5fd0944109e3f", "scanner": "scanner-primary", "fingerprint": "bf6476fc06c2cfff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6bed1aef6e0f14e", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/models/AutoRosterRun.ts:58"}, "properties": {"repobilityId": "5df642091031234e", "scanner": "scanner-primary", "fingerprint": "c6bed1aef6e0f14e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e4d086a6d938de8", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/models/OperatorMessagingConfig.ts:67"}, "properties": {"repobilityId": "aa367a7ce1782ebd", "scanner": "scanner-primary", "fingerprint": "7e4d086a6d938de8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-657d8caab19cf950", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/middleware/authenticate.ts:179"}, "properties": {"repobilityId": "8f6356e0f73ded00", "scanner": "scanner-primary", "fingerprint": "657d8caab19cf950", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db104153229526a9", "level": "note", "message": {"text": "Legacy-named symbol `delLegacy` in server/src/scripts/seed-journey-logs.ts:276"}, "properties": {"repobilityId": "0c5e680845e42323", "scanner": "scanner-primary", "fingerprint": "db104153229526a9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-757804d2231ef66e", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/fuel-shared.ts:386"}, "properties": {"repobilityId": "5adc2f7041f14ac5", "scanner": "scanner-primary", "fingerprint": "757804d2231ef66e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-620b5e68df18db7d", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/crew-flight-bookings.ts:256"}, "properties": {"repobilityId": "d652389bbc470dcd", "scanner": "scanner-primary", "fingerprint": "620b5e68df18db7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70a5e178b9fcc6c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/auth.ts:177"}, "properties": {"repobilityId": "154daef81344e1f7", "scanner": "scanner-primary", "fingerprint": "70a5e178b9fcc6c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01bc3a7e73c08f24", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/ssim-import.ts:206"}, "properties": {"repobilityId": "de81af39a99517d9", "scanner": "scanner-primary", "fingerprint": "01bc3a7e73c08f24", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ee0dc998ba29c29", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/pairing-optimizer.ts:48"}, "properties": {"repobilityId": "b3e986de601123cd", "scanner": "scanner-primary", "fingerprint": "7ee0dc998ba29c29", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f18ba93dcba42d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/movement-messages.ts:95"}, "properties": {"repobilityId": "9f02ae07f2a9fc39", "scanner": "scanner-primary", "fingerprint": "0f18ba93dcba42d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41e1a08af5d420b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/reports-crew-out-of-base.ts:150"}, "properties": {"repobilityId": "c0a413ec07383929", "scanner": "scanner-primary", "fingerprint": "41e1a08af5d420b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fe195613ee8ed99", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/pairings.ts:463"}, "properties": {"repobilityId": "3457ec2cfab172d5", "scanner": "scanner-primary", "fingerprint": "3fe195613ee8ed99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18a25a689238d2c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/flights.ts:38"}, "properties": {"repobilityId": "c0deb56330dbf933", "scanner": "scanner-primary", "fingerprint": "18a25a689238d2c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-406e0a8ecc15052d", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/auto-roster.ts:450"}, "properties": {"repobilityId": "59e7d4203280cbc3", "scanner": "scanner-primary", "fingerprint": "406e0a8ecc15052d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5b33add608859c5", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/tail-optimizer.ts:100"}, "properties": {"repobilityId": "f16454c70eb83ae1", "scanner": "scanner-primary", "fingerprint": "b5b33add608859c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f25f4b6239d21af3", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-auth.ts:140"}, "properties": {"repobilityId": "c51f0e98297d9bb3", "scanner": "scanner-primary", "fingerprint": "f25f4b6239d21af3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68b1cbab5207216c", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-travel.ts:137"}, "properties": {"repobilityId": "ba645b9b322c59aa", "scanner": "scanner-primary", "fingerprint": "68b1cbab5207216c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83e7784decf1a9f3", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/routes/gantt.ts:1041"}, "properties": {"repobilityId": "d2983cfbedb0e7cd", "scanner": "scanner-primary", "fingerprint": "83e7784decf1a9f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85a1ab19823cf412", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/operator-ai-config.ts:263"}, "properties": {"repobilityId": "f73624d34ca1a45c", "scanner": "scanner-primary", "fingerprint": "85a1ab19823cf412", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-79408194d214562b", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/src/routes/fleet-utilization.ts:211"}, "properties": {"repobilityId": "e7e56e9fa628c237", "scanner": "scanner-primary", "fingerprint": "79408194d214562b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0aadb111cc61334c", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-sick-certificate.ts:141"}, "properties": {"repobilityId": "a6e37cf47e981f02", "scanner": "scanner-primary", "fingerprint": "0aadb111cc61334c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2705042fb2cdfe12", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/crew-schedule.ts:371"}, "properties": {"repobilityId": "45ec71ce23c9678c", "scanner": "scanner-primary", "fingerprint": "2705042fb2cdfe12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1c7e332608bb0c8", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/recovery-advisor.ts:80"}, "properties": {"repobilityId": "978cd31c90e5fcf0", "scanner": "scanner-primary", "fingerprint": "a1c7e332608bb0c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9e3e599bcb66da1", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/reports-operating-crew-info.ts:229"}, "properties": {"repobilityId": "2f848b2b23baa3cb", "scanner": "scanner-primary", "fingerprint": "c9e3e599bcb66da1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06b7d6762adfe027", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/skyai-feedback.ts:72"}, "properties": {"repobilityId": "55cc379247d78730", "scanner": "scanner-primary", "fingerprint": "06b7d6762adfe027", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4958b2c5d30b427", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/crew.ts:31"}, "properties": {"repobilityId": "9e344448acf0d93b", "scanner": "scanner-primary", "fingerprint": "c4958b2c5d30b427", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a52efbe35d9a43b", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/disruptions.ts:615"}, "properties": {"repobilityId": "9673e5b5d7048168", "scanner": "scanner-primary", "fingerprint": "8a52efbe35d9a43b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa2495e475c16a23", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-fatigue.ts:148"}, "properties": {"repobilityId": "72d7319e7c4c71b3", "scanner": "scanner-primary", "fingerprint": "fa2495e475c16a23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08337b6dc140d8a4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/routes/hotel-bookings.ts:419"}, "properties": {"repobilityId": "2fe976cc2d55b901", "scanner": "scanner-primary", "fingerprint": "08337b6dc140d8a4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f5ac94ff5de76dd", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/ssim.ts:12"}, "properties": {"repobilityId": "69d7162026cbdf75", "scanner": "scanner-primary", "fingerprint": "7f5ac94ff5de76dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68c2eb03bd297dcb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/routes/ssim.ts:418"}, "properties": {"repobilityId": "0023ce22f0a3fc89", "scanner": "scanner-primary", "fingerprint": "68c2eb03bd297dcb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e481f06b46cc18a6", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/routes/crew-documents.ts:25"}, "properties": {"repobilityId": "e55d9c2c3fbff332", "scanner": "scanner-primary", "fingerprint": "e481f06b46cc18a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce36ce1b1b19b83e", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/bidlines.ts:140"}, "properties": {"repobilityId": "7f2a26c4194c0a66", "scanner": "scanner-primary", "fingerprint": "ce36ce1b1b19b83e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bbccf75dfccb29c5", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/schedule-messages.ts:311"}, "properties": {"repobilityId": "3d28f57f5f6c9843", "scanner": "scanner-primary", "fingerprint": "bbccf75dfccb29c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4da827d8d069060", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/crew-app-day-off.ts:274"}, "properties": {"repobilityId": "9c1097e7cb19d925", "scanner": "scanner-primary", "fingerprint": "b4da827d8d069060", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-516d2615bd4bb980", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/src/routes/fuel-statistics.ts:373"}, "properties": {"repobilityId": "77b34ba8cc4a9d1b", "scanner": "scanner-primary", "fingerprint": "516d2615bd4bb980", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edb483e9fa32f977", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/manpower.ts:309"}, "properties": {"repobilityId": "306d9e276e5a3329", "scanner": "scanner-primary", "fingerprint": "edb483e9fa32f977", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41cbc7cce2fececc", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/skyai.ts:191"}, "properties": {"repobilityId": "725c4802b457bbd7", "scanner": "scanner-primary", "fingerprint": "41cbc7cce2fececc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-812030554ed03a31", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/reference.ts:2194"}, "properties": {"repobilityId": "662445be68c50522", "scanner": "scanner-primary", "fingerprint": "812030554ed03a31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3b4d2e0923fa9dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/ai-integration-network-write.ts:55"}, "properties": {"repobilityId": "d71502bc1758ebb1", "scanner": "scanner-primary", "fingerprint": "b3b4d2e0923fa9dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c081e72e407273a", "level": "none", "message": {"text": "Commented-code block (16 lines) in server/src/routes/crew-app-sync.ts:426"}, "properties": {"repobilityId": "21c23166b9da84f5", "scanner": "scanner-primary", "fingerprint": "3c081e72e407273a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43663513a96f3b47", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/ground-ops-flightview.ts:100"}, "properties": {"repobilityId": "2040a92985b58b0c", "scanner": "scanner-primary", "fingerprint": "43663513a96f3b47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3d31ae93015a3ac", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/crew-app-fit-unfit.ts:191"}, "properties": {"repobilityId": "00321d23ab5168cb", "scanner": "scanner-primary", "fingerprint": "d3d31ae93015a3ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-383484c9b07dbc69", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/training-sessions.ts:601"}, "properties": {"repobilityId": "26b0aa83556840ef", "scanner": "scanner-primary", "fingerprint": "383484c9b07dbc69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe7bcdb29e9cc7d2", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/routes/recovery.ts:506"}, "properties": {"repobilityId": "1aaa8a370a403503", "scanner": "scanner-primary", "fingerprint": "fe7bcdb29e9cc7d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ad374de0f8c0748", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/routes/slots.ts:563"}, "properties": {"repobilityId": "9d4b0eb1f5d05a68", "scanner": "scanner-primary", "fingerprint": "2ad374de0f8c0748", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6b8ec94ff3133f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/sync-crew-expiries.ts:39"}, "properties": {"repobilityId": "b6e062452cea3384", "scanner": "scanner-primary", "fingerprint": "b6b8ec94ff3133f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7318c94f6a2aec8", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/operator-day-window.ts:49"}, "properties": {"repobilityId": "1001eaa7a6ecf1e3", "scanner": "scanner-primary", "fingerprint": "d7318c94f6a2aec8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adc202653fe1ba21", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/services/evaluate-crew-roster.ts:150"}, "properties": {"repobilityId": "277dd4040f856d5f", "scanner": "scanner-primary", "fingerprint": "adc202653fe1ba21", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a874a89c244a631b", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/crew-schedule-audit.ts:290"}, "properties": {"repobilityId": "aa4b273549e428e3", "scanner": "scanner-primary", "fingerprint": "a874a89c244a631b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1e17a722786fb0ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/pairing-candidate-generator.ts:25"}, "properties": {"repobilityId": "ec29025f99a68004", "scanner": "scanner-primary", "fingerprint": "1e17a722786fb0ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a4e6dee1bdb02ba", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/services/roster-publication.ts:167"}, "properties": {"repobilityId": "d53dbadf6207bc41", "scanner": "scanner-primary", "fingerprint": "6a4e6dee1bdb02ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d023b165c3004e71", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/auto-roster-rebalance.ts:91"}, "properties": {"repobilityId": "278ae503aef2d6b3", "scanner": "scanner-primary", "fingerprint": "d023b165c3004e71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c279a5a681ee37ae", "level": "none", "message": {"text": "Commented-code block (13 lines) in server/src/services/auto-roster-orchestrator.ts:334"}, "properties": {"repobilityId": "dfa5ad5ce2b30ad8", "scanner": "scanner-primary", "fingerprint": "c279a5a681ee37ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b11970c570391c52", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/fdtl-rule-set.ts:187"}, "properties": {"repobilityId": "393faa327bb3cd90", "scanner": "scanner-primary", "fingerprint": "b11970c570391c52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa1b5d339292dc18", "level": "none", "message": {"text": "Commented-code block (8 lines) in server/src/services/auto-roster-temp-block.ts:6"}, "properties": {"repobilityId": "e4439a14b3e15861", "scanner": "scanner-primary", "fingerprint": "fa1b5d339292dc18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c3c28abb2d06760", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/pairing-scenario-statistics.ts:221"}, "properties": {"repobilityId": "ca629fd09be03a98", "scanner": "scanner-primary", "fingerprint": "6c3c28abb2d06760", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d9e616869590b9e", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/services/bidline-orchestrator.ts:170"}, "properties": {"repobilityId": "971ac572a6490c33", "scanner": "scanner-primary", "fingerprint": "4d9e616869590b9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-26e034b847a5c93f", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/services/evaluate-pairing-legality.ts:86"}, "properties": {"repobilityId": "ace2cc12f71d1a0f", "scanner": "scanner-primary", "fingerprint": "26e034b847a5c93f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28ee5f590ef51e85", "level": "note", "message": {"text": "Legacy-named symbol `advisory_v1` in server/src/services/fatigue-scoring.ts:129"}, "properties": {"repobilityId": "e42d7e3cefda852b", "scanner": "scanner-primary", "fingerprint": "28ee5f590ef51e85", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-66e9543cdd467477", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/services/fatigue-scoring.ts:264"}, "properties": {"repobilityId": "0a40d309ecc88d45", "scanner": "scanner-primary", "fingerprint": "66e9543cdd467477", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9476518aa36451d", "level": "none", "message": {"text": "Commented-code block (10 lines) in server/src/services/auto-roster-sby-windows.ts:3"}, "properties": {"repobilityId": "50e553e8504c1cb5", "scanner": "scanner-primary", "fingerprint": "a9476518aa36451d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74fa8c234a1eb5a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/bidline-snapshot.ts:216"}, "properties": {"repobilityId": "71ae8f2455771d7b", "scanner": "scanner-primary", "fingerprint": "74fa8c234a1eb5a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae877ce8e7a515a8", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/fdtl-solver-limits.ts:53"}, "properties": {"repobilityId": "cca73c6cf0c8917d", "scanner": "scanner-primary", "fingerprint": "ae877ce8e7a515a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4f250745335542d", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/src/services/auto-roster-pass2.ts:72"}, "properties": {"repobilityId": "e42d9fa413617d77", "scanner": "scanner-primary", "fingerprint": "d4f250745335542d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b52e5d6011662d84", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/colgen/highs-set-partition.ts:19"}, "properties": {"repobilityId": "a168c77afa3a0c87", "scanner": "scanner-primary", "fingerprint": "b52e5d6011662d84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-206b497f613dad10", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/services/recovery/cancellation-pricing.ts:108"}, "properties": {"repobilityId": "3b40aac74356effc", "scanner": "scanner-primary", "fingerprint": "206b497f613dad10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f345d497ce060a1", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/recovery/types.ts:40"}, "properties": {"repobilityId": "17bf569e93e86f9a", "scanner": "scanner-primary", "fingerprint": "4f345d497ce060a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d5b8a5beadaa61d", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/services/crew-apis/assemble.ts:181"}, "properties": {"repobilityId": "3618f474e56868e4", "scanner": "scanner-primary", "fingerprint": "0d5b8a5beadaa61d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6e39416f062fbe9", "level": "note", "message": {"text": "Legacy-named symbol `migrateLegacy` in server/src/services/crew-apis/config-loader.ts:61"}, "properties": {"repobilityId": "079357bdf5015c6b", "scanner": "scanner-primary", "fingerprint": "f6e39416f062fbe9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-db3f63d1a4961ae9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 server/src/services/skyai/model-catalog.ts:83"}, "properties": {"repobilityId": "cc339bc6336c101c", "scanner": "scanner-primary", "fingerprint": "db3f63d1a4961ae9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3beb681d18c6543", "level": "none", "message": {"text": "Commented-code block (7 lines) in server/src/services/skyai/tools.ts:217"}, "properties": {"repobilityId": "2b61d55887274421", "scanner": "scanner-primary", "fingerprint": "f3beb681d18c6543", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3498fbb89a377d86", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/skyai/engine.ts:393"}, "properties": {"repobilityId": "36a8e1c7f97f6f2f", "scanner": "scanner-primary", "fingerprint": "3498fbb89a377d86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7041259e69a96a31", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/services/skyai/report-insights/interpreter.ts:100"}, "properties": {"repobilityId": "ef9841702ce53e59", "scanner": "scanner-primary", "fingerprint": "7041259e69a96a31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b9d5be6c86f7188b", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/src/services/skyai/flight-ops-tools/flight/fatigue-snapshot.ts:161"}, "properties": {"repobilityId": "7f8156dc87fa0ccf", "scanner": "scanner-primary", "fingerprint": "b9d5be6c86f7188b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42c1c8e84cf2eae9", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/skyai/flight-ops-tools/maintenance/aog-aircraft.ts:139"}, "properties": {"repobilityId": "0e4d72908e6b9c74", "scanner": "scanner-primary", "fingerprint": "42c1c8e84cf2eae9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84a8c26288e35662", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/skyai/recovery-advisor-tools/run.ts:71"}, "properties": {"repobilityId": "f6d279a304a91d2b", "scanner": "scanner-primary", "fingerprint": "84a8c26288e35662", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d90ee6edecce69e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/skyai/recovery-advisor-tools/propose.ts:212"}, "properties": {"repobilityId": "b15387e4d1583f8c", "scanner": "scanner-primary", "fingerprint": "d90ee6edecce69e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f362de30605373c8", "level": "none", "message": {"text": "Commented-code block (9 lines) in server/src/services/open-flight-bidding/award.ts:206"}, "properties": {"repobilityId": "b64da023e6332cba", "scanner": "scanner-primary", "fingerprint": "f362de30605373c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c119d6845e5b3a8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/services/crew-ops-skyai/constraint-check.ts:1093"}, "properties": {"repobilityId": "be71e36fa6c56a1b", "scanner": "scanner-primary", "fingerprint": "c119d6845e5b3a8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-add3adce7c2182ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/db/connection.ts:36"}, "properties": {"repobilityId": "9230f36f4e6d0d0d", "scanner": "scanner-primary", "fingerprint": "add3adce7c2182ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3bd8444ce415c49", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/src/jobs/task-registry.ts:148"}, "properties": {"repobilityId": "dbabe0eb1fdf6547", "scanner": "scanner-primary", "fingerprint": "a3bd8444ce415c49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab6df1c704a4c1c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/src/jobs/tasks/daily-crew-activity-log.ts:131"}, "properties": {"repobilityId": "76e808c56977b576", "scanner": "scanner-primary", "fingerprint": "ab6df1c704a4c1c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad0f36793a1bd5d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/auto-roster-solver/eval_fdtl_scaling.py:274"}, "properties": {"repobilityId": "b114bca4f3461dfd", "scanner": "scanner-primary", "fingerprint": "ad0f36793a1bd5d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75eedb5598b75370", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/auto-roster-solver/app/models.py:30"}, "properties": {"repobilityId": "a94f693bd95e5d20", "scanner": "scanner-primary", "fingerprint": "75eedb5598b75370", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29950625227864a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/auto-roster-solver/app/solver/cp_sat_engine.py:128"}, "properties": {"repobilityId": "ec232b761d0872f2", "scanner": "scanner-primary", "fingerprint": "29950625227864a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b537e162dfb3f07", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in services/network-constraint-evaluator/app/solver/constraints.py:365"}, "properties": {"repobilityId": "e185660b2fce7aa5", "scanner": "scanner-primary", "fingerprint": "7b537e162dfb3f07", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c1952255fc4b7c58", "level": "none", "message": {"text": "Commented-code block (7 lines) in services/pairing-optimizer/app/solver/cp_sat_engine.py:470"}, "properties": {"repobilityId": "d1a1da156723ea7f", "scanner": "scanner-primary", "fingerprint": "c1952255fc4b7c58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7920a717aa52b0c", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/demand-forecaster/app/models.py:16"}, "properties": {"repobilityId": "760d36ac48e2a115", "scanner": "scanner-primary", "fingerprint": "a7920a717aa52b0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ca1c629bbc0b15b", "level": "none", "message": {"text": "Commented-code block (5 lines) in services/demand-forecaster/app/allocator/mip.py:171"}, "properties": {"repobilityId": "34e685e6777b74bb", "scanner": "scanner-primary", "fingerprint": "0ca1c629bbc0b15b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b749e808d47a0a82", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/demand-forecaster/app/allocator/scurve.py:119"}, "properties": {"repobilityId": "6eb22cc2211595f1", "scanner": "scanner-primary", "fingerprint": "b749e808d47a0a82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9605dfafce61a4a", "level": "note", "message": {"text": "91 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "50ea28f4aae045c4", "scanner": "scanner-primary", "fingerprint": "d9605dfafce61a4a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "e05b667a45b4d8ed", "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": "61081289fe35c0c9", "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": "3dcf64cc601dde56", "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": "c0cda69dfdab98d0", "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": "7569a6425d6e45e2", "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": "b8e62330ec306ddc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-07e08b40a28affe5", "level": "error", "message": {"text": "Dangling fetch: GET /crew-app/auth/pin-policy${qs} (apps/crew/src/lib/api-client.ts:637)"}, "properties": {"repobilityId": "45b3680ce14fc334", "scanner": "scanner-primary", "fingerprint": "07e08b40a28affe5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-80a2545864991d6c", "level": "error", "message": {"text": "Dangling fetch: GET /crew-app/auth/styling?operatorId=${encodeURIComponent(operatorId)} (apps/crew/src/lib/api-client.ts:641)"}, "properties": {"repobilityId": "b7b3262af0552898", "scanner": "scanner-primary", "fingerprint": "80a2545864991d6c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b21053f5b1f6c04f", "level": "error", "message": {"text": "Dangling fetch: PATCH /crew-app/me/passports/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:704)"}, "properties": {"repobilityId": "1a8e1952dbc8e4e1", "scanner": "scanner-primary", "fingerprint": "b21053f5b1f6c04f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-36b2c9bf412f3652", "level": "error", "message": {"text": "Dangling fetch: DELETE /crew-app/me/passports/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:710)"}, "properties": {"repobilityId": "1fba5a9e6ce36581", "scanner": "scanner-primary", "fingerprint": "36b2c9bf412f3652", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6bc2437a3af1eead", "level": "error", "message": {"text": "Dangling fetch: POST /crew-app/me/fit-unfit/${encodeURIComponent(id)}/rescind (apps/crew/src/lib/api-client.ts:851)"}, "properties": {"repobilityId": "36ae18f1281ed228", "scanner": "scanner-primary", "fingerprint": "6bc2437a3af1eead", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1c3159c9376f9342", "level": "error", "message": {"text": "Dangling fetch: POST /crew-app/me/fatigue/${encodeURIComponent(reportId)}/osr (apps/crew/src/lib/api-client.ts:874)"}, "properties": {"repobilityId": "d0e05cc49139943a", "scanner": "scanner-primary", "fingerprint": "1c3159c9376f9342", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-76ff52b3b6c66821", "level": "error", "message": {"text": "Dangling fetch: GET /crew-app/me/day-off-requests${qs} (apps/crew/src/lib/api-client.ts:909)"}, "properties": {"repobilityId": "6f2f3304aa3c22e6", "scanner": "scanner-primary", "fingerprint": "76ff52b3b6c66821", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-be9e672d7db6185e", "level": "error", "message": {"text": "Dangling fetch: DELETE /crew-app/me/day-off-requests/${encodeURIComponent(id)} (apps/crew/src/lib/api-client.ts:919)"}, "properties": {"repobilityId": "e296b0acf1f7e838", "scanner": "scanner-primary", "fingerprint": "be9e672d7db6185e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-01a86d568ec00e7c", "level": "error", "message": {"text": "Dangling fetch: POST /crew-app/auth/logout (apps/crew/src/lib/api-client.ts:943)"}, "properties": {"repobilityId": "d68a826b81a5b7bd", "scanner": "scanner-primary", "fingerprint": "01a86d568ec00e7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-21aaa461cdb3b7e1", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/frequency-analysis-export.ts:119)"}, "properties": {"repobilityId": "cad9984e698044c1", "scanner": "scanner-primary", "fingerprint": "21aaa461cdb3b7e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20d6e7fd18b967ed", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/irops-report-export.ts:116)"}, "properties": {"repobilityId": "0c85b5df29359c1d", "scanner": "scanner-primary", "fingerprint": "20d6e7fd18b967ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd97832b3cb14bc5", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-summary-export.ts:82)"}, "properties": {"repobilityId": "508088ddf1ee7c27", "scanner": "scanner-primary", "fingerprint": "dd97832b3cb14bc5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bbb4c7e2741a891", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-legality-check-export.ts:66)"}, "properties": {"repobilityId": "4c4ee4d800848118", "scanner": "scanner-primary", "fingerprint": "9bbb4c7e2741a891", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b2e140823021fc7", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/published-crew-export.ts:188)"}, "properties": {"repobilityId": "b9f9215fc4a152b7", "scanner": "scanner-primary", "fingerprint": "9b2e140823021fc7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9244df0d02793921", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/schedule-audit-export.ts:27)"}, "properties": {"repobilityId": "4f881e18ce866395", "scanner": "scanner-primary", "fingerprint": "9244df0d02793921", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ddeb63023886c74a", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/airport-activity-export.ts:81)"}, "properties": {"repobilityId": "d39d7eec0761d43e", "scanner": "scanner-primary", "fingerprint": "ddeb63023886c74a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a91e857e1369dd82", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/route-summary-export.ts:102)"}, "properties": {"repobilityId": "cdbaf88a48033da3", "scanner": "scanner-primary", "fingerprint": "a91e857e1369dd82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27595a1ff6789f06", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/crew-expiry-report-export.ts:102)"}, "properties": {"repobilityId": "a616ba741cef53e0", "scanner": "scanner-primary", "fingerprint": "27595a1ff6789f06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28dec526581a9d2f", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/pic-discretion-export.ts:111)"}, "properties": {"repobilityId": "7fe68d8d0f465697", "scanner": "scanner-primary", "fingerprint": "28dec526581a9d2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-515cbe2d2b887561", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fids-export.ts:79)"}, "properties": {"repobilityId": "c394948e5ac56d85", "scanner": "scanner-primary", "fingerprint": "515cbe2d2b887561", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b33b74dd98568fe3", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/freight-statistics-export.ts:172)"}, "properties": {"repobilityId": "98069c22cfff2105", "scanner": "scanner-primary", "fingerprint": "b33b74dd98568fe3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-42b636337c3ec185", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/crew-absence-report-export.ts:114)"}, "properties": {"repobilityId": "6b2b8fb8074f009b", "scanner": "scanner-primary", "fingerprint": "42b636337c3ec185", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e607a992e1a7dde", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fuel-report-export.ts:210)"}, "properties": {"repobilityId": "4b1c44746a590086", "scanner": "scanner-primary", "fingerprint": "6e607a992e1a7dde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4854b6cfe212f49", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/emissions-report-export.ts:206)"}, "properties": {"repobilityId": "02a5bac5224dff22", "scanner": "scanner-primary", "fingerprint": "f4854b6cfe212f49", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b55b03f581269c1", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/block-time-report-export.ts:136)"}, "properties": {"repobilityId": "c1f8a0705f6efdd6", "scanner": "scanner-primary", "fingerprint": "1b55b03f581269c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e82bb12f26043f8", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/daily-schedule-export.ts:208)"}, "properties": {"repobilityId": "e1e4743e0450c70c", "scanner": "scanner-primary", "fingerprint": "3e82bb12f26043f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4dc9e0fa4e6f54f5", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/otp-export.ts:175)"}, "properties": {"repobilityId": "b2c2793e22b0b5c1", "scanner": "scanner-primary", "fingerprint": "4dc9e0fa4e6f54f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22ba5858a59c9078", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/daily-ops-export.ts:98)"}, "properties": {"repobilityId": "6a2687bba0395afd", "scanner": "scanner-primary", "fingerprint": "22ba5858a59c9078", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c3143621f59f374", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/hotac-audit-export.ts:63)"}, "properties": {"repobilityId": "2db5a9d807142b31", "scanner": "scanner-primary", "fingerprint": "2c3143621f59f374", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2fb144a0d4b61e87", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/delay-analysis-export.ts:169)"}, "properties": {"repobilityId": "265d04778e2474cf", "scanner": "scanner-primary", "fingerprint": "2fb144a0d4b61e87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9dbd15838d500e8c", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/fleet-utilization-export.ts:133)"}, "properties": {"repobilityId": "53ef0586dd2602e4", "scanner": "scanner-primary", "fingerprint": "9dbd15838d500e8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36005dae1de83249", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/passenger-statistics-export.ts:189)"}, "properties": {"repobilityId": "8fc5ad93f844e566", "scanner": "scanner-primary", "fingerprint": "36005dae1de83249", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b8b44cab77504e6", "level": "error", "message": {"text": "Dangling fetch: GET /skyhub-logo.png (apps/web/src/lib/public-timetable/export.ts:122)"}, "properties": {"repobilityId": "fa0cf1f638ed89a8", "scanner": "scanner-primary", "fingerprint": "2b8b44cab77504e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a923cacd6ef59b81", "level": "error", "message": {"text": "Dangling fetch: POST /auth/login (packages/api/src/client.ts:3091)"}, "properties": {"repobilityId": "dbbda31dbefd0c91", "scanner": "scanner-primary", "fingerprint": "a923cacd6ef59b81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-326fb4c1abf2b3db", "level": "error", "message": {"text": "Dangling fetch: POST /auth/mfa-verify (packages/api/src/client.ts:3098)"}, "properties": {"repobilityId": "71d693e14dd02935", "scanner": "scanner-primary", "fingerprint": "326fb4c1abf2b3db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2db3ba4d2b2fd7b3", "level": "error", "message": {"text": "Dangling fetch: POST /auth/refresh (packages/api/src/client.ts:3104)"}, "properties": {"repobilityId": "ae892e8a8fb24ccd", "scanner": "scanner-primary", "fingerprint": "2db3ba4d2b2fd7b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a168df5d1b3b847c", "level": "error", "message": {"text": "Dangling fetch: POST /users/me/mfa/verify (packages/api/src/client.ts:3112)"}, "properties": {"repobilityId": "0a1b9672e7eac07b", "scanner": "scanner-primary", "fingerprint": "a168df5d1b3b847c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a31f59db05746d66", "level": "error", "message": {"text": "Dangling fetch: POST /users/me/mfa/disable (packages/api/src/client.ts:3117)"}, "properties": {"repobilityId": "eb68855ae2630448", "scanner": "scanner-primary", "fingerprint": "a31f59db05746d66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f760ac52db2d664d", "level": "error", "message": {"text": "Dangling fetch: POST /auth/set-password (packages/api/src/client.ts:3127)"}, "properties": {"repobilityId": "f2a00e1c3344faca", "scanner": "scanner-primary", "fingerprint": "f760ac52db2d664d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3b78bb28ec9b96ec", "level": "error", "message": {"text": "Dangling fetch: POST /auth/forgot-password (packages/api/src/client.ts:3133)"}, "properties": {"repobilityId": "bbca40df34cdfa13", "scanner": "scanner-primary", "fingerprint": "3b78bb28ec9b96ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5387ca94fbc423a4", "level": "error", "message": {"text": "Dangling fetch: POST /auth/reset-password (packages/api/src/client.ts:3139)"}, "properties": {"repobilityId": "4835ae892574ee80", "scanner": "scanner-primary", "fingerprint": "5387ca94fbc423a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-af448042860a95e6", "level": "error", "message": {"text": "Dangling fetch: POST /tail-optimizer/${encodeURIComponent(runId)}/apply (packages/api/src/client.ts:4197)"}, "properties": {"repobilityId": "3ddd7378bdf34a15", "scanner": "scanner-primary", "fingerprint": "af448042860a95e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1eb319516c32e463", "level": "error", "message": {"text": "Dangling fetch: POST /tail-optimizer/${encodeURIComponent(runId)}/discard (packages/api/src/client.ts:4199)"}, "properties": {"repobilityId": "3440562e9cc0be01", "scanner": "scanner-primary", "fingerprint": "1eb319516c32e463", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-274eb08b0c9f9134", "level": "error", "message": {"text": "Dangling fetch: PUT /reports/emissions-plans/${encodeURIComponent(id)} (packages/api/src/client.ts:4217)"}, "properties": {"repobilityId": "687cb8384edb1702", "scanner": "scanner-primary", "fingerprint": "274eb08b0c9f9134", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-59f9e64d4d904843", "level": "error", "message": {"text": "Dangling fetch: GET /reports/daily-ops-remarks/${encodeURIComponent(date)} (packages/api/src/client.ts:4254)"}, "properties": {"repobilityId": "efe36555ba8ba557", "scanner": "scanner-primary", "fingerprint": "59f9e64d4d904843", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4614b37c9a2da4e5", "level": "error", "message": {"text": "Dangling fetch: PUT /reports/daily-ops-remarks/${encodeURIComponent(date)} (packages/api/src/client.ts:4256)"}, "properties": {"repobilityId": "ecb3611ca17ce45a", "scanner": "scanner-primary", "fingerprint": "4614b37c9a2da4e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-244a04bdeedc7434", "level": "error", "message": {"text": "Dangling fetch: POST /network/scenarios/${encodeURIComponent(scenarioId)}/apply (packages/api/src/client.ts:4411)"}, "properties": {"repobilityId": "053b992a384a795f", "scanner": "scanner-primary", "fingerprint": "244a04bdeedc7434", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-428c00915dc6c7ae", "level": "error", "message": {"text": "Dangling fetch: POST /network/scenarios/audit/${encodeURIComponent(auditId)}/rollback (packages/api/src/client.ts:4430)"}, "properties": {"repobilityId": "7cee4d9a503974cb", "scanner": "scanner-primary", "fingerprint": "428c00915dc6c7ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d6e97f727f4156a2", "level": "error", "message": {"text": "Dangling fetch: PATCH /charter/contracts/${id} (packages/api/src/client.ts:5877)"}, "properties": {"repobilityId": "78ca8c3de57bb882", "scanner": "scanner-primary", "fingerprint": "d6e97f727f4156a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-184b34768791b90a", "level": "error", "message": {"text": "Dangling fetch: PATCH /charter/contracts/${id}/status (packages/api/src/client.ts:5883)"}, "properties": {"repobilityId": "0f94eea3cc47974c", "scanner": "scanner-primary", "fingerprint": "184b34768791b90a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-770237e04db9a964", "level": "error", "message": {"text": "Dangling fetch: DELETE /charter/contracts/${id} (packages/api/src/client.ts:5889)"}, "properties": {"repobilityId": "b38a4410c437cef4", "scanner": "scanner-primary", "fingerprint": "770237e04db9a964", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8ce223271985da0a", "level": "error", "message": {"text": "Dangling fetch: DELETE /charter/flights/${id} (packages/api/src/client.ts:5902)"}, "properties": {"repobilityId": "4d8871dc166eb9b9", "scanner": "scanner-primary", "fingerprint": "8ce223271985da0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e579e9b7a90131c2", "level": "error", "message": {"text": "Dangling fetch: GET /weather/alerts${qs} (packages/api/src/client.ts:7131)"}, "properties": {"repobilityId": "b4e8e35908639268", "scanner": "scanner-primary", "fingerprint": "e579e9b7a90131c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-13d72f9ca93834b2", "level": "error", "message": {"text": "Dangling fetch: GET /crew/${encodeURIComponent(crewId)}/document-folders${qs} (packages/api/src/client.ts:7315)"}, "properties": {"repobilityId": "2c24d6c2ba98a71a", "scanner": "scanner-primary", "fingerprint": "13d72f9ca93834b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-55d94a0172428146", "level": "error", "message": {"text": "Dangling fetch: DELETE /pairings/${encodeURIComponent(id)}${qs} (packages/api/src/client.ts:7525)"}, "properties": {"repobilityId": "7b012108c51fe345", "scanner": "scanner-primary", "fingerprint": "55d94a0172428146", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-04b814ca859f79c6", "level": "error", "message": {"text": "Dangling fetch: GET /crew-schedule/publications${suffix} (packages/api/src/client.ts:8350)"}, "properties": {"repobilityId": "311181bcb5f9ec6e", "scanner": "scanner-primary", "fingerprint": "04b814ca859f79c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ed2975120415e440", "level": "error", "message": {"text": "Dangling fetch: PATCH /crew-schedule/temp-bases/${encodeURIComponent(id)}${qs} (packages/api/src/client.ts:8390)"}, "properties": {"repobilityId": "7be135167ddf157c", "scanner": "scanner-primary", "fingerprint": "ed2975120415e440", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d575ad7eaff4b9e8", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/turnarounds/${encodeURIComponent(id)} (packages/api/src/client.ts:8446)"}, "properties": {"repobilityId": "98705d9da5f2bc7e", "scanner": "scanner-primary", "fingerprint": "d575ad7eaff4b9e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-742ba99b23a69832", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/ground-ops/turnarounds (packages/api/src/client.ts:8448)"}, "properties": {"repobilityId": "5629efa94bebd822", "scanner": "scanner-primary", "fingerprint": "742ba99b23a69832", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e753517e9ca1a90c", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/ground-ops/turnarounds/backfill (packages/api/src/client.ts:8453)"}, "properties": {"repobilityId": "65dec60c8e5894f2", "scanner": "scanner-primary", "fingerprint": "e753517e9ca1a90c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d751f23e8e9032bf", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/ground-ops/turnarounds/${encodeURIComponent(id)}/services/${encodeURIComponent(serviceType)} (packages/api/src/client.ts:8466)"}, "properties": {"repobilityId": "deca342a2149cedd", "scanner": "scanner-primary", "fingerprint": "d751f23e8e9032bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-04d3e200d20a7271", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/handlers?${params.toString()} (packages/api/src/client.ts:8495)"}, "properties": {"repobilityId": "d5b1aba7e447af45", "scanner": "scanner-primary", "fingerprint": "04d3e200d20a7271", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-85f6efef5d7bbd80", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/deviations/${encodeURIComponent(id)} (packages/api/src/client.ts:8522)"}, "properties": {"repobilityId": "6c694019bd9c93fd", "scanner": "scanner-primary", "fingerprint": "85f6efef5d7bbd80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-138d16f16fe74ca7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/ground-ops/deviations/${encodeURIComponent(id)} (packages/api/src/client.ts:8527)"}, "properties": {"repobilityId": "c39ceab4322d74de", "scanner": "scanner-primary", "fingerprint": "138d16f16fe74ca7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-05cff17c5d8c77ef", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/config/templates (packages/api/src/client.ts:8533)"}, "properties": {"repobilityId": "5133602a19b59550", "scanner": "scanner-primary", "fingerprint": "05cff17c5d8c77ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d50c795f1f8445a7", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/ground-ops/config/templates (packages/api/src/client.ts:8535)"}, "properties": {"repobilityId": "d0e4dad78ad1d64b", "scanner": "scanner-primary", "fingerprint": "d50c795f1f8445a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d382bb01b7ecb989", "level": "error", "message": {"text": "Dangling fetch: PUT /api/v1/ground-ops/config/templates/${encodeURIComponent(id)} (packages/api/src/client.ts:8540)"}, "properties": {"repobilityId": "d4764e02516a20c7", "scanner": "scanner-primary", "fingerprint": "d382bb01b7ecb989", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-41050b287fcbce9b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/ground-ops/config/templates/${encodeURIComponent(id)} (packages/api/src/client.ts:8545)"}, "properties": {"repobilityId": "0ec77357060a1128", "scanner": "scanner-primary", "fingerprint": "41050b287fcbce9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-518038ac87426bbc", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/config/services (packages/api/src/client.ts:8548)"}, "properties": {"repobilityId": "e09c759f1085337c", "scanner": "scanner-primary", "fingerprint": "518038ac87426bbc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-07d943d6356cdfa2", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/ground-ops/config/services (packages/api/src/client.ts:8550)"}, "properties": {"repobilityId": "8f2c9065305f9cc1", "scanner": "scanner-primary", "fingerprint": "07d943d6356cdfa2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b3c01af9d8421128", "level": "error", "message": {"text": "Dangling fetch: PUT /api/v1/ground-ops/config/services/${encodeURIComponent(id)} (packages/api/src/client.ts:8555)"}, "properties": {"repobilityId": "5d0b54c48e37c4df", "scanner": "scanner-primary", "fingerprint": "b3c01af9d8421128", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0c382276e37c08c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/config/sla-contracts (packages/api/src/client.ts:8559)"}, "properties": {"repobilityId": "64e1b200eee58f2d", "scanner": "scanner-primary", "fingerprint": "0c382276e37c08c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5090d45079126ba4", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/ground-ops/config/sla-contracts (packages/api/src/client.ts:8561)"}, "properties": {"repobilityId": "345a609cc6aa8a30", "scanner": "scanner-primary", "fingerprint": "5090d45079126ba4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f9cebd7d615b822d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/v1/ground-ops/config/sla-contracts/${encodeURIComponent(id)} (packages/api/src/client.ts:8566)"}, "properties": {"repobilityId": "a24d8bb034865ab4", "scanner": "scanner-primary", "fingerprint": "f9cebd7d615b822d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1d148fd4b55de4e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/config/alert-rules (packages/api/src/client.ts:8570)"}, "properties": {"repobilityId": "e3a45a1017db950a", "scanner": "scanner-primary", "fingerprint": "1d148fd4b55de4e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e7eafa434696aaf7", "level": "error", "message": {"text": "Dangling fetch: PUT /api/v1/ground-ops/config/alert-rules (packages/api/src/client.ts:8572)"}, "properties": {"repobilityId": "4d48c75eb8e81bf8", "scanner": "scanner-primary", "fingerprint": "e7eafa434696aaf7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0bf2eae5d86b19d8", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/handling-agents${tail} (packages/api/src/client.ts:8587)"}, "properties": {"repobilityId": "4c8cf42d51b5b80b", "scanner": "scanner-primary", "fingerprint": "0bf2eae5d86b19d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c29e40ecded895d4", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/ground-ops/handling-agents (packages/api/src/client.ts:8590)"}, "properties": {"repobilityId": "de553bb6ed9b6a68", "scanner": "scanner-primary", "fingerprint": "c29e40ecded895d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-827f016b34e14233", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/ground-ops/handling-agents/${encodeURIComponent(id)} (packages/api/src/client.ts:8595)"}, "properties": {"repobilityId": "920419f37ee1131f", "scanner": "scanner-primary", "fingerprint": "827f016b34e14233", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-487fd3e1c31f3855", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/ground-ops/handling-agents/${encodeURIComponent(id)} (packages/api/src/client.ts:8600)"}, "properties": {"repobilityId": "609a9553611d2ef7", "scanner": "scanner-primary", "fingerprint": "487fd3e1c31f3855", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5aa9b900601f3da4", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/flightview?${params.toString()} (packages/api/src/client.ts:8613)"}, "properties": {"repobilityId": "b87a76fb848c08be", "scanner": "scanner-primary", "fingerprint": "5aa9b900601f3da4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-579ee8d5a2068d77", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/ground-ops/flight-documents (packages/api/src/client.ts:8622)"}, "properties": {"repobilityId": "6e485019f88f3709", "scanner": "scanner-primary", "fingerprint": "579ee8d5a2068d77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5ff0ad00a0c18acf", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/ground-ops/flight-documents/${encodeURIComponent(id)} (packages/api/src/client.ts:8627)"}, "properties": {"repobilityId": "f7548f722b3a69e2", "scanner": "scanner-primary", "fingerprint": "5ff0ad00a0c18acf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2171264b17a005ee", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8642)"}, "properties": {"repobilityId": "5e8dc539f7fd5fe8", "scanner": "scanner-primary", "fingerprint": "2171264b17a005ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b6db9cb96c9f0dc9", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/ground-ops/vehicle-dispatch (packages/api/src/client.ts:8644)"}, "properties": {"repobilityId": "1fc5cd9190ec8aa6", "scanner": "scanner-primary", "fingerprint": "b6db9cb96c9f0dc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d106d15763375425", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8649)"}, "properties": {"repobilityId": "7a1523b759d721fa", "scanner": "scanner-primary", "fingerprint": "d106d15763375425", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-83d3fc08befc09eb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/v1/ground-ops/vehicle-dispatch/${encodeURIComponent(id)} (packages/api/src/client.ts:8654)"}, "properties": {"repobilityId": "848c2fa672e4fdfb", "scanner": "scanner-primary", "fingerprint": "83d3fc08befc09eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f8dfda0a3c0f9bcb", "level": "error", "message": {"text": "Dangling fetch: GET /v1/duty-swap/policy${qs} (packages/api/src/client.ts:8689)"}, "properties": {"repobilityId": "fd03360643bf73c6", "scanner": "scanner-primary", "fingerprint": "f8dfda0a3c0f9bcb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-53dd9255402804d7", "level": "error", "message": {"text": "Dangling fetch: PUT /v1/duty-swap/policy${qs} (packages/api/src/client.ts:8693)"}, "properties": {"repobilityId": "706a15e55040f43f", "scanner": "scanner-primary", "fingerprint": "53dd9255402804d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-69218712baf7d84e", "level": "error", "message": {"text": "Dangling fetch: GET /v1/open-flights${qs} (packages/api/src/client.ts:8768)"}, "properties": {"repobilityId": "cb61c1471f1818e5", "scanner": "scanner-primary", "fingerprint": "69218712baf7d84e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-55489471c1afb94a", "level": "error", "message": {"text": "Dangling fetch: PUT /operator-ai-config/prompts/${encodeURIComponent(moduleKey)} (packages/api/src/client.ts:8844)"}, "properties": {"repobilityId": "ed7bc5035ac840de", "scanner": "scanner-primary", "fingerprint": "55489471c1afb94a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-343f69eb8c7211d9", "level": "error", "message": {"text": "Dangling fetch: POST /operator-ai-config/prompts/${encodeURIComponent(moduleKey)}/rollback (packages/api/src/client.ts:8849)"}, "properties": {"repobilityId": "3b4e6805ecb6bed0", "scanner": "scanner-primary", "fingerprint": "343f69eb8c7211d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3c953ddf236dc5c8", "level": "error", "message": {"text": "Dangling fetch: GET /operator-ai-config/models?providerId=${encodeURIComponent(providerId)} (packages/api/src/client.ts:8859)"}, "properties": {"repobilityId": "a1fd684fdf09d08c", "scanner": "scanner-primary", "fingerprint": "3c953ddf236dc5c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-806876f9f69316d1", "level": "error", "message": {"text": "Dangling fetch: DELETE /operator-bulletins/${encodeURIComponent(id)} (packages/api/src/client.ts:9229)"}, "properties": {"repobilityId": "f3df645b07187321", "scanner": "scanner-primary", "fingerprint": "806876f9f69316d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1326c1ce21c8422f", "level": "error", "message": {"text": "Dangling fetch: GET /api/pairing-optimizer/history${qs} (packages/api/src/client.ts:9284)"}, "properties": {"repobilityId": "218f31ca13e8eb3a", "scanner": "scanner-primary", "fingerprint": "1326c1ce21c8422f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bc0da511478c2245", "level": "error", "message": {"text": "Dangling fetch: POST /api/solver/stream (packages/logic/src/utils/solver-stream.ts:61)"}, "properties": {"repobilityId": "804e21bfea9373a9", "scanner": "scanner-primary", "fingerprint": "bc0da511478c2245", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95a05becb250d32b", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/embeddings (server/scripts/verify-openai-key.ts:92)"}, "properties": {"repobilityId": "1d8f3140fca56383", "scanner": "scanner-primary", "fingerprint": "95a05becb250d32b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-282f1a939bbe2a2c", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:3002/flights?from=${from}&to=${to} (server/src/probe-flights.ts:16)"}, "properties": {"repobilityId": "caf338dab8e88457", "scanner": "scanner-primary", "fingerprint": "282f1a939bbe2a2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b84179b939cb841", "level": "error", "message": {"text": "Dangling fetch: GET https://airportdb.io/api/v1/airport/${code}?apiToken=free (server/src/routes/reference.ts:289)"}, "properties": {"repobilityId": "486553d6837c0658", "scanner": "scanner-primary", "fingerprint": "1b84179b939cb841", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81ffd341d80f8742", "level": "error", "message": {"text": "Dangling fetch: GET https://raw.githubusercontent.com/mwgg/Airports/master/airports.json (server/src/routes/reference.ts:302)"}, "properties": {"repobilityId": "ce6e51b287b09f92", "scanner": "scanner-primary", "fingerprint": "81ffd341d80f8742", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-023ff3f06fe71d0d", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (server/src/services/email.ts:35)"}, "properties": {"repobilityId": "4960ca16f5ad6d29", "scanner": "scanner-primary", "fingerprint": "023ff3f06fe71d0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-879cbdd113978768", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/embeddings (server/src/services/operator-ai-scope/embedding-provider.ts:66)"}, "properties": {"repobilityId": "584c988ebb4d87c2", "scanner": "scanner-primary", "fingerprint": "879cbdd113978768", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43b7576a848f9972", "level": "error", "message": {"text": "Dangling fetch: GET https://api.anthropic.com/v1/models?limit=100 (server/src/services/skyai/model-catalog.ts:83)"}, "properties": {"repobilityId": "b915d8861f6f3ec3", "scanner": "scanner-primary", "fingerprint": "43b7576a848f9972", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b506b62a4f7dde66", "level": "error", "message": {"text": "Dangling fetch: GET https://generativelanguage.googleapis.com/v1beta/models?key=${encodeURIComponent(apiKey)}&pageSize=200 (server/src/services/skyai/model-catalog.ts:127)"}, "properties": {"repobilityId": "a4f3267e36273427", "scanner": "scanner-primary", "fingerprint": "b506b62a4f7dde66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1c2ba692cc1ae5f", "level": "note", "message": {"text": "Unused endpoint: POST /solve"}, "properties": {"repobilityId": "593aacfb262fd6b9", "scanner": "scanner-primary", "fingerprint": "b1c2ba692cc1ae5f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7da0d707fb94e57a", "level": "note", "message": {"text": "Unused endpoint: POST /dry-run-window"}, "properties": {"repobilityId": "6a9b2513e3560c97", "scanner": "scanner-primary", "fingerprint": "7da0d707fb94e57a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95f235fd6ce6304d", "level": "note", "message": {"text": "Unused endpoint: POST /evaluate"}, "properties": {"repobilityId": "215ff0cf698e7985", "scanner": "scanner-primary", "fingerprint": "95f235fd6ce6304d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25d3af48cd83c9e6", "level": "note", "message": {"text": "Unused endpoint: POST /predict"}, "properties": {"repobilityId": "b2f521184f3db2e9", "scanner": "scanner-primary", "fingerprint": "25d3af48cd83c9e6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a19e53db5cb839d", "level": "note", "message": {"text": "Unused endpoint: POST /predict/batch"}, "properties": {"repobilityId": "4a19f807902d9487", "scanner": "scanner-primary", "fingerprint": "2a19e53db5cb839d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4b23721bf19f6dc2", "level": "note", "message": {"text": "Unused endpoint: POST /train"}, "properties": {"repobilityId": "c38557ef39ad46ad", "scanner": "scanner-primary", "fingerprint": "4b23721bf19f6dc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ea2e113ff250f5f", "level": "note", "message": {"text": "Unused endpoint: POST /forecast"}, "properties": {"repobilityId": "bbcef674a63dabf1", "scanner": "scanner-primary", "fingerprint": "5ea2e113ff250f5f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a828904a20c32d47", "level": "note", "message": {"text": "Unused endpoint: POST /forecast/batch"}, "properties": {"repobilityId": "9f53cd2d7c5516c6", "scanner": "scanner-primary", "fingerprint": "a828904a20c32d47", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f20aa7735411352b", "level": "note", "message": {"text": "Unused endpoint: POST /allocate"}, "properties": {"repobilityId": "761607af58b8f625", "scanner": "scanner-primary", "fingerprint": "f20aa7735411352b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-684f0e83ba7e1558", "level": "note", "message": {"text": "Unused endpoint: GET "}, "properties": {"repobilityId": "62c6714f6353aebf", "scanner": "scanner-primary", "fingerprint": "684f0e83ba7e1558", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8dcb6c5adad44dff", "level": "note", "message": {"text": "Unused endpoint: GET /weather/alerts"}, "properties": {"repobilityId": "272ecd6034926fd2", "scanner": "scanner-primary", "fingerprint": "8dcb6c5adad44dff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed338e9e2aa2b477", "level": "note", "message": {"text": "Unused endpoint: GET /crew-flight-bookings"}, "properties": {"repobilityId": "e28448274c20dec4", "scanner": "scanner-primary", "fingerprint": "ed338e9e2aa2b477", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68908712b5a00db7", "level": "note", "message": {"text": "Unused endpoint: POST /crew-flight-bookings/:id/attachments"}, "properties": {"repobilityId": "5a619ea036c16a84", "scanner": "scanner-primary", "fingerprint": "68908712b5a00db7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-125a1c875e635444", "level": "note", "message": {"text": "Unused endpoint: GET /handlers"}, "properties": {"repobilityId": "7227f72e58881485", "scanner": "scanner-primary", "fingerprint": "125a1c875e635444", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-35c3410b0d881147", "level": "note", "message": {"text": "Unused endpoint: GET /handlers/:id/scorecard"}, "properties": {"repobilityId": "0f1f6b681025e556", "scanner": "scanner-primary", "fingerprint": "35c3410b0d881147", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e49cd8d8cfc2e37", "level": "note", "message": {"text": "Unused endpoint: GET /deviations"}, "properties": {"repobilityId": "93ffb74f279b2693", "scanner": "scanner-primary", "fingerprint": "3e49cd8d8cfc2e37", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-457a7e5f1c4ccefc", "level": "note", "message": {"text": "Unused endpoint: GET /deviations/:id"}, "properties": {"repobilityId": "ba80b03679214a40", "scanner": "scanner-primary", "fingerprint": "457a7e5f1c4ccefc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ecc8d295163182a6", "level": "note", "message": {"text": "Unused endpoint: PATCH /deviations/:id"}, "properties": {"repobilityId": "22473d83b8962449", "scanner": "scanner-primary", "fingerprint": "ecc8d295163182a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f6daed6458619db", "level": "note", "message": {"text": "Unused endpoint: GET /operator-pairing-config"}, "properties": {"repobilityId": "d7aa65234be8f797", "scanner": "scanner-primary", "fingerprint": "1f6daed6458619db", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a7575151186e1f7", "level": "note", "message": {"text": "Unused endpoint: POST /ssim/import/flights-batch"}, "properties": {"repobilityId": "098b80d8f7916241", "scanner": "scanner-primary", "fingerprint": "7a7575151186e1f7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e7fa6425aa0d295d", "level": "note", "message": {"text": "Unused endpoint: GET /rotations"}, "properties": {"repobilityId": "eaf94fed34fdb55d", "scanner": "scanner-primary", "fingerprint": "e7fa6425aa0d295d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42a584b596c6fdac", "level": "note", "message": {"text": "Unused endpoint: POST /rotations/auto-generate"}, "properties": {"repobilityId": "9faba1392ba4d540", "scanner": "scanner-primary", "fingerprint": "42a584b596c6fdac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f61ad8a90bb936f", "level": "note", "message": {"text": "Unused endpoint: PATCH /rotations/:id/reorder"}, "properties": {"repobilityId": "a4bbeee74aebcc13", "scanner": "scanner-primary", "fingerprint": "2f61ad8a90bb936f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84e05486ac15a03c", "level": "note", "message": {"text": "Unused endpoint: DELETE /rotations/:id"}, "properties": {"repobilityId": "97e257b5e9200290", "scanner": "scanner-primary", "fingerprint": "84e05486ac15a03c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-024d7aeb80764db4", "level": "note", "message": {"text": "Unused endpoint: POST /reports/aircraft-allocation-crew"}, "properties": {"repobilityId": "e8a1b52fecc32769", "scanner": "scanner-primary", "fingerprint": "024d7aeb80764db4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fc065c56d0e0831b", "level": "note", "message": {"text": "Unused endpoint: GET /config/templates"}, "properties": {"repobilityId": "878119d87e6d5049", "scanner": "scanner-primary", "fingerprint": "fc065c56d0e0831b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1ab5325f58f05b2", "level": "note", "message": {"text": "Unused endpoint: POST /config/templates"}, "properties": {"repobilityId": "532d8667942ed760", "scanner": "scanner-primary", "fingerprint": "d1ab5325f58f05b2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-466f84f0eedaf29f", "level": "note", "message": {"text": "Unused endpoint: PUT /config/templates/:id"}, "properties": {"repobilityId": "736ec7ef03d1e942", "scanner": "scanner-primary", "fingerprint": "466f84f0eedaf29f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9316018df076d1e", "level": "note", "message": {"text": "Unused endpoint: DELETE /config/templates/:id"}, "properties": {"repobilityId": "30894e80d5c084ce", "scanner": "scanner-primary", "fingerprint": "a9316018df076d1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2971ebfca887d256", "level": "note", "message": {"text": "Unused endpoint: GET /config/services"}, "properties": {"repobilityId": "263f368c8ce86400", "scanner": "scanner-primary", "fingerprint": "2971ebfca887d256", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-76a2c67f4ee54fac", "level": "note", "message": {"text": "Unused endpoint: POST /config/services"}, "properties": {"repobilityId": "d8c769c52834518a", "scanner": "scanner-primary", "fingerprint": "76a2c67f4ee54fac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9eac259c3270058b", "level": "note", "message": {"text": "Unused endpoint: PUT /config/services/:id"}, "properties": {"repobilityId": "84f9d1b5c3809d58", "scanner": "scanner-primary", "fingerprint": "9eac259c3270058b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-699ace05cec6757a", "level": "note", "message": {"text": "Unused endpoint: GET /config/sla-contracts"}, "properties": {"repobilityId": "c3a437cb3f27885b", "scanner": "scanner-primary", "fingerprint": "699ace05cec6757a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50845be3d7aa4d96", "level": "note", "message": {"text": "Unused endpoint: POST /config/sla-contracts"}, "properties": {"repobilityId": "222eae6103b4d1b6", "scanner": "scanner-primary", "fingerprint": "50845be3d7aa4d96", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-94013595c713e950", "level": "note", "message": {"text": "Unused endpoint: PUT /config/sla-contracts/:id"}, "properties": {"repobilityId": "9b3672eef2133c41", "scanner": "scanner-primary", "fingerprint": "94013595c713e950", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a1866c6b38083d2", "level": "note", "message": {"text": "Unused endpoint: GET /config/alert-rules"}, "properties": {"repobilityId": "cf9f09067883de93", "scanner": "scanner-primary", "fingerprint": "4a1866c6b38083d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-145c9da35ae80fe0", "level": "note", "message": {"text": "Unused endpoint: PUT /config/alert-rules"}, "properties": {"repobilityId": "108f37d325a86225", "scanner": "scanner-primary", "fingerprint": "145c9da35ae80fe0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-207607e9e0b87c70", "level": "note", "message": {"text": "Unused endpoint: GET /operator-check-in-config"}, "properties": {"repobilityId": "74e5516cdfdb0b49", "scanner": "scanner-primary", "fingerprint": "207607e9e0b87c70", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38f2d07f4666efc9", "level": "note", "message": {"text": "Unused endpoint: GET /training-courses"}, "properties": {"repobilityId": "13ad5b92adec9e56", "scanner": "scanner-primary", "fingerprint": "38f2d07f4666efc9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-893c500c9caa4c4c", "level": "note", "message": {"text": "Unused endpoint: GET /api/pairing-optimizer/runs/:runId/stream"}, "properties": {"repobilityId": "05ac13d453598a24", "scanner": "scanner-primary", "fingerprint": "893c500c9caa4c4c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-080e670737565b5b", "level": "note", "message": {"text": "Unused endpoint: GET /api/pairing-optimizer/history"}, "properties": {"repobilityId": "ebfd67682e5b1206", "scanner": "scanner-primary", "fingerprint": "080e670737565b5b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-20538628458a0ae5", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/pairing-optimizer/runs/:runId/pairings"}, "properties": {"repobilityId": "d855dfe09e235772", "scanner": "scanner-primary", "fingerprint": "20538628458a0ae5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-be3f7e4247417b47", "level": "note", "message": {"text": "Unused endpoint: GET /api/pairing-optimizer/scenarios/compare"}, "properties": {"repobilityId": "ef2a2709a2a291cd", "scanner": "scanner-primary", "fingerprint": "be3f7e4247417b47", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12031c263a9214d9", "level": "note", "message": {"text": "Unused endpoint: GET /api/pairing-optimizer/queue-state"}, "properties": {"repobilityId": "71ea767ba8bdf433", "scanner": "scanner-primary", "fingerprint": "12031c263a9214d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c398fe3e7fa00eb0", "level": "note", "message": {"text": "Unused endpoint: GET /instructor-qual-codes"}, "properties": {"repobilityId": "75041a9fe7be7768", "scanner": "scanner-primary", "fingerprint": "c398fe3e7fa00eb0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ff4f2c70b15ce16b", "level": "note", "message": {"text": "Unused endpoint: POST /movement-messages"}, "properties": {"repobilityId": "e4314f9beee949ea", "scanner": "scanner-primary", "fingerprint": "ff4f2c70b15ce16b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d01aa7245731c1c", "level": "note", "message": {"text": "Unused endpoint: POST /movement-messages/inbound"}, "properties": {"repobilityId": "e42d5e5f54926e15", "scanner": "scanner-primary", "fingerprint": "2d01aa7245731c1c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cd15c339b19fc2f", "level": "note", "message": {"text": "Unused endpoint: GET /reports/irops-report"}, "properties": {"repobilityId": "a82c2cf132d1f146", "scanner": "scanner-primary", "fingerprint": "1cd15c339b19fc2f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b3c93c69564023eb", "level": "note", "message": {"text": "Unused endpoint: GET /network/scenarios/audit"}, "properties": {"repobilityId": "1457bd1fe357d476", "scanner": "scanner-primary", "fingerprint": "b3c93c69564023eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d812b6fa4223e423", "level": "note", "message": {"text": "Unused endpoint: POST /network-ai/constraints/evaluate"}, "properties": {"repobilityId": "c2e28b07e942be02", "scanner": "scanner-primary", "fingerprint": "d812b6fa4223e423", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}