{"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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e6c26d88477af41", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/import-asso-finances.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-asso-finances.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-cae9523c853d8641", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/bootstrap.ts:157", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/bootstrap.ts:157"}, "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-2e8636096a6ddbf7", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/generate-api-token.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/generate-api-token.ts:56"}, "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-d1c5acacc5478c38", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/import-airtable-rembs.ts:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-airtable-rembs.ts:131"}, "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-7e0a74833ff2c2c7", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/flag-prelevements-auto.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/flag-prelevements-auto.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-4e0fb103905275a5", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/import-todos.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-todos.ts:126"}, "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-68c31703205e2b92", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/demote-unlinked-termine.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/demote-unlinked-termine.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-d9e68f4999fced00", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/import-outils-state.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-outils-state.ts:97"}, "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-d157e25037de36df", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/import-airtable-caisse.ts:115", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-airtable-caisse.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-271378898dadb874", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/import-personnes.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-personnes.ts:121"}, "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-99f1ea4fc24a95f3", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/link-rembs-to-ecritures.ts:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/link-rembs-to-ecritures.ts:153"}, "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-ede036f0dbbce872", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/set-user-role.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/set-user-role.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-f8ccf4a7774a194d", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/reattach-justificatifs.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/reattach-justificatifs.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-d3d6ba64fdec8e29", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/audit-csv-totals.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/audit-csv-totals.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a4dc7038ce49ca0", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/import-comptes.ts:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-comptes.ts:153"}, "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-82510c222d768ec5", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/audit-csv-matching.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/audit-csv-matching.ts:95"}, "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-7ffc665c5498fcaa", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/migrate-blobs-to-private.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/migrate-blobs-to-private.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-5e96b0fb210ea1b3", "name": "Stray `console.log` in TS/JS \u2014 web/scripts/migrate-justifs-to-blob.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/migrate-justifs-to-blob.ts:48"}, "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-2ae80cf826940784", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 web/src/app/about/page.tsx:460", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 web/src/app/about/page.tsx:460"}, "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-795f31b243db74a7", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/page.tsx:343", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/page.tsx:343"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75e1cadd7b6ef5fd", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/camps/page.tsx:129", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/camps/page.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-79806fcd5edd80bb", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/camps/[id]/page.tsx:302", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/camps/[id]/page.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-02d6239aa80ae920", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/depots/page.tsx:185", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/depots/page.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-9a1764564d3a78e0", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/abandons/[id]/page.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/abandons/[id]/page.tsx:212"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff364a81cffe43c3", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/admin/invitations/page.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/admin/invitations/page.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-dcadad9ed73f5a12", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/comptaweb/rapprochement/page.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/comptaweb/rapprochement/page.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-ebee9c2ef9561e79", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/remboursements/[id]/page.tsx:248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/remboursements/[id]/page.tsx:248"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e25bb23107af6a89", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/inbox/inbox-board.client.tsx:457", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/inbox/inbox-board.client.tsx:457"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-631b0e48c3ed4bb9", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/inbox/page.tsx:447", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/inbox/page.tsx:447"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2aa47fef71287d14", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/import/page.tsx:239", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/import/page.tsx:239"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df92a31d46aa61a9", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/sync/sync-status-button.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/sync/sync-status-button.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-f2af9b3b51265d54", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/justificatifs-card.tsx:128", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/justificatifs-card.tsx:128"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57b017ed48e5646d", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/ecriture-match-banner.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/ecriture-match-banner.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f95eda7e2b92625", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/ecritures-table.tsx:281", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/ecritures-table.tsx:281"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-135bd84b3eb36d9c", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/arbitrage-banner.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/arbitrage-banner.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-de0db5dc17ba4e41", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/layout/sidebar.tsx:44", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/layout/sidebar.tsx:44"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bed0a635116816da", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/shared/justif-capture.tsx:256", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/shared/justif-capture.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-52ca1e2f957807e3", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ui/file-multi-uploader.tsx:223", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ui/file-multi-uploader.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-cb3e958fdc9aa117", "name": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ui/file-drop.tsx:47", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ui/file-drop.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-4a748f68f4169547", "name": "TODO/FIXME marker in shipping code \u2014 web/src/lib/comptaweb/auth.ts:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 web/src/lib/comptaweb/auth.ts:3"}, "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-7559649019954caf", "name": "TODO/FIXME marker in shipping code \u2014 web/src/lib/services/ecritures-create.ts:171", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 web/src/lib/services/ecritures-create.ts:171"}, "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-19930a829b3ae0bf", "name": "Stray `console.log` in TS/JS \u2014 web/src/lib/actions/caisse.ts:141", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/src/lib/actions/caisse.ts:141"}, "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-be7e66599be4b4e5", "name": "Insecure pattern 'dangerous_innerhtml' in web/src/app/about/page.tsx:460", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in web/src/app/about/page.tsx:460"}, "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-20bf10da4e46b01c", "name": "Insecure pattern 'exec_used' in web/src/lib/db.ts:69", "shortDescription": {"text": "Insecure pattern 'exec_used' in web/src/lib/db.ts:69"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "pnpm/action-setup@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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "62 tests / 359 src (ratio 0.17)."}, "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 125 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 52 placeholder/mock markers across 25 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bea357a6497a2d5d", "name": "Agent authority lacks a verifier contract: CLAUDE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: 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-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.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-a0f039d72f021d08", "name": "Commented-code block (6 lines) in web/scripts/import-airtable-rembs.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in web/scripts/import-airtable-rembs.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6b0e8a62616f8ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/import-airtable-rembs.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/import-airtable-rembs.ts: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-75c4bb2f5a96e534", "name": "Commented-code block (5 lines) in web/scripts/demote-unlinked-termine.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in web/scripts/demote-unlinked-termine.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-84d3e81069d55a86", "name": "Commented-code block (9 lines) in web/scripts/import-airtable-caisse.ts:7", "shortDescription": {"text": "Commented-code block (9 lines) in web/scripts/import-airtable-caisse.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c708e5f15d7ba373", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/import-airtable-caisse.ts:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/import-airtable-caisse.ts:71"}, "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-157d7040b520fb1e", "name": "Commented-code block (8 lines) in web/scripts/link-rembs-to-ecritures.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in web/scripts/link-rembs-to-ecritures.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-237f758d60dd2f49", "name": "Commented-code block (7 lines) in web/scripts/migrate-blobs-to-private.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in web/scripts/migrate-blobs-to-private.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-953e27a169494d93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/migrate-blobs-to-private.ts:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/migrate-blobs-to-private.ts:68"}, "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-2c400caf2012a687", "name": "Commented-code block (7 lines) in web/scripts/migrate-justifs-to-blob.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in web/scripts/migrate-justifs-to-blob.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-f0b0e7b94fdd53d8", "name": "Commented-code block (6 lines) in web/src/app/layout.tsx:10", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/app/layout.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da43182ba787915b", "name": "Commented-code block (6 lines) in web/src/app/manifest.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/app/manifest.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-de412762b901b51b", "name": "Commented-code block (5 lines) in web/src/app/api/sync/run/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/api/sync/run/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2fe9cbeda84b3f5f", "name": "Commented-code block (6 lines) in web/src/app/api/ecritures/route.ts:23", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/app/api/ecritures/route.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-302c23e12ffbb68a", "name": "Commented-code block (6 lines) in web/src/app/api/ecritures/route-default-filter.test.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/app/api/ecritures/route-default-filter.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-c6f98892484a5b95", "name": "Commented-code block (9 lines) in web/src/app/api/ecritures/status-filter.ts:6", "shortDescription": {"text": "Commented-code block (9 lines) in web/src/app/api/ecritures/status-filter.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-b7b7c2f084e9bb41", "name": "Commented-code block (5 lines) in web/src/app/api/justificatifs/[...path]/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/api/justificatifs/[...path]/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-feeb4f34a50571f1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/app/api/justificatifs/[...path]/route.ts:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/app/api/justificatifs/[...path]/route.ts:36"}, "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-844e46e21cfeba5c", "name": "Commented-code block (5 lines) in web/src/app/oauth/register/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/oauth/register/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1875062ee4cf1430", "name": "Commented-code block (6 lines) in web/src/app/(app)/error.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/app/(app)/error.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-34ea3baa0fb0a26c", "name": "Commented-code block (5 lines) in web/src/app/(app)/ecritures/[id]/page.tsx:252", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/(app)/ecritures/[id]/page.tsx:252"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a49d633cd73b094", "name": "Commented-code block (5 lines) in web/src/app/(app)/comptaweb/rapprochement/page.tsx:25", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/(app)/comptaweb/rapprochement/page.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-3a47143d28ee0df5", "name": "Commented-code block (5 lines) in web/src/app/(app)/moi/page.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/(app)/moi/page.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-84c4ffcf37aba867", "name": "Commented-code block (5 lines) in web/src/app/(app)/inbox/inbox-board.client.tsx:21", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/app/(app)/inbox/inbox-board.client.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-46e5390f4305a62b", "name": "Commented-code block (6 lines) in web/src/components/caisse/caisse-mouvement-wizard.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/components/caisse/caisse-mouvement-wizard.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-da2d01e084212aa5", "name": "Commented-code block (7 lines) in web/src/components/caisse/__tests__/caisse-mouvement-wizard.test.tsx:5", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/components/caisse/__tests__/caisse-mouvement-wizard.test.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-eda65c84ecf42085", "name": "Commented-code block (6 lines) in web/src/components/caisse/__tests__/format-caisse-clipboard.test.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/components/caisse/__tests__/format-caisse-clipboard.test.ts: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-140c0b60da702737", "name": "Commented-code block (5 lines) in web/src/components/sync/use-sync-status.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/sync/use-sync-status.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdbc01c86f0c889c", "name": "Commented-code block (5 lines) in web/src/components/sync/sync-status-button.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/sync/sync-status-button.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-30c9139fe62326ca", "name": "Commented-code block (8 lines) in web/src/components/sync/__tests__/sync-status-button.test.tsx:6", "shortDescription": {"text": "Commented-code block (8 lines) in web/src/components/sync/__tests__/sync-status-button.test.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-6c22e8670a7a3264", "name": "Commented-code block (5 lines) in web/src/components/ecritures/ecritures-section.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/ecritures/ecritures-section.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-86db46388b221c3f", "name": "Commented-code block (10 lines) in web/src/components/ecritures/cw-assist-actions.tsx:11", "shortDescription": {"text": "Commented-code block (10 lines) in web/src/components/ecritures/cw-assist-actions.tsx: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-32841fd8ace44773", "name": "Commented-code block (5 lines) in web/src/components/ecritures/nouvelle-ecriture-wizard.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/ecritures/nouvelle-ecriture-wizard.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-32640ee08ba996fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/components/ecritures/nouvelle-ecriture-wizard.tsx:14", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/components/ecritures/nouvelle-ecriture-wizard.tsx:14"}, "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-efe93db5cd4df710", "name": "Commented-code block (7 lines) in web/src/components/ecritures/ecritures-table.tsx:47", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/components/ecritures/ecritures-table.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f733dc6a60c9965", "name": "Commented-code block (7 lines) in web/src/components/ecritures/ecriture-filters.tsx:10", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/components/ecritures/ecriture-filters.tsx:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6891258fbe6133cd", "name": "Commented-code block (6 lines) in web/src/components/ecritures/__tests__/cw-assist-actions.test.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/components/ecritures/__tests__/cw-assist-actions.test.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-91c0eb4d797e110f", "name": "Commented-code block (7 lines) in web/src/components/admin/cleanup-orphans-button.tsx:13", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/components/admin/cleanup-orphans-button.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4cf298522f9a09e", "name": "Commented-code block (5 lines) in web/src/components/layout/mobile-nav.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/layout/mobile-nav.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-7095c54d4f9126f5", "name": "Commented-code block (5 lines) in web/src/components/pwa/install-button.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/pwa/install-button.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-ac8a3b7afdb739bc", "name": "Commented-code block (5 lines) in web/src/components/shared/justif-capture.tsx:29", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/shared/justif-capture.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd04a3480189f239", "name": "Commented-code block (7 lines) in web/src/components/shared/status-badge.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/components/shared/status-badge.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-e4bed0caf598152f", "name": "Commented-code block (9 lines) in web/src/components/shared/amount.tsx:11", "shortDescription": {"text": "Commented-code block (9 lines) in web/src/components/shared/amount.tsx: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-1b88e9b962133648", "name": "Commented-code block (5 lines) in web/src/components/rembs/ecriture-link-card.tsx:19", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/components/rembs/ecriture-link-card.tsx: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-3b78b4f3c2aaf475", "name": "Commented-code block (5 lines) in web/src/lib/format.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/format.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-6296c63dbaac3082", "name": "Commented-code block (7 lines) in web/src/lib/branches-sgdf.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/lib/branches-sgdf.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-f6d540ed0e0d465b", "name": "Commented-code block (6 lines) in web/src/lib/storage.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/storage.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-d60fe1e8552cc258", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/storage.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/storage.ts:29"}, "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-04749d8ee5df4c06", "name": "Commented-code block (5 lines) in web/src/lib/selectable.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/selectable.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-20d4aea236324bd7", "name": "Commented-code block (5 lines) in web/src/lib/justif-allowed.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/justif-allowed.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-b75173195bbfc9c8", "name": "Commented-code block (5 lines) in web/src/lib/sync-readiness.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/sync-readiness.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-bed52a3e2ae93561", "name": "Commented-code block (8 lines) in web/src/lib/types.ts:14", "shortDescription": {"text": "Commented-code block (8 lines) in web/src/lib/types.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec95573b9004a082", "name": "Commented-code block (5 lines) in web/src/lib/scanify.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/scanify.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-bf332611eedc57f8", "name": "Commented-code block (7 lines) in web/src/lib/ids.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/lib/ids.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-9b63fd46e332f34e", "name": "Commented-code block (6 lines) in web/src/lib/api/route-helpers.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/api/route-helpers.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-1446539ecd5b33c8", "name": "Commented-code block (5 lines) in web/src/lib/utils/form.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/utils/form.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-f9053caf42aedf31", "name": "Commented-code block (5 lines) in web/src/lib/oauth/pkce.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/oauth/pkce.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-6cb6f6b17f2e1c9f", "name": "Commented-code block (5 lines) in web/src/lib/oauth/tokens.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/oauth/tokens.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-9f34c44fb09d8e7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/ecritures-write.ts:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/ecritures-write.ts: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-cfda9144f7a3b55f", "name": "Commented-code block (30 lines) in web/src/lib/comptaweb/ecritures-list-scrape.ts:11", "shortDescription": {"text": "Commented-code block (30 lines) in web/src/lib/comptaweb/ecritures-list-scrape.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-0f65a85886f6d850", "name": "Commented-code block (5 lines) in web/src/lib/comptaweb/session-store.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/comptaweb/session-store.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-a3d6ea989086ce9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/http.ts:12", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/http.ts:12"}, "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-a15a8bf95c77d47d", "name": "Commented-code block (5 lines) in web/src/lib/comptaweb/env-loader.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/comptaweb/env-loader.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-d0e345c78da24b07", "name": "Commented-code block (5 lines) in web/src/lib/comptaweb/ecriture-detail-scrape.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/comptaweb/ecriture-detail-scrape.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-1f4e7d562896e6dd", "name": "Commented-code block (8 lines) in web/src/lib/comptaweb/auth-automated.ts:6", "shortDescription": {"text": "Commented-code block (8 lines) in web/src/lib/comptaweb/auth-automated.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-cd117dfdaaecc377", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/auth-automated.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/auth-automated.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-8fcfbf5b9004d957", "name": "Commented-code block (8 lines) in web/src/lib/comptaweb/__tests__/caisse-scrape.test.ts:4", "shortDescription": {"text": "Commented-code block (8 lines) in web/src/lib/comptaweb/__tests__/caisse-scrape.test.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-c0ea4503ccfdc840", "name": "Commented-code block (9 lines) in web/src/lib/comptaweb/__tests__/ecritures-list-scrape.test.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in web/src/lib/comptaweb/__tests__/ecritures-list-scrape.test.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-a5b6ed76326f6941", "name": "Commented-code block (10 lines) in web/src/lib/auth/schema.ts:8", "shortDescription": {"text": "Commented-code block (10 lines) in web/src/lib/auth/schema.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-8ff882014b9746a1", "name": "Commented-code block (9 lines) in web/src/lib/auth/adapter.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in web/src/lib/auth/adapter.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-9e7df6044ae132af", "name": "Commented-code block (5 lines) in web/src/lib/auth/rate-limit.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/auth/rate-limit.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-f169ba3b3fa5cb46", "name": "Commented-code block (8 lines) in web/src/lib/auth/auth.ts:9", "shortDescription": {"text": "Commented-code block (8 lines) in web/src/lib/auth/auth.ts: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-c9b5396e4871591a", "name": "Commented-code block (5 lines) in web/src/lib/auth/access.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/auth/access.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-e78747347e5d8db7", "name": "Commented-code block (5 lines) in web/src/lib/auth/api-tokens.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/auth/api-tokens.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-2a394b371ba84156", "name": "Commented-code block (6 lines) in web/src/lib/db/business-schema.ts:61", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/db/business-schema.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c426462fea72616d", "name": "Commented-code block (8 lines) in web/src/lib/db/business-schema-status-migration.test.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in web/src/lib/db/business-schema-status-migration.test.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-c70348b8211d9bea", "name": "Commented-code block (8 lines) in web/src/lib/mcp/register-all.ts:29", "shortDescription": {"text": "Commented-code block (8 lines) in web/src/lib/mcp/register-all.ts:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6645a41f8c65ba1c", "name": "Commented-code block (6 lines) in web/src/lib/mcp/tools/ecritures.ts:25", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/mcp/tools/ecritures.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-f582d02e7522d648", "name": "Commented-code block (6 lines) in web/src/lib/mcp/tools/comptaweb-client.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/mcp/tools/comptaweb-client.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-920546be782153ec", "name": "Commented-code block (5 lines) in web/src/lib/queries/cloture.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/queries/cloture.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-5c2e86408f1b21db", "name": "Commented-code block (5 lines) in web/src/lib/queries/sync-arbitrage.ts:30", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/queries/sync-arbitrage.ts: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-744d07fd7573cafb", "name": "Commented-code block (6 lines) in web/src/lib/services/cleanup-transferts.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/services/cleanup-transferts.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-123361e1387cc746", "name": "Commented-code block (5 lines) in web/src/lib/services/justificatifs.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/justificatifs.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0c0c808b0b508a6", "name": "Commented-code block (7 lines) in web/src/lib/services/ecritures.ts:24", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/lib/services/ecritures.ts: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-b6aaddeceefc9fed", "name": "Commented-code block (6 lines) in web/src/lib/services/caisse-omnibox.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/services/caisse-omnibox.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f6c255c1921dc06", "name": "Commented-code block (6 lines) in web/src/lib/services/depots.ts:281", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/services/depots.ts:281"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b81b2848049cf2e1", "name": "Commented-code block (15 lines) in web/src/lib/services/ecritures-create.ts:7", "shortDescription": {"text": "Commented-code block (15 lines) in web/src/lib/services/ecritures-create.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ed0d6618871982d", "name": "Commented-code block (7 lines) in web/src/lib/services/overview.ts:16", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/lib/services/overview.ts: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-1fc3abe72517acf2", "name": "Commented-code block (11 lines) in web/src/lib/services/ecritures-sync-reconcile.ts:3", "shortDescription": {"text": "Commented-code block (11 lines) in web/src/lib/services/ecritures-sync-reconcile.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-3257f5ef15b3d578", "name": "Commented-code block (7 lines) in web/src/lib/services/dedup-ecritures.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/lib/services/dedup-ecritures.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-d78ab939f0224cd7", "name": "Commented-code block (6 lines) in web/src/lib/services/abandons.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/services/abandons.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-164e118787341db2", "name": "Legacy-named symbol `inbox_suggestion_rejets_v2` in web/src/lib/services/inbox-rejets.ts:48", "shortDescription": {"text": "Legacy-named symbol `inbox_suggestion_rejets_v2` in web/src/lib/services/inbox-rejets.ts:48"}, "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-735a561ed13107e6", "name": "Commented-code block (5 lines) in web/src/lib/services/inbox-rejets.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/inbox-rejets.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-617b7cd78709912d", "name": "Commented-code block (7 lines) in web/src/lib/services/ecritures-status.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/lib/services/ecritures-status.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-e58bd2924867c74b", "name": "Commented-code block (5 lines) in web/src/lib/services/remboursement-ecriture-link.ts:66", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/remboursement-ecriture-link.ts: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-2281c1a8e9000fea", "name": "Commented-code block (5 lines) in web/src/lib/services/camp-budget.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/camp-budget.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-0fe8f8b95ec70959", "name": "Commented-code block (13 lines) in web/src/lib/services/sync-cycle.ts:4", "shortDescription": {"text": "Commented-code block (13 lines) in web/src/lib/services/sync-cycle.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-90007e0208408f5c", "name": "Commented-code block (5 lines) in web/src/lib/services/signatures.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/signatures.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-f36c42bd30f014df", "name": "Commented-code block (6 lines) in web/src/lib/services/caisse-sync.ts:17", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/services/caisse-sync.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-66561709d3b48704", "name": "Commented-code block (16 lines) in web/src/lib/services/comptaweb-import.ts:3", "shortDescription": {"text": "Commented-code block (16 lines) in web/src/lib/services/comptaweb-import.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-4bd55e24a584fc84", "name": "Commented-code block (5 lines) in web/src/lib/services/inbox-auto.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/inbox-auto.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-51038000ffc4217c", "name": "Commented-code block (5 lines) in web/src/lib/services/drafts.ts:136", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/drafts.ts:136"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fd7a1376cf34f69", "name": "Commented-code block (6 lines) in web/src/lib/services/ecritures-create-cw-adapter.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/services/ecritures-create-cw-adapter.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-f5cb8f86bbeaae54", "name": "Commented-code block (8 lines) in web/src/lib/services/drafts-line-reconcile.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in web/src/lib/services/drafts-line-reconcile.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-9f06bfc13cc01c9a", "name": "Commented-code block (5 lines) in web/src/lib/services/__tests__/ecritures-create.test.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/__tests__/ecritures-create.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-bcb5a980d7cb5a90", "name": "Commented-code block (5 lines) in web/src/lib/services/__tests__/ecritures-delete-draft.test.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/services/__tests__/ecritures-delete-draft.test.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-a2a52055e06121a7", "name": "Commented-code block (6 lines) in web/src/lib/actions/onboarding.ts:7", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/actions/onboarding.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25209b77e779334c", "name": "Commented-code block (6 lines) in web/src/lib/actions/ecritures.ts:35", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/actions/ecritures.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-8b31c194ba3eac32", "name": "Commented-code block (5 lines) in web/src/lib/actions/abandons.ts:80", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/actions/abandons.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-3fd8317cb873309e", "name": "Commented-code block (6 lines) in web/src/lib/actions/comptaweb-import.ts:51", "shortDescription": {"text": "Commented-code block (6 lines) in web/src/lib/actions/comptaweb-import.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce114b29fb936438", "name": "Commented-code block (5 lines) in web/src/lib/actions/remboursements/index.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/actions/remboursements/index.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-0a5c317f76175728", "name": "Commented-code block (5 lines) in web/src/lib/actions/remboursements/_helpers.ts:101", "shortDescription": {"text": "Commented-code block (5 lines) in web/src/lib/actions/remboursements/_helpers.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-ead31aa25ac3d787", "name": "Commented-code block (7 lines) in web/src/lib/actions/remboursements/create.ts:184", "shortDescription": {"text": "Commented-code block (7 lines) in web/src/lib/actions/remboursements/create.ts:184"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87acb4066071a15a", "name": "19 env vars used in code but missing from .env.example", "shortDescription": {"text": "19 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AIRTABLE_BASE_ID`, `AUTH_URL`, `BALOO_GROUP_EMAIL_CONTACT`, `BALOO_GROUP_TERRITOIRE`, `BALOO_USER_EMAIL`, `BLOB_READ_WRITE_TOKEN`, `COMPTAWEB_BASE_URL`, `COMPTAWEB_CAISSE_ID` + 11 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}}]}}, "automationDetails": {"id": "repobility/24552"}, "properties": {"repository": "benomite/baloo", "repoUrl": "https://github.com/benomite/baloo", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-4e6c26d88477af41", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-asso-finances.ts:64"}, "properties": {"repobilityId": "705230a12cd13f3e", "scanner": "scanner-primary", "fingerprint": "4e6c26d88477af41", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cae9523c853d8641", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/bootstrap.ts:157"}, "properties": {"repobilityId": "5d1f71fc06f98c02", "scanner": "scanner-primary", "fingerprint": "cae9523c853d8641", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e8636096a6ddbf7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/generate-api-token.ts:56"}, "properties": {"repobilityId": "156863e425a2ffd7", "scanner": "scanner-primary", "fingerprint": "2e8636096a6ddbf7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1c5acacc5478c38", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-airtable-rembs.ts:131"}, "properties": {"repobilityId": "2e6d7f91429b22c3", "scanner": "scanner-primary", "fingerprint": "d1c5acacc5478c38", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7e0a74833ff2c2c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/flag-prelevements-auto.ts:55"}, "properties": {"repobilityId": "9ab1f03eb7cf0be3", "scanner": "scanner-primary", "fingerprint": "7e0a74833ff2c2c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e0fb103905275a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-todos.ts:126"}, "properties": {"repobilityId": "20a6101e0b66ac9a", "scanner": "scanner-primary", "fingerprint": "4e0fb103905275a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-68c31703205e2b92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/demote-unlinked-termine.ts:29"}, "properties": {"repobilityId": "b3bfb2730dc8e123", "scanner": "scanner-primary", "fingerprint": "68c31703205e2b92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9e68f4999fced00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-outils-state.ts:97"}, "properties": {"repobilityId": "132495f2fe9120b6", "scanner": "scanner-primary", "fingerprint": "d9e68f4999fced00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d157e25037de36df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-airtable-caisse.ts:115"}, "properties": {"repobilityId": "a868a2f94865dd06", "scanner": "scanner-primary", "fingerprint": "d157e25037de36df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-271378898dadb874", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-personnes.ts:121"}, "properties": {"repobilityId": "9b8451e8a168b058", "scanner": "scanner-primary", "fingerprint": "271378898dadb874", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99f1ea4fc24a95f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/link-rembs-to-ecritures.ts:153"}, "properties": {"repobilityId": "cae952c22c5c8dfe", "scanner": "scanner-primary", "fingerprint": "99f1ea4fc24a95f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ede036f0dbbce872", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/set-user-role.ts:76"}, "properties": {"repobilityId": "6ed8c2215eb6412f", "scanner": "scanner-primary", "fingerprint": "ede036f0dbbce872", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f8ccf4a7774a194d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/reattach-justificatifs.ts:74"}, "properties": {"repobilityId": "ee2dfde10f6f6c19", "scanner": "scanner-primary", "fingerprint": "f8ccf4a7774a194d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3d6ba64fdec8e29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/audit-csv-totals.ts:39"}, "properties": {"repobilityId": "261cf3d94b2c6556", "scanner": "scanner-primary", "fingerprint": "d3d6ba64fdec8e29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a4dc7038ce49ca0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/import-comptes.ts:153"}, "properties": {"repobilityId": "1339b3714b9aa9f3", "scanner": "scanner-primary", "fingerprint": "4a4dc7038ce49ca0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-82510c222d768ec5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/audit-csv-matching.ts:95"}, "properties": {"repobilityId": "06c5aac3cbaac36c", "scanner": "scanner-primary", "fingerprint": "82510c222d768ec5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7ffc665c5498fcaa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/migrate-blobs-to-private.ts:40"}, "properties": {"repobilityId": "b47ca0694386c63b", "scanner": "scanner-primary", "fingerprint": "7ffc665c5498fcaa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5e96b0fb210ea1b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/scripts/migrate-justifs-to-blob.ts:48"}, "properties": {"repobilityId": "800d19dc01b7e34c", "scanner": "scanner-primary", "fingerprint": "5e96b0fb210ea1b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ae80cf826940784", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 web/src/app/about/page.tsx:460"}, "properties": {"repobilityId": "8fd7c1e974655ff2", "scanner": "scanner-primary", "fingerprint": "2ae80cf826940784", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-795f31b243db74a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/page.tsx:343"}, "properties": {"repobilityId": "827745f86149cccd", "scanner": "scanner-primary", "fingerprint": "795f31b243db74a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75e1cadd7b6ef5fd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/camps/page.tsx:129"}, "properties": {"repobilityId": "fa91cc8dee675734", "scanner": "scanner-primary", "fingerprint": "75e1cadd7b6ef5fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-79806fcd5edd80bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/camps/[id]/page.tsx:302"}, "properties": {"repobilityId": "1fff3310519fd69f", "scanner": "scanner-primary", "fingerprint": "79806fcd5edd80bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02d6239aa80ae920", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/depots/page.tsx:185"}, "properties": {"repobilityId": "c9f5ba952606ef38", "scanner": "scanner-primary", "fingerprint": "02d6239aa80ae920", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a1764564d3a78e0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/abandons/[id]/page.tsx:212"}, "properties": {"repobilityId": "336d90ef0df924ec", "scanner": "scanner-primary", "fingerprint": "9a1764564d3a78e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ff364a81cffe43c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/admin/invitations/page.tsx:200"}, "properties": {"repobilityId": "90bd7956456ed342", "scanner": "scanner-primary", "fingerprint": "ff364a81cffe43c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dcadad9ed73f5a12", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/comptaweb/rapprochement/page.tsx:154"}, "properties": {"repobilityId": "701d5e77d20cf32b", "scanner": "scanner-primary", "fingerprint": "dcadad9ed73f5a12", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ebee9c2ef9561e79", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/remboursements/[id]/page.tsx:248"}, "properties": {"repobilityId": "225a6bcb549e20d3", "scanner": "scanner-primary", "fingerprint": "ebee9c2ef9561e79", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e25bb23107af6a89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/inbox/inbox-board.client.tsx:457"}, "properties": {"repobilityId": "902b9fd3a6451485", "scanner": "scanner-primary", "fingerprint": "e25bb23107af6a89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-631b0e48c3ed4bb9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/inbox/page.tsx:447"}, "properties": {"repobilityId": "12e21087564a4fef", "scanner": "scanner-primary", "fingerprint": "631b0e48c3ed4bb9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2aa47fef71287d14", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/app/(app)/import/page.tsx:239"}, "properties": {"repobilityId": "76a04d055a60d7f2", "scanner": "scanner-primary", "fingerprint": "2aa47fef71287d14", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df92a31d46aa61a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/sync/sync-status-button.tsx:82"}, "properties": {"repobilityId": "b41a2ea28130c023", "scanner": "scanner-primary", "fingerprint": "df92a31d46aa61a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2af9b3b51265d54", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/justificatifs-card.tsx:128"}, "properties": {"repobilityId": "2f1b3756365a4488", "scanner": "scanner-primary", "fingerprint": "f2af9b3b51265d54", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-57b017ed48e5646d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/ecriture-match-banner.tsx:70"}, "properties": {"repobilityId": "70da802498f9ea0f", "scanner": "scanner-primary", "fingerprint": "57b017ed48e5646d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f95eda7e2b92625", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/ecritures-table.tsx:281"}, "properties": {"repobilityId": "3a8563caa0908746", "scanner": "scanner-primary", "fingerprint": "4f95eda7e2b92625", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-135bd84b3eb36d9c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ecritures/arbitrage-banner.tsx:54"}, "properties": {"repobilityId": "f72ed59fb24f0966", "scanner": "scanner-primary", "fingerprint": "135bd84b3eb36d9c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-de0db5dc17ba4e41", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/layout/sidebar.tsx:44"}, "properties": {"repobilityId": "7b95e9c63e81771f", "scanner": "scanner-primary", "fingerprint": "de0db5dc17ba4e41", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bed0a635116816da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/shared/justif-capture.tsx:256"}, "properties": {"repobilityId": "131361778f01b3e5", "scanner": "scanner-primary", "fingerprint": "bed0a635116816da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-52ca1e2f957807e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ui/file-multi-uploader.tsx:223"}, "properties": {"repobilityId": "d11902a43ee4e45c", "scanner": "scanner-primary", "fingerprint": "52ca1e2f957807e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb3e958fdc9aa117", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 web/src/components/ui/file-drop.tsx:47"}, "properties": {"repobilityId": "d537c0e0c6a06dfe", "scanner": "scanner-primary", "fingerprint": "cb3e958fdc9aa117", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4a748f68f4169547", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 web/src/lib/comptaweb/auth.ts:3"}, "properties": {"repobilityId": "783661860017d667", "scanner": "scanner-primary", "fingerprint": "4a748f68f4169547", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7559649019954caf", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 web/src/lib/services/ecritures-create.ts:171"}, "properties": {"repobilityId": "ce79aec372b820d6", "scanner": "scanner-primary", "fingerprint": "7559649019954caf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-19930a829b3ae0bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/src/lib/actions/caisse.ts:141"}, "properties": {"repobilityId": "34f433ab7b19e3d3", "scanner": "scanner-primary", "fingerprint": "19930a829b3ae0bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-be7e66599be4b4e5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in web/src/app/about/page.tsx:460"}, "properties": {"repobilityId": "da3ccb3ca5a8135b", "scanner": "scanner-primary", "fingerprint": "be7e66599be4b4e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/src/app/about/page.tsx"}, "region": {"startLine": 460}}}]}, {"ruleId": "scanner-20bf10da4e46b01c", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in web/src/lib/db.ts:69"}, "properties": {"repobilityId": "092f03977cb2de9d", "scanner": "scanner-primary", "fingerprint": "20bf10da4e46b01c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/src/lib/db.ts"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54597edb7f5bad38", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b8138c1fc064ff6b", "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": "d12e01bcb836a195", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "c8518278a1719beb", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-bea357a6497a2d5d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: CLAUDE.md"}, "properties": {"repobilityId": "aae72df3934829ac", "scanner": "scanner-primary", "fingerprint": "bea357a6497a2d5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "CLAUDE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a0f039d72f021d08", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/scripts/import-airtable-rembs.ts:10"}, "properties": {"repobilityId": "bef3a858cd717940", "scanner": "scanner-primary", "fingerprint": "a0f039d72f021d08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6b0e8a62616f8ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/import-airtable-rembs.ts:76"}, "properties": {"repobilityId": "d36d175a511bcdba", "scanner": "scanner-primary", "fingerprint": "e6b0e8a62616f8ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75c4bb2f5a96e534", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/scripts/demote-unlinked-termine.ts:4"}, "properties": {"repobilityId": "2efbaac06096e6ff", "scanner": "scanner-primary", "fingerprint": "75c4bb2f5a96e534", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84d3e81069d55a86", "level": "none", "message": {"text": "Commented-code block (9 lines) in web/scripts/import-airtable-caisse.ts:7"}, "properties": {"repobilityId": "694f3fe1c555d1aa", "scanner": "scanner-primary", "fingerprint": "84d3e81069d55a86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c708e5f15d7ba373", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/import-airtable-caisse.ts:71"}, "properties": {"repobilityId": "d1e82a8fd4aa5b19", "scanner": "scanner-primary", "fingerprint": "c708e5f15d7ba373", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-157d7040b520fb1e", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/scripts/link-rembs-to-ecritures.ts:4"}, "properties": {"repobilityId": "919d568b184e72e1", "scanner": "scanner-primary", "fingerprint": "157d7040b520fb1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-237f758d60dd2f49", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/scripts/migrate-blobs-to-private.ts:5"}, "properties": {"repobilityId": "b8276c84ed73142b", "scanner": "scanner-primary", "fingerprint": "237f758d60dd2f49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-953e27a169494d93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/scripts/migrate-blobs-to-private.ts:68"}, "properties": {"repobilityId": "5634284c0bf7b421", "scanner": "scanner-primary", "fingerprint": "953e27a169494d93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2c400caf2012a687", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/scripts/migrate-justifs-to-blob.ts:3"}, "properties": {"repobilityId": "8461d69b67ab61ac", "scanner": "scanner-primary", "fingerprint": "2c400caf2012a687", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0b0e7b94fdd53d8", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/app/layout.tsx:10"}, "properties": {"repobilityId": "380e1e8e1015ab1a", "scanner": "scanner-primary", "fingerprint": "f0b0e7b94fdd53d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da43182ba787915b", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/app/manifest.ts:5"}, "properties": {"repobilityId": "b0d40836a9857e47", "scanner": "scanner-primary", "fingerprint": "da43182ba787915b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de412762b901b51b", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/api/sync/run/route.ts:7"}, "properties": {"repobilityId": "221dd72f4cb9c721", "scanner": "scanner-primary", "fingerprint": "de412762b901b51b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2fe9cbeda84b3f5f", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/app/api/ecritures/route.ts:23"}, "properties": {"repobilityId": "83361dc320f23809", "scanner": "scanner-primary", "fingerprint": "2fe9cbeda84b3f5f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-302c23e12ffbb68a", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/app/api/ecritures/route-default-filter.test.ts:5"}, "properties": {"repobilityId": "2d232f3b1b8bd111", "scanner": "scanner-primary", "fingerprint": "302c23e12ffbb68a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6f98892484a5b95", "level": "none", "message": {"text": "Commented-code block (9 lines) in web/src/app/api/ecritures/status-filter.ts:6"}, "properties": {"repobilityId": "891407fe9d602ffe", "scanner": "scanner-primary", "fingerprint": "c6f98892484a5b95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7b7c2f084e9bb41", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/api/justificatifs/[...path]/route.ts:6"}, "properties": {"repobilityId": "efee647add92bc53", "scanner": "scanner-primary", "fingerprint": "b7b7c2f084e9bb41", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-feeb4f34a50571f1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/app/api/justificatifs/[...path]/route.ts:36"}, "properties": {"repobilityId": "efd4a28389e55f6e", "scanner": "scanner-primary", "fingerprint": "feeb4f34a50571f1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-844e46e21cfeba5c", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/oauth/register/route.ts:6"}, "properties": {"repobilityId": "6e61d7dd4db62249", "scanner": "scanner-primary", "fingerprint": "844e46e21cfeba5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1875062ee4cf1430", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/app/(app)/error.tsx:6"}, "properties": {"repobilityId": "270004b3b74292f4", "scanner": "scanner-primary", "fingerprint": "1875062ee4cf1430", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34ea3baa0fb0a26c", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/(app)/ecritures/[id]/page.tsx:252"}, "properties": {"repobilityId": "2c88cfe6081f9c29", "scanner": "scanner-primary", "fingerprint": "34ea3baa0fb0a26c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a49d633cd73b094", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/(app)/comptaweb/rapprochement/page.tsx:25"}, "properties": {"repobilityId": "9524bb418a536927", "scanner": "scanner-primary", "fingerprint": "5a49d633cd73b094", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a47143d28ee0df5", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/(app)/moi/page.tsx:3"}, "properties": {"repobilityId": "c3d6ebb1cd9dc46e", "scanner": "scanner-primary", "fingerprint": "3a47143d28ee0df5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84c4ffcf37aba867", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/app/(app)/inbox/inbox-board.client.tsx:21"}, "properties": {"repobilityId": "5a1998a2970ef2a0", "scanner": "scanner-primary", "fingerprint": "84c4ffcf37aba867", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46e5390f4305a62b", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/components/caisse/caisse-mouvement-wizard.tsx:6"}, "properties": {"repobilityId": "43739b1f6219be22", "scanner": "scanner-primary", "fingerprint": "46e5390f4305a62b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da2d01e084212aa5", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/components/caisse/__tests__/caisse-mouvement-wizard.test.tsx:5"}, "properties": {"repobilityId": "a7eddbb008accd64", "scanner": "scanner-primary", "fingerprint": "da2d01e084212aa5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eda65c84ecf42085", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/components/caisse/__tests__/format-caisse-clipboard.test.ts:9"}, "properties": {"repobilityId": "11ce8c2eafde99b0", "scanner": "scanner-primary", "fingerprint": "eda65c84ecf42085", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-140c0b60da702737", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/sync/use-sync-status.ts:7"}, "properties": {"repobilityId": "2389aafac7c22376", "scanner": "scanner-primary", "fingerprint": "140c0b60da702737", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdbc01c86f0c889c", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/sync/sync-status-button.tsx:3"}, "properties": {"repobilityId": "5235c23634005e5e", "scanner": "scanner-primary", "fingerprint": "cdbc01c86f0c889c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30c9139fe62326ca", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/src/components/sync/__tests__/sync-status-button.test.tsx:6"}, "properties": {"repobilityId": "929b9036d5026001", "scanner": "scanner-primary", "fingerprint": "30c9139fe62326ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6c22e8670a7a3264", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/ecritures/ecritures-section.tsx:6"}, "properties": {"repobilityId": "77d5eef57883faee", "scanner": "scanner-primary", "fingerprint": "6c22e8670a7a3264", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86db46388b221c3f", "level": "none", "message": {"text": "Commented-code block (10 lines) in web/src/components/ecritures/cw-assist-actions.tsx:11"}, "properties": {"repobilityId": "e24e9a7192f59129", "scanner": "scanner-primary", "fingerprint": "86db46388b221c3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32841fd8ace44773", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/ecritures/nouvelle-ecriture-wizard.tsx:6"}, "properties": {"repobilityId": "ca82f31448bf4833", "scanner": "scanner-primary", "fingerprint": "32841fd8ace44773", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32640ee08ba996fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/components/ecritures/nouvelle-ecriture-wizard.tsx:14"}, "properties": {"repobilityId": "a54cde55f2b2011c", "scanner": "scanner-primary", "fingerprint": "32640ee08ba996fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-efe93db5cd4df710", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/components/ecritures/ecritures-table.tsx:47"}, "properties": {"repobilityId": "3285da25f241acb4", "scanner": "scanner-primary", "fingerprint": "efe93db5cd4df710", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f733dc6a60c9965", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/components/ecritures/ecriture-filters.tsx:10"}, "properties": {"repobilityId": "7fee8526b4a1930c", "scanner": "scanner-primary", "fingerprint": "2f733dc6a60c9965", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6891258fbe6133cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/components/ecritures/__tests__/cw-assist-actions.test.tsx:5"}, "properties": {"repobilityId": "fc7dbb60a0d1e486", "scanner": "scanner-primary", "fingerprint": "6891258fbe6133cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-91c0eb4d797e110f", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/components/admin/cleanup-orphans-button.tsx:13"}, "properties": {"repobilityId": "c0576714b53ae5af", "scanner": "scanner-primary", "fingerprint": "91c0eb4d797e110f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4cf298522f9a09e", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/layout/mobile-nav.tsx:8"}, "properties": {"repobilityId": "ea311d7261738833", "scanner": "scanner-primary", "fingerprint": "d4cf298522f9a09e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7095c54d4f9126f5", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/pwa/install-button.tsx:12"}, "properties": {"repobilityId": "56b2f74408d9cfaf", "scanner": "scanner-primary", "fingerprint": "7095c54d4f9126f5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac8a3b7afdb739bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/shared/justif-capture.tsx:29"}, "properties": {"repobilityId": "2d2b4daa1d370435", "scanner": "scanner-primary", "fingerprint": "ac8a3b7afdb739bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd04a3480189f239", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/components/shared/status-badge.tsx:3"}, "properties": {"repobilityId": "8e68936fc3b58b82", "scanner": "scanner-primary", "fingerprint": "dd04a3480189f239", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e4bed0caf598152f", "level": "none", "message": {"text": "Commented-code block (9 lines) in web/src/components/shared/amount.tsx:11"}, "properties": {"repobilityId": "6bc76be38ee61646", "scanner": "scanner-primary", "fingerprint": "e4bed0caf598152f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b88e9b962133648", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/components/rembs/ecriture-link-card.tsx:19"}, "properties": {"repobilityId": "9c3765794a757344", "scanner": "scanner-primary", "fingerprint": "1b88e9b962133648", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b78b4f3c2aaf475", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/format.ts:3"}, "properties": {"repobilityId": "1854bc3bead1709a", "scanner": "scanner-primary", "fingerprint": "3b78b4f3c2aaf475", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6296c63dbaac3082", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/lib/branches-sgdf.ts:3"}, "properties": {"repobilityId": "d957b42d00f49bbf", "scanner": "scanner-primary", "fingerprint": "6296c63dbaac3082", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f6d540ed0e0d465b", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/storage.ts:3"}, "properties": {"repobilityId": "047b54d0250024f9", "scanner": "scanner-primary", "fingerprint": "f6d540ed0e0d465b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d60fe1e8552cc258", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/storage.ts:29"}, "properties": {"repobilityId": "8f0e94b4c1180eb2", "scanner": "scanner-primary", "fingerprint": "d60fe1e8552cc258", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-04749d8ee5df4c06", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/selectable.ts:1"}, "properties": {"repobilityId": "2d44e4224651a19d", "scanner": "scanner-primary", "fingerprint": "04749d8ee5df4c06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20d4aea236324bd7", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/justif-allowed.ts:1"}, "properties": {"repobilityId": "04ff12d2366f9a2d", "scanner": "scanner-primary", "fingerprint": "20d4aea236324bd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b75173195bbfc9c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/sync-readiness.ts:1"}, "properties": {"repobilityId": "1fe7b45b70cb5153", "scanner": "scanner-primary", "fingerprint": "b75173195bbfc9c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bed52a3e2ae93561", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/src/lib/types.ts:14"}, "properties": {"repobilityId": "e04ab996234aa5fe", "scanner": "scanner-primary", "fingerprint": "bed52a3e2ae93561", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec95573b9004a082", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/scanify.ts:4"}, "properties": {"repobilityId": "a6069a50ea543c75", "scanner": "scanner-primary", "fingerprint": "ec95573b9004a082", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bf332611eedc57f8", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/lib/ids.ts:3"}, "properties": {"repobilityId": "4c471261b08cc8fe", "scanner": "scanner-primary", "fingerprint": "bf332611eedc57f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b63fd46e332f34e", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/api/route-helpers.ts:5"}, "properties": {"repobilityId": "f374a7035c18ab19", "scanner": "scanner-primary", "fingerprint": "9b63fd46e332f34e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1446539ecd5b33c8", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/utils/form.ts:3"}, "properties": {"repobilityId": "1abc656db1fc2e5c", "scanner": "scanner-primary", "fingerprint": "1446539ecd5b33c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9053caf42aedf31", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/oauth/pkce.ts:3"}, "properties": {"repobilityId": "e97d9bf64d9e8cbe", "scanner": "scanner-primary", "fingerprint": "f9053caf42aedf31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cb6f6b17f2e1c9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/oauth/tokens.ts:3"}, "properties": {"repobilityId": "f4cfab710d4b783a", "scanner": "scanner-primary", "fingerprint": "6cb6f6b17f2e1c9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f34c44fb09d8e7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/ecritures-write.ts:146"}, "properties": {"repobilityId": "73ba233bbd334750", "scanner": "scanner-primary", "fingerprint": "9f34c44fb09d8e7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cfda9144f7a3b55f", "level": "none", "message": {"text": "Commented-code block (30 lines) in web/src/lib/comptaweb/ecritures-list-scrape.ts:11"}, "properties": {"repobilityId": "f44c919036a2a2fb", "scanner": "scanner-primary", "fingerprint": "cfda9144f7a3b55f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f65a85886f6d850", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/comptaweb/session-store.ts:5"}, "properties": {"repobilityId": "73592e7bcbf68a92", "scanner": "scanner-primary", "fingerprint": "0f65a85886f6d850", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3d6ea989086ce9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/http.ts:12"}, "properties": {"repobilityId": "47efdf01cc085e30", "scanner": "scanner-primary", "fingerprint": "a3d6ea989086ce9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a15a8bf95c77d47d", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/comptaweb/env-loader.ts:1"}, "properties": {"repobilityId": "2c30627ff7615ed2", "scanner": "scanner-primary", "fingerprint": "a15a8bf95c77d47d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0e345c78da24b07", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/comptaweb/ecriture-detail-scrape.ts:4"}, "properties": {"repobilityId": "f2fadd1086e7c8d8", "scanner": "scanner-primary", "fingerprint": "d0e345c78da24b07", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f4e7d562896e6dd", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/src/lib/comptaweb/auth-automated.ts:6"}, "properties": {"repobilityId": "98aa8baab038900c", "scanner": "scanner-primary", "fingerprint": "1f4e7d562896e6dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd117dfdaaecc377", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/src/lib/comptaweb/auth-automated.ts:53"}, "properties": {"repobilityId": "43a52c35bf1c25b1", "scanner": "scanner-primary", "fingerprint": "cd117dfdaaecc377", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8fcfbf5b9004d957", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/src/lib/comptaweb/__tests__/caisse-scrape.test.ts:4"}, "properties": {"repobilityId": "e8a2e605381f80a1", "scanner": "scanner-primary", "fingerprint": "8fcfbf5b9004d957", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c0ea4503ccfdc840", "level": "none", "message": {"text": "Commented-code block (9 lines) in web/src/lib/comptaweb/__tests__/ecritures-list-scrape.test.ts:3"}, "properties": {"repobilityId": "8701f9fae985474c", "scanner": "scanner-primary", "fingerprint": "c0ea4503ccfdc840", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5b6ed76326f6941", "level": "none", "message": {"text": "Commented-code block (10 lines) in web/src/lib/auth/schema.ts:8"}, "properties": {"repobilityId": "35939705ccbf37cd", "scanner": "scanner-primary", "fingerprint": "a5b6ed76326f6941", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ff882014b9746a1", "level": "none", "message": {"text": "Commented-code block (9 lines) in web/src/lib/auth/adapter.ts:8"}, "properties": {"repobilityId": "c00494abfe009989", "scanner": "scanner-primary", "fingerprint": "8ff882014b9746a1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e7df6044ae132af", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/auth/rate-limit.ts:4"}, "properties": {"repobilityId": "e3dbb55aab8f67b8", "scanner": "scanner-primary", "fingerprint": "9e7df6044ae132af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f169ba3b3fa5cb46", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/src/lib/auth/auth.ts:9"}, "properties": {"repobilityId": "633731917906807f", "scanner": "scanner-primary", "fingerprint": "f169ba3b3fa5cb46", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9b5396e4871591a", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/auth/access.ts:5"}, "properties": {"repobilityId": "4507301df05e900d", "scanner": "scanner-primary", "fingerprint": "c9b5396e4871591a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e78747347e5d8db7", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/auth/api-tokens.ts:8"}, "properties": {"repobilityId": "61db4df1f0b852ea", "scanner": "scanner-primary", "fingerprint": "e78747347e5d8db7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a394b371ba84156", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/db/business-schema.ts:61"}, "properties": {"repobilityId": "d909d8a04c6e5001", "scanner": "scanner-primary", "fingerprint": "2a394b371ba84156", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c426462fea72616d", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/src/lib/db/business-schema-status-migration.test.ts:8"}, "properties": {"repobilityId": "efb6acb0c5a8c3a1", "scanner": "scanner-primary", "fingerprint": "c426462fea72616d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c70348b8211d9bea", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/src/lib/mcp/register-all.ts:29"}, "properties": {"repobilityId": "ffff42f26ce42824", "scanner": "scanner-primary", "fingerprint": "c70348b8211d9bea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6645a41f8c65ba1c", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/mcp/tools/ecritures.ts:25"}, "properties": {"repobilityId": "07a063468574c464", "scanner": "scanner-primary", "fingerprint": "6645a41f8c65ba1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f582d02e7522d648", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/mcp/tools/comptaweb-client.ts:12"}, "properties": {"repobilityId": "ed3ad1c9ddd5ac46", "scanner": "scanner-primary", "fingerprint": "f582d02e7522d648", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-920546be782153ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/queries/cloture.ts:5"}, "properties": {"repobilityId": "eff86888d17a3fc9", "scanner": "scanner-primary", "fingerprint": "920546be782153ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c2e86408f1b21db", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/queries/sync-arbitrage.ts:30"}, "properties": {"repobilityId": "1449e58e73cb3373", "scanner": "scanner-primary", "fingerprint": "5c2e86408f1b21db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-744d07fd7573cafb", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/services/cleanup-transferts.ts:3"}, "properties": {"repobilityId": "78b6777351267cfd", "scanner": "scanner-primary", "fingerprint": "744d07fd7573cafb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-123361e1387cc746", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/justificatifs.ts:13"}, "properties": {"repobilityId": "31733d5ab060ec1c", "scanner": "scanner-primary", "fingerprint": "123361e1387cc746", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e0c0c808b0b508a6", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/lib/services/ecritures.ts:24"}, "properties": {"repobilityId": "561509898b97fb50", "scanner": "scanner-primary", "fingerprint": "e0c0c808b0b508a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6aaddeceefc9fed", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/services/caisse-omnibox.ts:13"}, "properties": {"repobilityId": "120df757f02f8a8c", "scanner": "scanner-primary", "fingerprint": "b6aaddeceefc9fed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f6c255c1921dc06", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/services/depots.ts:281"}, "properties": {"repobilityId": "415be67c56834eaa", "scanner": "scanner-primary", "fingerprint": "1f6c255c1921dc06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b81b2848049cf2e1", "level": "none", "message": {"text": "Commented-code block (15 lines) in web/src/lib/services/ecritures-create.ts:7"}, "properties": {"repobilityId": "72a4a0b8f786e324", "scanner": "scanner-primary", "fingerprint": "b81b2848049cf2e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ed0d6618871982d", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/lib/services/overview.ts:16"}, "properties": {"repobilityId": "e0aea532fef76d17", "scanner": "scanner-primary", "fingerprint": "0ed0d6618871982d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fc3abe72517acf2", "level": "none", "message": {"text": "Commented-code block (11 lines) in web/src/lib/services/ecritures-sync-reconcile.ts:3"}, "properties": {"repobilityId": "ed3741d6c1d61307", "scanner": "scanner-primary", "fingerprint": "1fc3abe72517acf2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3257f5ef15b3d578", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/lib/services/dedup-ecritures.ts:1"}, "properties": {"repobilityId": "8d19a752d0132426", "scanner": "scanner-primary", "fingerprint": "3257f5ef15b3d578", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d78ab939f0224cd7", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/services/abandons.ts:5"}, "properties": {"repobilityId": "8f729a9e72198532", "scanner": "scanner-primary", "fingerprint": "d78ab939f0224cd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-164e118787341db2", "level": "note", "message": {"text": "Legacy-named symbol `inbox_suggestion_rejets_v2` in web/src/lib/services/inbox-rejets.ts:48"}, "properties": {"repobilityId": "9acd52cdac8f1538", "scanner": "scanner-primary", "fingerprint": "164e118787341db2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-735a561ed13107e6", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/inbox-rejets.ts:10"}, "properties": {"repobilityId": "15bfec0e46aff91a", "scanner": "scanner-primary", "fingerprint": "735a561ed13107e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-617b7cd78709912d", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/lib/services/ecritures-status.ts:4"}, "properties": {"repobilityId": "1a9b414efa077371", "scanner": "scanner-primary", "fingerprint": "617b7cd78709912d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e58bd2924867c74b", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/remboursement-ecriture-link.ts:66"}, "properties": {"repobilityId": "b6a5102fa69c8a0d", "scanner": "scanner-primary", "fingerprint": "e58bd2924867c74b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2281c1a8e9000fea", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/camp-budget.ts:1"}, "properties": {"repobilityId": "f6de04ca1710fb5d", "scanner": "scanner-primary", "fingerprint": "2281c1a8e9000fea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fe8f8b95ec70959", "level": "none", "message": {"text": "Commented-code block (13 lines) in web/src/lib/services/sync-cycle.ts:4"}, "properties": {"repobilityId": "724350d005ad7d3d", "scanner": "scanner-primary", "fingerprint": "0fe8f8b95ec70959", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90007e0208408f5c", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/signatures.ts:8"}, "properties": {"repobilityId": "3552511a96dd10ed", "scanner": "scanner-primary", "fingerprint": "90007e0208408f5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f36c42bd30f014df", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/services/caisse-sync.ts:17"}, "properties": {"repobilityId": "033200dbe92b3cc0", "scanner": "scanner-primary", "fingerprint": "f36c42bd30f014df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66561709d3b48704", "level": "none", "message": {"text": "Commented-code block (16 lines) in web/src/lib/services/comptaweb-import.ts:3"}, "properties": {"repobilityId": "1b436f0a06664bc0", "scanner": "scanner-primary", "fingerprint": "66561709d3b48704", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bd55e24a584fc84", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/inbox-auto.ts:6"}, "properties": {"repobilityId": "c0968c8a3cfbcd24", "scanner": "scanner-primary", "fingerprint": "4bd55e24a584fc84", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-51038000ffc4217c", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/drafts.ts:136"}, "properties": {"repobilityId": "27ba625b79b2e928", "scanner": "scanner-primary", "fingerprint": "51038000ffc4217c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fd7a1376cf34f69", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/services/ecritures-create-cw-adapter.ts:3"}, "properties": {"repobilityId": "4dec4b2284b87518", "scanner": "scanner-primary", "fingerprint": "7fd7a1376cf34f69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5cb8f86bbeaae54", "level": "none", "message": {"text": "Commented-code block (8 lines) in web/src/lib/services/drafts-line-reconcile.ts:3"}, "properties": {"repobilityId": "2e13bc5e90a8e002", "scanner": "scanner-primary", "fingerprint": "f5cb8f86bbeaae54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f06bfc13cc01c9a", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/__tests__/ecritures-create.test.ts:5"}, "properties": {"repobilityId": "dd159407b59f901b", "scanner": "scanner-primary", "fingerprint": "9f06bfc13cc01c9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bcb5a980d7cb5a90", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/services/__tests__/ecritures-delete-draft.test.ts:8"}, "properties": {"repobilityId": "b2c4196537c1f498", "scanner": "scanner-primary", "fingerprint": "bcb5a980d7cb5a90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a2a52055e06121a7", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/actions/onboarding.ts:7"}, "properties": {"repobilityId": "57ee26752c42bd36", "scanner": "scanner-primary", "fingerprint": "a2a52055e06121a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25209b77e779334c", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/actions/ecritures.ts:35"}, "properties": {"repobilityId": "dc069be79dd57b4c", "scanner": "scanner-primary", "fingerprint": "25209b77e779334c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b31c194ba3eac32", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/actions/abandons.ts:80"}, "properties": {"repobilityId": "b91d17ef62ee9615", "scanner": "scanner-primary", "fingerprint": "8b31c194ba3eac32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fd8317cb873309e", "level": "none", "message": {"text": "Commented-code block (6 lines) in web/src/lib/actions/comptaweb-import.ts:51"}, "properties": {"repobilityId": "b6ef1b8ab7ba9af7", "scanner": "scanner-primary", "fingerprint": "3fd8317cb873309e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce114b29fb936438", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/actions/remboursements/index.ts:4"}, "properties": {"repobilityId": "8072f69a9e8ed9e6", "scanner": "scanner-primary", "fingerprint": "ce114b29fb936438", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a5c317f76175728", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/src/lib/actions/remboursements/_helpers.ts:101"}, "properties": {"repobilityId": "1119a59744575a9c", "scanner": "scanner-primary", "fingerprint": "0a5c317f76175728", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ead31aa25ac3d787", "level": "none", "message": {"text": "Commented-code block (7 lines) in web/src/lib/actions/remboursements/create.ts:184"}, "properties": {"repobilityId": "50713155285102b5", "scanner": "scanner-primary", "fingerprint": "ead31aa25ac3d787", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87acb4066071a15a", "level": "note", "message": {"text": "19 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "b1f30c58de7ffb20", "scanner": "scanner-primary", "fingerprint": "87acb4066071a15a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}