{"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-afdcb62f94cd4f7a", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/station/station-board.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/station/station-board.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-c21be93072943106", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/impresion-board.tsx:51", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/impresion-board.tsx:51"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4392d2c13cc29e89", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/station-invoices-table.tsx:188", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/station-invoices-table.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc39195b44621215", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/admin-stock-board.tsx:297", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/admin-stock-board.tsx:297"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3dc511f71c425d31", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/operator-board.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/operator-board.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25a76e5371bf0e98", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/materials-manager.tsx:337", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/materials-manager.tsx:337"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd859f006dbc4d7e", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/maquila-board.tsx:59", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/maquila-board.tsx:59"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-19a288f4cd5747e2", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/voice-stock-dictate.tsx:651", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/voice-stock-dictate.tsx:651"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03a2a311d5831dd2", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/fe-config-form.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/fe-config-form.tsx:332"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab21482fd146fa92", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/order-edit-modal.tsx:282", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/order-edit-modal.tsx:282"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b9ff1d6afd680375", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/orders-table.tsx:613", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/orders-table.tsx:613"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6242cdcaa12e5e88", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/products-manager.tsx:527", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/products-manager.tsx:527"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8215452b3ae83e6", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/order-quick-create.tsx:312", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/order-quick-create.tsx:312"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53dff33699d6dc26", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/admin-cuentas-board.tsx:257", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/admin-cuentas-board.tsx:257"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd564252cd8c8bfc", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/fe-documentos-board.tsx:509", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/fe-documentos-board.tsx:509"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd80101e64b2292c", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/logos-manager.tsx:309", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/logos-manager.tsx:309"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cf6d5edf761409d", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/bulk-assign-bar.tsx:275", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/bulk-assign-bar.tsx:275"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04e62a0baab29345", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/company-products-panel.tsx:151", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/company-products-panel.tsx:151"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28ad9aa32deac5fc", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/stage-control-panel.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/stage-control-panel.tsx:165"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc235bc50253245e", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/corte-board.tsx:253", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/corte-board.tsx:253"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37e6097d1518dd3d", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/empaque-board.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/empaque-board.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ea76730c2a7a39d", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/simple-stage-board.tsx:106", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/simple-stage-board.tsx:106"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70488b8dcbbe2b5e", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(admin)/admin/home/page.tsx:176", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(admin)/admin/home/page.tsx:176"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e394bdd60cb090e4", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(admin)/admin/companies/[id]/page.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(admin)/admin/companies/[id]/page.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7891e1ed2df38a62", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/catalog/company-picker.tsx:87", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/catalog/company-picker.tsx:87"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25c07e36e4995f7e", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/catalog/catalog-grid.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/catalog/catalog-grid.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c1ebd394d95e420", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/stock/page.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/stock/page.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-799f954bdca443c8", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/home/page.tsx:55", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/home/page.tsx:55"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-375ac7ccdb5310b3", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/cuentas/page.tsx:299", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/cuentas/page.tsx:299"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b45b7e7d92b1857e", "name": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/checkout/checkout-form.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/checkout/checkout-form.tsx:74"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6723f4ffbcea5ab", "name": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/api/hacienda-client.ts:178", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/api/hacienda-client.ts:178"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-107cfcff9f7fba79", "name": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/services/delivery-service.ts:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/services/delivery-service.ts:7"}, "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-6305f31825981883", "name": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/services/invoice-service.ts:199", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/services/invoice-service.ts:199"}, "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-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9393bc49dcf30167", "name": "Very large file: next-app/components/admin/orders-table.tsx (1265 lines)", "shortDescription": {"text": "Very large file: next-app/components/admin/orders-table.tsx (1265 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-521b930c409d0139", "name": "Very large file: next-app/components/admin/products-manager.tsx (1272 lines)", "shortDescription": {"text": "Very large file: next-app/components/admin/products-manager.tsx (1272 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 209 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 18 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 91 placeholder/mock markers across 37 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bf6e1739ac50736", "name": "Commented-code block (5 lines) in next-app/next.config.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/next.config.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-061080015c656efe", "name": "Commented-code block (5 lines) in next-app/components/size-selector.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/components/size-selector.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ffba5a04de3bcc23", "name": "Commented-code block (6 lines) in next-app/components/admin/admin-modules.tsx:21", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/components/admin/admin-modules.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-4549c637e25013eb", "name": "Commented-code block (5 lines) in next-app/components/admin/admin-menu.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/components/admin/admin-menu.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eaeebbe7993fbab2", "name": "Commented-code block (5 lines) in next-app/components/admin/admin-fast-actions.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/components/admin/admin-fast-actions.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-ef872c8bec8b2ed1", "name": "Commented-code block (6 lines) in next-app/components/admin/order-logos-modal.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/components/admin/order-logos-modal.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-92c0ebad508f8c79", "name": "Commented-code block (10 lines) in next-app/components/admin/order-edit-modal.tsx:62", "shortDescription": {"text": "Commented-code block (10 lines) in next-app/components/admin/order-edit-modal.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a84ae3af2d321340", "name": "Commented-code block (5 lines) in next-app/components/admin/admin-actions.tsx:21", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/components/admin/admin-actions.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-ed0b3563de4bcd6e", "name": "Commented-code block (5 lines) in next-app/components/admin/orders-table.tsx:54", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/components/admin/orders-table.tsx:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14274df86c9c0d7d", "name": "Commented-code block (6 lines) in next-app/components/admin/products-manager.tsx:62", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/components/admin/products-manager.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-002b2a8db915ef93", "name": "Commented-code block (5 lines) in next-app/components/admin/station-users-manager.tsx:28", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/components/admin/station-users-manager.tsx:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9aca18668cfa217d", "name": "Commented-code block (5 lines) in next-app/components/admin/admin-shell.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/components/admin/admin-shell.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-e30d6df655494657", "name": "Commented-code block (7 lines) in next-app/components/admin/company-products-panel.tsx:33", "shortDescription": {"text": "Commented-code block (7 lines) in next-app/components/admin/company-products-panel.tsx:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3287436336c86f26", "name": "Commented-code block (5 lines) in next-app/components/admin/stage-control-panel.tsx:33", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/components/admin/stage-control-panel.tsx:33"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8aaf15d344598445", "name": "Commented-code block (6 lines) in next-app/components/admin/simple-stage-board.tsx:23", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/components/admin/simple-stage-board.tsx: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-8e0c9d2981e56aa0", "name": "Commented-code block (8 lines) in next-app/components/landing/landing-page.tsx:20", "shortDescription": {"text": "Commented-code block (8 lines) in next-app/components/landing/landing-page.tsx:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e76959b35e7db1b0", "name": "Commented-code block (6 lines) in next-app/app/page.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/app/page.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3ebb5d3d658eb0f", "name": "Commented-code block (7 lines) in next-app/app/api/admin/facturacion/recibidas/route.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in next-app/app/api/admin/facturacion/recibidas/route.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-467ba7db09f989bf", "name": "Commented-code block (5 lines) in next-app/app/api/admin/facturacion/recibidas/[id]/respond/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/facturacion/recibidas/[id]/respond/route.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-e9e24f4ac3cd9f4e", "name": "Commented-code block (5 lines) in next-app/app/api/admin/facturacion/pdf/[id]/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/facturacion/pdf/[id]/route.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-f3bf3744f3080432", "name": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-parse/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-parse/route.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-84b389f597b3f038", "name": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-apply/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-apply/route.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-8963def13f069bb5", "name": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-transcribe/route.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-transcribe/route.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-ca6335601a18c219", "name": "Commented-code block (11 lines) in next-app/app/s/[token]/route.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in next-app/app/s/[token]/route.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-c47852810b5f8743", "name": "Commented-code block (6 lines) in next-app/app/(admin)/admin/_stage-actions.ts:147", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/app/(admin)/admin/_stage-actions.ts:147"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4ff192477c63210", "name": "Commented-code block (5 lines) in next-app/app/(admin)/admin/orders/factura-actions.ts:75", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/app/(admin)/admin/orders/factura-actions.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-926c203da4e4f778", "name": "Commented-code block (11 lines) in next-app/app/o/[token]/route.ts:1", "shortDescription": {"text": "Commented-code block (11 lines) in next-app/app/o/[token]/route.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-db8a217afd8bf217", "name": "`fetch()` without try/.catch or AbortSignal \u2014 next-app/app/(app)/cart/page.tsx:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 next-app/app/(app)/cart/page.tsx:16"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6ceb1243b29a1196", "name": "Commented-code block (5 lines) in next-app/lib/admin-acting-company.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/admin-acting-company.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-2997b291fc2873fd", "name": "Commented-code block (5 lines) in next-app/lib/pdf-service.ts:299", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/pdf-service.ts:299"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0918b164f2afa65c", "name": "Commented-code block (5 lines) in next-app/lib/costa-rica-locations.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/costa-rica-locations.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-b7c5535c751ff929", "name": "Commented-code block (5 lines) in next-app/lib/admin-fast-actions.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/admin-fast-actions.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-6764ed36d0237da2", "name": "Commented-code block (5 lines) in next-app/lib/facturacion/crypto/xades-signer.ts:90", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/facturacion/crypto/xades-signer.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73dce822dd8b5c07", "name": "`fetch()` without try/.catch or AbortSignal \u2014 next-app/lib/facturacion/api/hacienda-client.ts:169", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 next-app/lib/facturacion/api/hacienda-client.ts:169"}, "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-decd3bbe5b7d1d8a", "name": "Commented-code block (12 lines) in next-app/lib/facturacion/xml/templates/mensaje-receptor-10.ts:6", "shortDescription": {"text": "Commented-code block (12 lines) in next-app/lib/facturacion/xml/templates/mensaje-receptor-10.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-ade96797f2f3ffa4", "name": "Commented-code block (5 lines) in next-app/lib/facturacion/services/polling-service.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/facturacion/services/polling-service.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-9b710b90fbd3a774", "name": "Commented-code block (6 lines) in next-app/lib/facturacion/services/xml-parser-service.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/lib/facturacion/services/xml-parser-service.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-c08aadd3f744c6a6", "name": "Commented-code block (5 lines) in next-app/lib/facturacion/services/email-delivery.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/facturacion/services/email-delivery.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-153ffc8683f6dbc6", "name": "Commented-code block (7 lines) in next-app/lib/facturacion/pdf/invoice-pdf.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in next-app/lib/facturacion/pdf/invoice-pdf.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-205e4fc5bb66f195", "name": "Commented-code block (9 lines) in next-app/lib/hooks/use-dictation.ts:5", "shortDescription": {"text": "Commented-code block (9 lines) in next-app/lib/hooks/use-dictation.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-b7074f1d5be9171d", "name": "Commented-code block (5 lines) in next-app/lib/services/voice-catalog.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/services/voice-catalog.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-fd29a0ea623483f2", "name": "Commented-code block (6 lines) in next-app/lib/services/insumo-preparations.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/lib/services/insumo-preparations.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-3239ca0dbecde79a", "name": "Commented-code block (5 lines) in next-app/lib/services/products.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in next-app/lib/services/products.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-65b9314e3cdb5e49", "name": "Commented-code block (7 lines) in next-app/lib/services/orders.ts:107", "shortDescription": {"text": "Commented-code block (7 lines) in next-app/lib/services/orders.ts:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f4e00f886504c63", "name": "Commented-code block (6 lines) in next-app/lib/services/stage-completions.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in next-app/lib/services/stage-completions.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-f808a4ef3e1071fb", "name": "14 env vars used in code but missing from .env.example", "shortDescription": {"text": "14 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CRON_SECRET`, `FE_ENCRYPTION_KEY`, `HACIENDA_API_URL_PROD`, `HACIENDA_API_URL_STAGING`, `HACIENDA_CLIENT_ID`, `HACIENDA_CLIENT_ID_PASSWORD`, `HACIENDA_ENVIRONMENT`, `HACIENDA_IDP_URL_PROD` + 6 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/22143"}, "properties": {"repository": "ventas4labs-cell/UniformLogistic", "repoUrl": "https://github.com/ventas4labs-cell/UniformLogistic", "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-afdcb62f94cd4f7a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/station/station-board.tsx:82"}, "properties": {"repobilityId": "4f45534f05a50408", "scanner": "scanner-primary", "fingerprint": "afdcb62f94cd4f7a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c21be93072943106", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/impresion-board.tsx:51"}, "properties": {"repobilityId": "9c8ef93a8935ed70", "scanner": "scanner-primary", "fingerprint": "c21be93072943106", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4392d2c13cc29e89", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/station-invoices-table.tsx:188"}, "properties": {"repobilityId": "7981c9b7063b8d4b", "scanner": "scanner-primary", "fingerprint": "4392d2c13cc29e89", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc39195b44621215", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/admin-stock-board.tsx:297"}, "properties": {"repobilityId": "340534b2d99e4f0d", "scanner": "scanner-primary", "fingerprint": "dc39195b44621215", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3dc511f71c425d31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/operator-board.tsx:151"}, "properties": {"repobilityId": "dcf2da2ab3dfeaf0", "scanner": "scanner-primary", "fingerprint": "3dc511f71c425d31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25a76e5371bf0e98", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/materials-manager.tsx:337"}, "properties": {"repobilityId": "26338ad6a61e39b1", "scanner": "scanner-primary", "fingerprint": "25a76e5371bf0e98", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dd859f006dbc4d7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/maquila-board.tsx:59"}, "properties": {"repobilityId": "a70d0115d7849fbb", "scanner": "scanner-primary", "fingerprint": "dd859f006dbc4d7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-19a288f4cd5747e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/voice-stock-dictate.tsx:651"}, "properties": {"repobilityId": "63cd9542a862f39f", "scanner": "scanner-primary", "fingerprint": "19a288f4cd5747e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03a2a311d5831dd2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/fe-config-form.tsx:332"}, "properties": {"repobilityId": "6bc9e4a9ded46ded", "scanner": "scanner-primary", "fingerprint": "03a2a311d5831dd2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab21482fd146fa92", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/order-edit-modal.tsx:282"}, "properties": {"repobilityId": "aa454c0199619292", "scanner": "scanner-primary", "fingerprint": "ab21482fd146fa92", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b9ff1d6afd680375", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/orders-table.tsx:613"}, "properties": {"repobilityId": "3ed39509b7b486ac", "scanner": "scanner-primary", "fingerprint": "b9ff1d6afd680375", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6242cdcaa12e5e88", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/products-manager.tsx:527"}, "properties": {"repobilityId": "144479b283fba94a", "scanner": "scanner-primary", "fingerprint": "6242cdcaa12e5e88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d8215452b3ae83e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/order-quick-create.tsx:312"}, "properties": {"repobilityId": "b0e169276a611801", "scanner": "scanner-primary", "fingerprint": "d8215452b3ae83e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53dff33699d6dc26", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/admin-cuentas-board.tsx:257"}, "properties": {"repobilityId": "5ad802675be979bb", "scanner": "scanner-primary", "fingerprint": "53dff33699d6dc26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd564252cd8c8bfc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/fe-documentos-board.tsx:509"}, "properties": {"repobilityId": "894881017ae724a0", "scanner": "scanner-primary", "fingerprint": "cd564252cd8c8bfc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd80101e64b2292c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/logos-manager.tsx:309"}, "properties": {"repobilityId": "a557a1896cb98cb9", "scanner": "scanner-primary", "fingerprint": "fd80101e64b2292c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7cf6d5edf761409d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/bulk-assign-bar.tsx:275"}, "properties": {"repobilityId": "61a72decf54bfcab", "scanner": "scanner-primary", "fingerprint": "7cf6d5edf761409d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04e62a0baab29345", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/company-products-panel.tsx:151"}, "properties": {"repobilityId": "f832a6a61a2a9fd3", "scanner": "scanner-primary", "fingerprint": "04e62a0baab29345", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28ad9aa32deac5fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/stage-control-panel.tsx:165"}, "properties": {"repobilityId": "64f6bb34d9d804e3", "scanner": "scanner-primary", "fingerprint": "28ad9aa32deac5fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc235bc50253245e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/corte-board.tsx:253"}, "properties": {"repobilityId": "12ba643aac058b94", "scanner": "scanner-primary", "fingerprint": "cc235bc50253245e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37e6097d1518dd3d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/empaque-board.tsx:80"}, "properties": {"repobilityId": "450afd9f9c1e20e5", "scanner": "scanner-primary", "fingerprint": "37e6097d1518dd3d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ea76730c2a7a39d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/components/admin/simple-stage-board.tsx:106"}, "properties": {"repobilityId": "abc5fc50d25e9e5a", "scanner": "scanner-primary", "fingerprint": "8ea76730c2a7a39d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70488b8dcbbe2b5e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(admin)/admin/home/page.tsx:176"}, "properties": {"repobilityId": "3dc7f3e9123cbba2", "scanner": "scanner-primary", "fingerprint": "70488b8dcbbe2b5e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e394bdd60cb090e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(admin)/admin/companies/[id]/page.tsx:61"}, "properties": {"repobilityId": "e87a5973e0798f70", "scanner": "scanner-primary", "fingerprint": "e394bdd60cb090e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7891e1ed2df38a62", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/catalog/company-picker.tsx:87"}, "properties": {"repobilityId": "320e42acfb56c414", "scanner": "scanner-primary", "fingerprint": "7891e1ed2df38a62", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25c07e36e4995f7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/catalog/catalog-grid.tsx:75"}, "properties": {"repobilityId": "99308036eafdb0ea", "scanner": "scanner-primary", "fingerprint": "25c07e36e4995f7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c1ebd394d95e420", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/stock/page.tsx:127"}, "properties": {"repobilityId": "216ced6d13b8b9fd", "scanner": "scanner-primary", "fingerprint": "0c1ebd394d95e420", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-799f954bdca443c8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/home/page.tsx:55"}, "properties": {"repobilityId": "74e5607d8fec1e1f", "scanner": "scanner-primary", "fingerprint": "799f954bdca443c8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-375ac7ccdb5310b3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/cuentas/page.tsx:299"}, "properties": {"repobilityId": "815a46f9b8e918f0", "scanner": "scanner-primary", "fingerprint": "375ac7ccdb5310b3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b45b7e7d92b1857e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 next-app/app/(app)/checkout/checkout-form.tsx:74"}, "properties": {"repobilityId": "463e14f8e951f9d8", "scanner": "scanner-primary", "fingerprint": "b45b7e7d92b1857e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e6723f4ffbcea5ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/api/hacienda-client.ts:178"}, "properties": {"repobilityId": "cd81db9a6eba0f6d", "scanner": "scanner-primary", "fingerprint": "e6723f4ffbcea5ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-107cfcff9f7fba79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/services/delivery-service.ts:7"}, "properties": {"repobilityId": "8448666c71aa786e", "scanner": "scanner-primary", "fingerprint": "107cfcff9f7fba79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6305f31825981883", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 next-app/lib/facturacion/services/invoice-service.ts:199"}, "properties": {"repobilityId": "86e48901372d6210", "scanner": "scanner-primary", "fingerprint": "6305f31825981883", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-9393bc49dcf30167", "level": "note", "message": {"text": "Very large file: next-app/components/admin/orders-table.tsx (1265 lines)"}, "properties": {"repobilityId": "c93ec07659484c77", "scanner": "scanner-primary", "fingerprint": "9393bc49dcf30167", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-521b930c409d0139", "level": "note", "message": {"text": "Very large file: next-app/components/admin/products-manager.tsx (1272 lines)"}, "properties": {"repobilityId": "23045f015fa63d3d", "scanner": "scanner-primary", "fingerprint": "521b930c409d0139", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "7c29aadc0a3f3b26", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "4863e2a76bcf3eea", "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": "74fdaded05aa9d26", "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": "ed2ff0d063106fe8", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "70fb8dcdf1d60623", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "831b903937bfe659", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "27e0eb525cf66c43", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "26a2675544de4a62", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-7bf6e1739ac50736", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/next.config.ts:18"}, "properties": {"repobilityId": "ab42c52c4bc4e4c6", "scanner": "scanner-primary", "fingerprint": "7bf6e1739ac50736", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-061080015c656efe", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/components/size-selector.tsx:14"}, "properties": {"repobilityId": "3a5ac809d4e41799", "scanner": "scanner-primary", "fingerprint": "061080015c656efe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffba5a04de3bcc23", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/components/admin/admin-modules.tsx:21"}, "properties": {"repobilityId": "412aec9ebdcb5429", "scanner": "scanner-primary", "fingerprint": "ffba5a04de3bcc23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4549c637e25013eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/components/admin/admin-menu.tsx:14"}, "properties": {"repobilityId": "d4050a63d22ed07e", "scanner": "scanner-primary", "fingerprint": "4549c637e25013eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eaeebbe7993fbab2", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/components/admin/admin-fast-actions.tsx:10"}, "properties": {"repobilityId": "74bf68e1ee774445", "scanner": "scanner-primary", "fingerprint": "eaeebbe7993fbab2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef872c8bec8b2ed1", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/components/admin/order-logos-modal.tsx:8"}, "properties": {"repobilityId": "e8767b80c77ae171", "scanner": "scanner-primary", "fingerprint": "ef872c8bec8b2ed1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92c0ebad508f8c79", "level": "none", "message": {"text": "Commented-code block (10 lines) in next-app/components/admin/order-edit-modal.tsx:62"}, "properties": {"repobilityId": "c0ce44e043ee4426", "scanner": "scanner-primary", "fingerprint": "92c0ebad508f8c79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a84ae3af2d321340", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/components/admin/admin-actions.tsx:21"}, "properties": {"repobilityId": "f1833fb115f73eee", "scanner": "scanner-primary", "fingerprint": "a84ae3af2d321340", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed0b3563de4bcd6e", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/components/admin/orders-table.tsx:54"}, "properties": {"repobilityId": "49300dcdb6f0c75f", "scanner": "scanner-primary", "fingerprint": "ed0b3563de4bcd6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14274df86c9c0d7d", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/components/admin/products-manager.tsx:62"}, "properties": {"repobilityId": "9987034d0566ca66", "scanner": "scanner-primary", "fingerprint": "14274df86c9c0d7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-002b2a8db915ef93", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/components/admin/station-users-manager.tsx:28"}, "properties": {"repobilityId": "edb14097acc59e09", "scanner": "scanner-primary", "fingerprint": "002b2a8db915ef93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9aca18668cfa217d", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/components/admin/admin-shell.tsx:11"}, "properties": {"repobilityId": "a8689ed5aef30ecf", "scanner": "scanner-primary", "fingerprint": "9aca18668cfa217d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e30d6df655494657", "level": "none", "message": {"text": "Commented-code block (7 lines) in next-app/components/admin/company-products-panel.tsx:33"}, "properties": {"repobilityId": "a7564fe7f0ba0dd1", "scanner": "scanner-primary", "fingerprint": "e30d6df655494657", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3287436336c86f26", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/components/admin/stage-control-panel.tsx:33"}, "properties": {"repobilityId": "221ce66fd56f671d", "scanner": "scanner-primary", "fingerprint": "3287436336c86f26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aaf15d344598445", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/components/admin/simple-stage-board.tsx:23"}, "properties": {"repobilityId": "1bb60af9afa86ba0", "scanner": "scanner-primary", "fingerprint": "8aaf15d344598445", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e0c9d2981e56aa0", "level": "none", "message": {"text": "Commented-code block (8 lines) in next-app/components/landing/landing-page.tsx:20"}, "properties": {"repobilityId": "bd76a905009ab519", "scanner": "scanner-primary", "fingerprint": "8e0c9d2981e56aa0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e76959b35e7db1b0", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/app/page.tsx:1"}, "properties": {"repobilityId": "e61138c6987f927e", "scanner": "scanner-primary", "fingerprint": "e76959b35e7db1b0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3ebb5d3d658eb0f", "level": "none", "message": {"text": "Commented-code block (7 lines) in next-app/app/api/admin/facturacion/recibidas/route.ts:1"}, "properties": {"repobilityId": "f00b88456acb504f", "scanner": "scanner-primary", "fingerprint": "f3ebb5d3d658eb0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-467ba7db09f989bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/facturacion/recibidas/[id]/respond/route.ts:1"}, "properties": {"repobilityId": "1624e2ef461012b9", "scanner": "scanner-primary", "fingerprint": "467ba7db09f989bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9e24f4ac3cd9f4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/facturacion/pdf/[id]/route.ts:1"}, "properties": {"repobilityId": "af11e540a1e59063", "scanner": "scanner-primary", "fingerprint": "e9e24f4ac3cd9f4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3bf3744f3080432", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-parse/route.ts:1"}, "properties": {"repobilityId": "2c3d09f47763e5e2", "scanner": "scanner-primary", "fingerprint": "f3bf3744f3080432", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84b389f597b3f038", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-apply/route.ts:1"}, "properties": {"repobilityId": "766ba792e244ef02", "scanner": "scanner-primary", "fingerprint": "84b389f597b3f038", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8963def13f069bb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/app/api/admin/stock/voice-transcribe/route.ts:1"}, "properties": {"repobilityId": "a14e13a60f15f0c9", "scanner": "scanner-primary", "fingerprint": "8963def13f069bb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca6335601a18c219", "level": "none", "message": {"text": "Commented-code block (11 lines) in next-app/app/s/[token]/route.ts:1"}, "properties": {"repobilityId": "6ecad4648e08c5f1", "scanner": "scanner-primary", "fingerprint": "ca6335601a18c219", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c47852810b5f8743", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/app/(admin)/admin/_stage-actions.ts:147"}, "properties": {"repobilityId": "78f90df493222415", "scanner": "scanner-primary", "fingerprint": "c47852810b5f8743", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4ff192477c63210", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/app/(admin)/admin/orders/factura-actions.ts:75"}, "properties": {"repobilityId": "4fccea026d1e0838", "scanner": "scanner-primary", "fingerprint": "d4ff192477c63210", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-926c203da4e4f778", "level": "none", "message": {"text": "Commented-code block (11 lines) in next-app/app/o/[token]/route.ts:1"}, "properties": {"repobilityId": "08e386f16d112f31", "scanner": "scanner-primary", "fingerprint": "926c203da4e4f778", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db8a217afd8bf217", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 next-app/app/(app)/cart/page.tsx:16"}, "properties": {"repobilityId": "5ab30ac3d35b06ee", "scanner": "scanner-primary", "fingerprint": "db8a217afd8bf217", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6ceb1243b29a1196", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/admin-acting-company.ts:3"}, "properties": {"repobilityId": "f2e18aa6199d9272", "scanner": "scanner-primary", "fingerprint": "6ceb1243b29a1196", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2997b291fc2873fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/pdf-service.ts:299"}, "properties": {"repobilityId": "271426f70dcfb406", "scanner": "scanner-primary", "fingerprint": "2997b291fc2873fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0918b164f2afa65c", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/costa-rica-locations.ts:1"}, "properties": {"repobilityId": "0639d284dbf881ef", "scanner": "scanner-primary", "fingerprint": "0918b164f2afa65c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7c5535c751ff929", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/admin-fast-actions.ts:1"}, "properties": {"repobilityId": "b28a866d6564b1e0", "scanner": "scanner-primary", "fingerprint": "b7c5535c751ff929", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6764ed36d0237da2", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/facturacion/crypto/xades-signer.ts:90"}, "properties": {"repobilityId": "a5411fb5395623a8", "scanner": "scanner-primary", "fingerprint": "6764ed36d0237da2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73dce822dd8b5c07", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 next-app/lib/facturacion/api/hacienda-client.ts:169"}, "properties": {"repobilityId": "f421664f4e24c53a", "scanner": "scanner-primary", "fingerprint": "73dce822dd8b5c07", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-decd3bbe5b7d1d8a", "level": "none", "message": {"text": "Commented-code block (12 lines) in next-app/lib/facturacion/xml/templates/mensaje-receptor-10.ts:6"}, "properties": {"repobilityId": "0e240bb4f603998e", "scanner": "scanner-primary", "fingerprint": "decd3bbe5b7d1d8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ade96797f2f3ffa4", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/facturacion/services/polling-service.ts:1"}, "properties": {"repobilityId": "e82c5a3f73a45c13", "scanner": "scanner-primary", "fingerprint": "ade96797f2f3ffa4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b710b90fbd3a774", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/lib/facturacion/services/xml-parser-service.ts:1"}, "properties": {"repobilityId": "6be8b118216a2d81", "scanner": "scanner-primary", "fingerprint": "9b710b90fbd3a774", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c08aadd3f744c6a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/facturacion/services/email-delivery.ts:1"}, "properties": {"repobilityId": "770043757c3fe61a", "scanner": "scanner-primary", "fingerprint": "c08aadd3f744c6a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-153ffc8683f6dbc6", "level": "none", "message": {"text": "Commented-code block (7 lines) in next-app/lib/facturacion/pdf/invoice-pdf.ts:6"}, "properties": {"repobilityId": "e4f86c291c476702", "scanner": "scanner-primary", "fingerprint": "153ffc8683f6dbc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-205e4fc5bb66f195", "level": "none", "message": {"text": "Commented-code block (9 lines) in next-app/lib/hooks/use-dictation.ts:5"}, "properties": {"repobilityId": "337ebb5af940a523", "scanner": "scanner-primary", "fingerprint": "205e4fc5bb66f195", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7074f1d5be9171d", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/services/voice-catalog.ts:1"}, "properties": {"repobilityId": "9ca897d7bb5be902", "scanner": "scanner-primary", "fingerprint": "b7074f1d5be9171d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd29a0ea623483f2", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/lib/services/insumo-preparations.ts:3"}, "properties": {"repobilityId": "5086921638ca2d00", "scanner": "scanner-primary", "fingerprint": "fd29a0ea623483f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3239ca0dbecde79a", "level": "none", "message": {"text": "Commented-code block (5 lines) in next-app/lib/services/products.ts:11"}, "properties": {"repobilityId": "c569aa58853a9cb7", "scanner": "scanner-primary", "fingerprint": "3239ca0dbecde79a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65b9314e3cdb5e49", "level": "none", "message": {"text": "Commented-code block (7 lines) in next-app/lib/services/orders.ts:107"}, "properties": {"repobilityId": "4f7d62c0ecb757a1", "scanner": "scanner-primary", "fingerprint": "65b9314e3cdb5e49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f4e00f886504c63", "level": "none", "message": {"text": "Commented-code block (6 lines) in next-app/lib/services/stage-completions.ts:3"}, "properties": {"repobilityId": "3f36f427b25ab0af", "scanner": "scanner-primary", "fingerprint": "6f4e00f886504c63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f808a4ef3e1071fb", "level": "note", "message": {"text": "14 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "ce6b2ec4be4ec75a", "scanner": "scanner-primary", "fingerprint": "f808a4ef3e1071fb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}