{"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-4586ca76c74ea9e0", "name": "TODO/FIXME marker in shipping code \u2014 packages/api-routes/src/openapi.ts:332", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/api-routes/src/openapi.ts:332"}, "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-ec763befdce152ab", "name": "TODO/FIXME marker in shipping code \u2014 packages/api-routes/test/no-new-loose-routes.test.ts:59", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/api-routes/test/no-new-loose-routes.test.ts:59"}, "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-fc2fd5d9b0b17036", "name": "Stray `console.log` in TS/JS \u2014 packages/api-client-generated/codegen.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/api-client-generated/codegen.ts:67"}, "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-92048e470965878e", "name": "TODO/FIXME marker in shipping code \u2014 packages/api-client-generated/src/generated/client/client.gen.ts:207", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/api-client-generated/src/generated/client/client.gen.ts:207"}, "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-4d880de88533fe61", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/build-web.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/build-web.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5da0e6402e7e88d3", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/scripts/copy-agent-assets.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/scripts/copy-agent-assets.ts:47"}, "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-b4d28c4b3bab6c32", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/cli.ts:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/cli.ts:81"}, "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-abfa9820608892e0", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/cli-dispatch.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/cli-dispatch.ts:75"}, "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-b74e522f8b55d70d", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/serve.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/serve.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-981ad1b592708ef5", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/notify.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/notify.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ef8962ef4470a876", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/project.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/project.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30c36068e1d533b8", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-transcript.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-transcript.ts:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4494b2a97cff044f", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/analytics.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/analytics.ts:51"}, "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-ee068821ade0470c", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/skills.ts:411", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/skills.ts:411"}, "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-66a5dda26926c377", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/gbp.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/gbp.ts:35"}, "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-a93d2e5871fe28fe", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/cdp.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/cdp.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d3bab5ad873c2b6d", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/bootstrap.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/bootstrap.ts:87"}, "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-2500c9624811a8db", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/doctor.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/doctor.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6e5c0720ee367158", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/backfill.ts:204", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/backfill.ts:204"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d14f0094537bb266", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/traffic.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/traffic.ts:91"}, "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-47dee1763f7142d5", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/query.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/query.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bab276dc17afadb4", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-providers.ts:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-providers.ts:24"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d30aeba6cd78973", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/mcp.ts:235", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/mcp.ts:235"}, "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-3043cad078a46382", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-memory.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-memory.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46e3d9e9fc6feaf0", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/status.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/status.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0aaa8116755a042c", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/health-cmd.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/health-cmd.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4058d6f3735e57a", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/run.ts:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/run.ts:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dbfc25d21c1f4c04", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/search.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/search.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43cbdd6b309ec72b", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/discover.ts:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/discover.ts:111"}, "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-d0dbe21b059e5e28", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/overview.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/overview.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b86d8d1e559a504", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/wordpress.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/wordpress.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-f25c41710b4c2ab3", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/apply.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/apply.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-cbfaf8c6e7565899", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-ask.ts:143", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-ask.ts:143"}, "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-848e9672b57a75d2", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/keys.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/keys.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da9ca7f46fa30537", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea4dac0f91484176", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/evidence.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/evidence.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-806139199a996b1c", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/insights.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/insights.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fbb7709029d32c31", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/get.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/get.ts:71"}, "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-563f957065ccd755", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/history.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/history.ts:16"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da22148a510eb4b1", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/competitor.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/competitor.ts:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-239ef0361377d742", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/ga.ts:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/ga.ts:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-44f4e94f2645cff6", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/export-cmd.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/export-cmd.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5ae0fc643ac38c7", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/snapshot.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/snapshot.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2adfffa381303e2c", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/telemetry.ts:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/telemetry.ts:22"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd152312a116de58", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/ads.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/ads.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2f493179375ac79a", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/keyword.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/keyword.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-222e22402a730021", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/schedule.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/schedule.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-99a651f27465f1aa", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/settings.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/settings.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ade30489df41c3f", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/backlinks.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/backlinks.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b679f8917bf50450", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/report.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/report.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5008e8c61c1179a5", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/init.ts:83", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/init.ts:83"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d79bd23b5f36807e", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/technical-aeo.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/technical-aeo.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3023334450e0e949", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/citations.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/citations.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09718e79a51d4ac7", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/content.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/content.ts:26"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb299d985e79c8fa", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/daemon.ts:116", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/daemon.ts:116"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d44bca29db88ee0", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/bing.ts:81", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/bing.ts:81"}, "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-ff6458881ac7f60d", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/sources.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/sources.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05b7ba57ee61a29a", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/google.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/google.ts:79"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20b805f4940be2ea", "name": "Stray `console.log` in TS/JS \u2014 packages/canonry/test/sources-command.test.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/test/sources-command.test.ts:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6835be50555cdd9b", "name": "Stray `console.log` in TS/JS \u2014 scripts/sov-rework-analysis.ts:621", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sov-rework-analysis.ts:621"}, "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-f881260d3cc529d1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/App.tsx:764", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/App.tsx:764"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a7c5aa49136eb972", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/SearchConsoleSummaryCard.tsx:49", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/SearchConsoleSummaryCard.tsx:49"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-22e56333658e821c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/TechnicalAeoSection.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/TechnicalAeoSection.tsx:180"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d97cd93ee350d094", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/ActivitySection.tsx:1293", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/ActivitySection.tsx:1293"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e13f34815b04913e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/GscSection.tsx:944", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/GscSection.tsx:944"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3340186f54b016f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/layout/EvidenceDetailModal.tsx:393", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/layout/EvidenceDetailModal.tsx:393"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da4d98c0d3a3b7b7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/TrafficSourceDetailPage.tsx:893", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/TrafficSourceDetailPage.tsx:893"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b70400bda8b7102a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/ProjectPage.tsx:520", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/ProjectPage.tsx:520"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-830940026c9c2a38", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/lib/highlight.ts:28", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/lib/highlight.ts:28"}, "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-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9ba8282f8906e5a4", "name": "Docker base image is tag-pinned but not digest-pinned: public.ecr.aws/docker/library/node:20-bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: public.ecr.aws/docker/library/node:20-bookworm-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e98333803e93abea", "name": "Insecure pattern 'node_child_process' in packages/integration-commoncrawl/src/plugin-installer.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/integration-commoncrawl/src/plugin-installer.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a81b144fc97e2499", "name": "Insecure pattern 'node_child_process' in packages/canonry/build-web.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/canonry/build-web.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b4e04aa3fa57ef5b", "name": "Insecure pattern 'node_child_process' in packages/canonry/src/commands/daemon.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/canonry/src/commands/daemon.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-daac6725d5a03e2a", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a53bf972e19b52fd", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "peter-evans/repository-dispatch@v3 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-7ffa33751be3d771", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2ffdda808c2036c", "name": "Very large file: packages/api-routes/src/report-renderer.ts (2648 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/src/report-renderer.ts (2648 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-f88ad125eb437396", "name": "Very large file: packages/api-routes/src/traffic.ts (2532 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/src/traffic.ts (2532 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-43446bec1e15bf14", "name": "Very large file: packages/api-routes/src/openapi.ts (4168 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/src/openapi.ts (4168 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-bdb350c8ddbfedc3", "name": "Very large file: packages/api-routes/src/ga.ts (1336 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/src/ga.ts (1336 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-e7bd04c26746d88f", "name": "Very large file: packages/api-routes/src/report.ts (2190 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/src/report.ts (2190 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-710a11d8f1a588b9", "name": "Very large file: packages/api-routes/src/google.ts (1925 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/src/google.ts (1925 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2f4e59dcc0d2640", "name": "Very large file: packages/api-routes/test/report-renderer.test.ts (1294 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/test/report-renderer.test.ts (1294 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-3380e458dc084df1", "name": "Very large file: packages/api-routes/test/content.test.ts (1584 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/test/content.test.ts (1584 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-4dcf2c37f961a406", "name": "Very large file: packages/api-routes/test/analytics.test.ts (1126 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/test/analytics.test.ts (1126 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-2cf22a28e63222a9", "name": "Very large file: packages/api-routes/test/traffic.test.ts (3904 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/test/traffic.test.ts (3904 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-b41947b6eb73e29c", "name": "Very large file: packages/api-routes/test/discovery.test.ts (1737 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/test/discovery.test.ts (1737 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-096e2e027a5d6305", "name": "Very large file: packages/api-routes/test/report.test.ts (1783 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/test/report.test.ts (1783 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-e1c367023df12c31", "name": "Very large file: packages/api-routes/test/google.test.ts (1519 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/test/google.test.ts (1519 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-521d71f6fcf8d543", "name": "Very large file: packages/api-routes/test/ga.test.ts (1998 lines)", "shortDescription": {"text": "Very large file: packages/api-routes/test/ga.test.ts (1998 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-3d65c1b6fd3905cb", "name": "Very large file: packages/db/src/schema.ts (1216 lines)", "shortDescription": {"text": "Very large file: packages/db/src/schema.ts (1216 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-0ec3b8a159b94b8b", "name": "Very large file: packages/db/src/migrate.ts (2031 lines)", "shortDescription": {"text": "Very large file: packages/db/src/migrate.ts (2031 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-2f9953fa9a586973", "name": "Very large file: packages/api-client-generated/src/generated/types.gen.ts (9637 lines)", "shortDescription": {"text": "Very large file: packages/api-client-generated/src/generated/types.gen.ts (9637 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-63e736a261e127b4", "name": "Very large file: packages/api-client-generated/src/generated/sdk.gen.ts (3705 lines)", "shortDescription": {"text": "Very large file: packages/api-client-generated/src/generated/sdk.gen.ts (3705 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-9642af3d3acd8df4", "name": "Very large file: packages/api-client-generated/src/generated/@tanstack/react-query.gen.ts (4163 lines)", "shortDescription": {"text": "Very large file: packages/api-client-generated/src/generated/@tanstack/react-query.gen.ts (4163 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-9b5ed2d6a74894d3", "name": "Very large file: packages/canonry/src/server.ts (1919 lines)", "shortDescription": {"text": "Very large file: packages/canonry/src/server.ts (1919 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-8f8f2fb06ebd2ce2", "name": "Very large file: packages/canonry/src/client.ts (2361 lines)", "shortDescription": {"text": "Very large file: packages/canonry/src/client.ts (2361 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca8528d4484afa1a", "name": "Very large file: packages/canonry/src/commands/backfill.ts (1451 lines)", "shortDescription": {"text": "Very large file: packages/canonry/src/commands/backfill.ts (1451 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-e1a56650b697eb66", "name": "Very large file: packages/canonry/src/mcp/tool-registry.ts (1770 lines)", "shortDescription": {"text": "Very large file: packages/canonry/src/mcp/tool-registry.ts (1770 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-29446589e6ab5151", "name": "Very large file: apps/web/src/api.ts (1923 lines)", "shortDescription": {"text": "Very large file: apps/web/src/api.ts (1923 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-bef5cb91135eac83", "name": "Very large file: apps/web/src/components/project/ActivitySection.tsx (1603 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/project/ActivitySection.tsx (1603 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-b76dd9c27a0394d0", "name": "Very large file: apps/web/src/components/project/GscSection.tsx (1804 lines)", "shortDescription": {"text": "Very large file: apps/web/src/components/project/GscSection.tsx (1804 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-0270d92589380669", "name": "Very large file: apps/web/src/pages/ProjectPage.tsx (2365 lines)", "shortDescription": {"text": "Very large file: apps/web/src/pages/ProjectPage.tsx (2365 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-45901f0f3ef87861", "name": "44 TODO/FIXME markers", "shortDescription": {"text": "44 TODO/FIXME markers"}, "fullDescription": {"text": "High count of TODO/FIXME/HACK markers \u2014 track them as issues so they're not forgotten."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6b08387edf60974", "name": "Node manifest has dependencies but no lockfile: packages/intelligence/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/intelligence/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-60793c8a6f50562a", "name": "Node manifest has dependencies but no lockfile: packages/integration-wordpress/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-wordpress/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-43863480c15a78ef", "name": "Node manifest has dependencies but no lockfile: packages/provider-claude/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/provider-claude/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d100f5ee248fd3e6", "name": "Node manifest has dependencies but no lockfile: packages/provider-gemini/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/provider-gemini/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f85d8f0719e22fa8", "name": "Node manifest has dependencies but no lockfile: packages/contracts/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/contracts/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d391398ea1645f4e", "name": "Node manifest has dependencies but no lockfile: packages/integration-google-analytics/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-google-analytics/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f22cd183bd9ac19", "name": "Node manifest has dependencies but no lockfile: packages/integration-wordpress-traffic/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-wordpress-traffic/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-13230a8c055ee32a", "name": "Node manifest has dependencies but no lockfile: packages/provider-openai/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/provider-openai/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1e67ce79e7c1bbfc", "name": "Node manifest has dependencies but no lockfile: packages/api-routes/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/api-routes/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cdf69f3575947d0d", "name": "Node manifest has dependencies but no lockfile: packages/integration-vercel/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-vercel/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83fe48fce191855a", "name": "Node manifest has dependencies but no lockfile: packages/integration-cloud-run/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-cloud-run/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d593114334d4cf6e", "name": "Node manifest has dependencies but no lockfile: packages/integration-google-business-profile/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-google-business-profile/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b16ae2bd0fca524", "name": "Node manifest has dependencies but no lockfile: packages/db/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/db/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a4b3b8828130b5b0", "name": "Node manifest has dependencies but no lockfile: packages/provider-perplexity/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/provider-perplexity/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7314bba6aab6e50", "name": "Node manifest has dependencies but no lockfile: packages/integration-google-places/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-google-places/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18e0e7cc86bc6af1", "name": "Node manifest has dependencies but no lockfile: packages/api-client-generated/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/api-client-generated/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b13c3bb4fd965d8", "name": "Node manifest has dependencies but no lockfile: packages/integration-commoncrawl/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-commoncrawl/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1172583b2494bda5", "name": "Node manifest has dependencies but no lockfile: packages/canonry/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/canonry/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1bc1eef9e8152f67", "name": "Node manifest has dependencies but no lockfile: packages/provider-local/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/provider-local/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eddecaa766cadff2", "name": "Node manifest has dependencies but no lockfile: packages/config/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/config/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-16e38e5baa620725", "name": "Node manifest has dependencies but no lockfile: packages/provider-cdp/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/provider-cdp/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de438a4383e7e6fa", "name": "Node manifest has dependencies but no lockfile: packages/integration-traffic/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/integration-traffic/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d1ed11de463ffed", "name": "Node manifest has dependencies but no lockfile: apps/worker/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/worker/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b06b8d86f24c77f9", "name": "Node manifest has dependencies but no lockfile: apps/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 1365 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 175 placeholder/mock markers across 30 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-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 lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2679282aa1c484b5", "name": "Agent authority lacks a verifier contract: AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: AGENTS.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-6cbc9b9db95d122b", "name": "Agent authority lacks a verifier contract: packages/intelligence/AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: packages/intelligence/AGENTS.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-f3e5585f72100b03", "name": "Agent authority lacks a verifier contract: packages/wordpress-traffic-logger-plugin/AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: packages/wordpress-traffic-logger-plugin/AGENTS.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-09d6c0391ad5163c", "name": "Agent authority lacks a verifier contract: packages/integration-wordpress-traffic/AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: packages/integration-wordpress-traffic/AGENTS.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-0601f760dc0be0a1", "name": "Agent authority lacks a verifier contract: packages/db/AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: packages/db/AGENTS.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-0cfc7695ec1c39c8", "name": "Agent authority lacks a verifier contract: packages/integration-google-places/AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: packages/integration-google-places/AGENTS.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-c62727de2854cb37", "name": "Agent instruction contains unpinned remote install: packages/canonry/AGENTS.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: packages/canonry/AGENTS.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea368cfd9d377cad", "name": "Agent authority lacks a verifier contract: apps/api/AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: apps/api/AGENTS.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-a0ac80da0a3bd9c6", "name": "Agent authority lacks a verifier contract: skills/canonry/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: skills/canonry/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-215581e876c2abf5", "name": "Agent instruction contains unpinned remote install: skills/canonry/SKILL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: skills/canonry/SKILL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7cfde8231c5aee3", "name": "Commented-code block (8 lines) in eslint.config.js:51", "shortDescription": {"text": "Commented-code block (8 lines) in eslint.config.js: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-9957a334663a073f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 eslint.config.js:225", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 eslint.config.js:225"}, "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-a68de86db3ec3a8f", "name": "Commented-code block (10 lines) in packages/intelligence/src/content-targets.ts:402", "shortDescription": {"text": "Commented-code block (10 lines) in packages/intelligence/src/content-targets.ts:402"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea05eb32841c23ca", "name": "Commented-code block (5 lines) in packages/intelligence/src/gbp-analyzer.ts:109", "shortDescription": {"text": "Commented-code block (5 lines) in packages/intelligence/src/gbp-analyzer.ts:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a7fc763dba7ac1f", "name": "Commented-code block (7 lines) in packages/intelligence/src/causes.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in packages/intelligence/src/causes.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-510277dc4b9a93e6", "name": "Commented-code block (7 lines) in packages/intelligence/test/regressions.test.ts:199", "shortDescription": {"text": "Commented-code block (7 lines) in packages/intelligence/test/regressions.test.ts:199"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b0cd5cc79d6873d", "name": "Commented-code block (6 lines) in packages/intelligence/test/causes.test.ts:87", "shortDescription": {"text": "Commented-code block (6 lines) in packages/intelligence/test/causes.test.ts:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9ae778f7f25b714c", "name": "Commented-code block (7 lines) in packages/intelligence/test/content-classifier.test.ts:135", "shortDescription": {"text": "Commented-code block (7 lines) in packages/intelligence/test/content-classifier.test.ts:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-afd8268220dbf897", "name": "Commented-code block (6 lines) in packages/intelligence/test/visibility-score.test.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in packages/intelligence/test/visibility-score.test.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-de7837afc35074a9", "name": "Commented-code block (6 lines) in packages/intelligence/test/insight-grouping.test.ts:80", "shortDescription": {"text": "Commented-code block (6 lines) in packages/intelligence/test/insight-grouping.test.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-b0365c402c819b08", "name": "Commented-code block (5 lines) in packages/integration-bing/test/bing-client.test.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-bing/test/bing-client.test.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-2ba06a8011cdbb9e", "name": "Commented-code block (5 lines) in packages/contracts/src/source-categories.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in packages/contracts/src/source-categories.ts:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e341c6cfabe24ba9", "name": "Commented-code block (6 lines) in packages/contracts/src/project.ts:99", "shortDescription": {"text": "Commented-code block (6 lines) in packages/contracts/src/project.ts:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1d45dd12166a6a5d", "name": "Commented-code block (5 lines) in packages/contracts/src/gbp.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in packages/contracts/src/gbp.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-fd12e9a6a5b756de", "name": "Commented-code block (5 lines) in packages/contracts/src/ads.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/contracts/src/ads.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-0181c8d5d7235f6d", "name": "Commented-code block (5 lines) in packages/contracts/src/answer-visibility.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in packages/contracts/src/answer-visibility.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-9efa413bc4096700", "name": "Commented-code block (5 lines) in packages/contracts/src/composites.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in packages/contracts/src/composites.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa7c7558f395e9ae", "name": "Commented-code block (5 lines) in packages/contracts/src/money.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/contracts/src/money.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-6cfd270d54254a31", "name": "Commented-code block (5 lines) in packages/contracts/src/content.ts:70", "shortDescription": {"text": "Commented-code block (5 lines) in packages/contracts/src/content.ts:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b7d604860a8756b", "name": "Commented-code block (5 lines) in packages/contracts/src/google.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in packages/contracts/src/google.ts: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-ccb4c207e42dfc58", "name": "Commented-code block (7 lines) in packages/contracts/test/embeddings.test.ts:131", "shortDescription": {"text": "Commented-code block (7 lines) in packages/contracts/test/embeddings.test.ts:131"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53ee4b0b773e34df", "name": "Commented-code block (6 lines) in packages/contracts/test/index.test.ts:1072", "shortDescription": {"text": "Commented-code block (6 lines) in packages/contracts/test/index.test.ts:1072"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5598361d17e7fcf1", "name": "Legacy-named symbol `sess_legacy` in packages/contracts/test/discovery.test.ts:357", "shortDescription": {"text": "Legacy-named symbol `sess_legacy` in packages/contracts/test/discovery.test.ts:357"}, "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-0631669bfa875de0", "name": "Commented-code block (5 lines) in packages/integration-google-analytics/src/constants.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-google-analytics/src/constants.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c19d17c25080b624", "name": "Commented-code block (5 lines) in packages/integration-google-analytics/src/ga4-client.ts:367", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-google-analytics/src/ga4-client.ts:367"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24375febc278a6d7", "name": "Commented-code block (5 lines) in packages/integration-wordpress-traffic/src/client.ts:108", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-wordpress-traffic/src/client.ts:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac7e57c97822b08f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/integration-wordpress-traffic/src/types.ts:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/integration-wordpress-traffic/src/types.ts:70"}, "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-1bb6f306df1d4a27", "name": "Commented-code block (8 lines) in packages/api-routes/src/index.ts:269", "shortDescription": {"text": "Commented-code block (8 lines) in packages/api-routes/src/index.ts:269"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-128fb360fcbb08ea", "name": "Commented-code block (5 lines) in packages/api-routes/src/analytics.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/analytics.ts:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d181ee1f964b32d1", "name": "Commented-code block (6 lines) in packages/api-routes/src/report-renderer.ts:2609", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/report-renderer.ts:2609"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bc2130732e5cc80", "name": "Commented-code block (7 lines) in packages/api-routes/src/traffic.ts:256", "shortDescription": {"text": "Commented-code block (7 lines) in packages/api-routes/src/traffic.ts:256"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3b893905462cbd9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api-routes/src/traffic.ts:654", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api-routes/src/traffic.ts:654"}, "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-e0623fb870646364", "name": "Commented-code block (7 lines) in packages/api-routes/src/intelligence.ts:210", "shortDescription": {"text": "Commented-code block (7 lines) in packages/api-routes/src/intelligence.ts:210"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8102b992b25ceb7", "name": "Commented-code block (6 lines) in packages/api-routes/src/db-derived-dtos.ts:64", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/db-derived-dtos.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5310a1057b6f310", "name": "Commented-code block (5 lines) in packages/api-routes/src/openapi.ts:4116", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/openapi.ts:4116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61d63e50f26bd747", "name": "Commented-code block (6 lines) in packages/api-routes/src/content-data.ts:443", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/content-data.ts:443"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3ad90aa2be452db", "name": "Commented-code block (6 lines) in packages/api-routes/src/auth.ts:38", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/auth.ts:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71dc92b5d55f8915", "name": "Commented-code block (6 lines) in packages/api-routes/src/wordpress.ts:106", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/wordpress.ts:106"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f410374f68f119fc", "name": "Commented-code block (5 lines) in packages/api-routes/src/apply.ts:213", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/apply.ts:213"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-378d71487e00284b", "name": "Commented-code block (9 lines) in packages/api-routes/src/history.ts:153", "shortDescription": {"text": "Commented-code block (9 lines) in packages/api-routes/src/history.ts:153"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2cb8aaf51c5926b8", "name": "Commented-code block (5 lines) in packages/api-routes/src/ga.ts:89", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/ga.ts:89"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-072b8ca57672bb37", "name": "Commented-code block (8 lines) in packages/api-routes/src/queries.ts:80", "shortDescription": {"text": "Commented-code block (8 lines) in packages/api-routes/src/queries.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-17904faeb11b1cd0", "name": "Commented-code block (6 lines) in packages/api-routes/src/report.ts:114", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/report.ts:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-014446da981bd41f", "name": "Commented-code block (5 lines) in packages/api-routes/src/composites.ts:74", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/composites.ts:74"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9b2a53d26d36f02", "name": "Commented-code block (7 lines) in packages/api-routes/src/backlinks-filter.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in packages/api-routes/src/backlinks-filter.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-fe913adaba9fd6fd", "name": "Commented-code block (6 lines) in packages/api-routes/src/runs.ts:104", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/runs.ts:104"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b40c5a3423e87978", "name": "Commented-code block (5 lines) in packages/api-routes/src/citations.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/citations.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44d6bdd0b8a089d9", "name": "Commented-code block (5 lines) in packages/api-routes/src/competitors.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/competitors.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-ea9255e44a8e62d1", "name": "Commented-code block (5 lines) in packages/api-routes/src/content.ts:359", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/content.ts:359"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-214e4dd923ffc5ec", "name": "Commented-code block (6 lines) in packages/api-routes/src/bing.ts:497", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/bing.ts:497"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d2eaf7673073f65f", "name": "Commented-code block (6 lines) in packages/api-routes/src/google.ts:372", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/src/google.ts:372"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52744dd8ec00c4cf", "name": "Commented-code block (5 lines) in packages/api-routes/src/discovery/orchestrate.ts:353", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/discovery/orchestrate.ts:353"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87026cff57f2b9a2", "name": "Commented-code block (5 lines) in packages/api-routes/src/discovery/routes.ts:335", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/src/discovery/routes.ts:335"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b05fde471ee4cb3b", "name": "Commented-code block (8 lines) in packages/api-routes/test/google-properties-error.test.ts:128", "shortDescription": {"text": "Commented-code block (8 lines) in packages/api-routes/test/google-properties-error.test.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13cb39f8aa64c99c", "name": "Commented-code block (5 lines) in packages/api-routes/test/openapi-contract.test.ts:162", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/test/openapi-contract.test.ts:162"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e75ecc23de8a5e58", "name": "Commented-code block (6 lines) in packages/api-routes/test/report-renderer.test.ts:456", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/test/report-renderer.test.ts:456"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad176d219ae712ef", "name": "Commented-code block (8 lines) in packages/api-routes/test/composites.test.ts:566", "shortDescription": {"text": "Commented-code block (8 lines) in packages/api-routes/test/composites.test.ts:566"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82e7c6e6b3b0b762", "name": "Commented-code block (5 lines) in packages/api-routes/test/content.test.ts:114", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/test/content.test.ts:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd9f82e417fb3d33", "name": "Commented-code block (6 lines) in packages/api-routes/test/analytics.test.ts:846", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/test/analytics.test.ts:846"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc245196ff604485", "name": "Commented-code block (6 lines) in packages/api-routes/test/runs-list-filters.test.ts:58", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/test/runs-list-filters.test.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc9e7b2effc87d6b", "name": "Commented-code block (5 lines) in packages/api-routes/test/traffic.test.ts:101", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/test/traffic.test.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-933105178f4a8ff0", "name": "Commented-code block (6 lines) in packages/api-routes/test/discovery.test.ts:1064", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/test/discovery.test.ts:1064"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74c44e8d2ff9481a", "name": "Commented-code block (6 lines) in packages/api-routes/test/report.test.ts:836", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/test/report.test.ts:836"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32b4801ab87f4161", "name": "Commented-code block (6 lines) in packages/api-routes/test/google.test.ts:211", "shortDescription": {"text": "Commented-code block (6 lines) in packages/api-routes/test/google.test.ts:211"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-816eba5bdf2cd556", "name": "Legacy-named symbol `p_old` in packages/api-routes/test/gbp.test.ts:513", "shortDescription": {"text": "Legacy-named symbol `p_old` in packages/api-routes/test/gbp.test.ts:513"}, "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-b66280ab52daace4", "name": "Commented-code block (5 lines) in packages/api-routes/test/security.test.ts:97", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/test/security.test.ts:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2b9acce465f785f6", "name": "Commented-code block (5 lines) in packages/api-routes/test/ga.test.ts:428", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-routes/test/ga.test.ts:428"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9df6e4a0d2bf62c8", "name": "Commented-code block (14 lines) in packages/integration-vercel/src/drain.ts:312", "shortDescription": {"text": "Commented-code block (14 lines) in packages/integration-vercel/src/drain.ts:312"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-576188f0bf5d2a9d", "name": "Commented-code block (5 lines) in packages/integration-vercel/test/drain.test.ts:189", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-vercel/test/drain.test.ts:189"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-504af1f4cf6e523b", "name": "Commented-code block (6 lines) in packages/db/src/schema.ts:70", "shortDescription": {"text": "Commented-code block (6 lines) in packages/db/src/schema.ts:70"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc3e1fe21fdd1cad", "name": "Legacy-named symbol `idx_ga_ai_ref_unique_v2` in packages/db/src/migrate.ts:466", "shortDescription": {"text": "Legacy-named symbol `idx_ga_ai_ref_unique_v2` in packages/db/src/migrate.ts:466"}, "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-dc4b6459b04abe64", "name": "Commented-code block (9 lines) in packages/db/src/migrate.ts:459", "shortDescription": {"text": "Commented-code block (9 lines) in packages/db/src/migrate.ts:459"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b11524fffbb0ea6", "name": "Legacy-named symbol `q_legacy` in packages/db/test/discovery-migration.test.ts:236", "shortDescription": {"text": "Legacy-named symbol `q_legacy` in packages/db/test/discovery-migration.test.ts:236"}, "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-d8c4091191868951", "name": "Commented-code block (5 lines) in packages/db/test/discovery-migration.test.ts:226", "shortDescription": {"text": "Commented-code block (5 lines) in packages/db/test/discovery-migration.test.ts:226"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a2b03bbd0757448", "name": "Legacy-named symbol `sess_old` in packages/db/test/domain-classifications-migration.test.ts:84", "shortDescription": {"text": "Legacy-named symbol `sess_old` in packages/db/test/domain-classifications-migration.test.ts:84"}, "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-c5cc6ddddbe486e9", "name": "Commented-code block (5 lines) in packages/db/test/query-snapshots-preserve.test.ts:163", "shortDescription": {"text": "Commented-code block (5 lines) in packages/db/test/query-snapshots-preserve.test.ts:163"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2da93a7ac9ee3abb", "name": "Legacy-named symbol `proj_legacy` in packages/db/test/index.test.ts:251", "shortDescription": {"text": "Legacy-named symbol `proj_legacy` in packages/db/test/index.test.ts:251"}, "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-d03ab25c4d8636cc", "name": "Commented-code block (6 lines) in packages/db/test/index.test.ts:817", "shortDescription": {"text": "Commented-code block (6 lines) in packages/db/test/index.test.ts:817"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74c6c44e966d2420", "name": "Legacy-named symbol `snap_legacy` in packages/db/test/ga-traffic-landing-normalized.test.ts:76", "shortDescription": {"text": "Legacy-named symbol `snap_legacy` in packages/db/test/ga-traffic-landing-normalized.test.ts:76"}, "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-a664081e1d6bae4f", "name": "Commented-code block (6 lines) in packages/db/test/ga-traffic-landing-normalized.test.ts:178", "shortDescription": {"text": "Commented-code block (6 lines) in packages/db/test/ga-traffic-landing-normalized.test.ts:178"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d3e3ed696a96de77", "name": "Commented-code block (5 lines) in packages/db/test/audit-log-preserve.test.ts:64", "shortDescription": {"text": "Commented-code block (5 lines) in packages/db/test/audit-log-preserve.test.ts:64"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60e5d11649b587dd", "name": "Legacy-named symbol `src_legacy` in packages/db/test/traffic-tables.test.ts:315", "shortDescription": {"text": "Legacy-named symbol `src_legacy` in packages/db/test/traffic-tables.test.ts:315"}, "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-0dd90f2cdd40b9c5", "name": "Commented-code block (7 lines) in packages/db/test/traffic-tables.test.ts:301", "shortDescription": {"text": "Commented-code block (7 lines) in packages/db/test/traffic-tables.test.ts:301"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a29dc360c3fd757c", "name": "Commented-code block (5 lines) in packages/integration-openai-ads/test/fixtures.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-openai-ads/test/fixtures.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-bfb3471db95e409d", "name": "Commented-code block (5 lines) in packages/api-client-generated/codegen.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in packages/api-client-generated/codegen.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-740eba75fa83c456", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api-client-generated/codegen.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api-client-generated/codegen.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-ab3e6abe4ca8596b", "name": "Commented-code block (5 lines) in packages/canonry/src/server.ts:136", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/src/server.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-6ee759a77ec49506", "name": "Commented-code block (5 lines) in packages/canonry/src/discovery-run.ts:314", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/src/discovery-run.ts:314"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20a964e412db6bb6", "name": "Commented-code block (5 lines) in packages/canonry/src/scheduler.ts:235", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/src/scheduler.ts:235"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e190f3ecc8c9512", "name": "Commented-code block (6 lines) in packages/canonry/src/sitemap-parser.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/src/sitemap-parser.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-0989eaeea98f9fa4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/src/sitemap-parser.ts:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/src/sitemap-parser.ts:70"}, "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-b04add6af236b8b1", "name": "Commented-code block (6 lines) in packages/canonry/src/run-coordinator.ts:71", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/src/run-coordinator.ts:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f7845ab52ae713bd", "name": "Commented-code block (6 lines) in packages/canonry/src/intelligence-service.ts:105", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/src/intelligence-service.ts:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f2f3d14958148190", "name": "Commented-code block (14 lines) in packages/canonry/src/notifier.ts:169", "shortDescription": {"text": "Commented-code block (14 lines) in packages/canonry/src/notifier.ts:169"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67db39b36407831f", "name": "Commented-code block (7 lines) in packages/canonry/src/job-runner.ts:638", "shortDescription": {"text": "Commented-code block (7 lines) in packages/canonry/src/job-runner.ts:638"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fcb4e5baaae99620", "name": "Commented-code block (8 lines) in packages/canonry/src/client.ts:602", "shortDescription": {"text": "Commented-code block (8 lines) in packages/canonry/src/client.ts:602"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-624c820ac0ee2a6a", "name": "Commented-code block (5 lines) in packages/canonry/src/config.ts:337", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/src/config.ts:337"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4008281acf260b08", "name": "Commented-code block (7 lines) in packages/canonry/src/ads-sync.ts:136", "shortDescription": {"text": "Commented-code block (7 lines) in packages/canonry/src/ads-sync.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-2ac8516178222ae4", "name": "Commented-code block (7 lines) in packages/canonry/src/execute-site-audit.ts:142", "shortDescription": {"text": "Commented-code block (7 lines) in packages/canonry/src/execute-site-audit.ts:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6787e442590f8bc", "name": "Commented-code block (5 lines) in packages/canonry/src/gbp-sync.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/src/gbp-sync.ts:27"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6690bfedbef756c7", "name": "Commented-code block (7 lines) in packages/canonry/src/commands/backfill.ts:750", "shortDescription": {"text": "Commented-code block (7 lines) in packages/canonry/src/commands/backfill.ts:750"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c898e0b7668ef750", "name": "Commented-code block (5 lines) in packages/canonry/src/commands/run.ts:154", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/src/commands/run.ts:154"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c9d7618da1e8370", "name": "Commented-code block (5 lines) in packages/canonry/src/commands/discover.ts:214", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/src/commands/discover.ts:214"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4366200e06ff33ed", "name": "Commented-code block (6 lines) in packages/canonry/src/commands/init.ts:293", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/src/commands/init.ts:293"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5e32a80d3a53ca5", "name": "Commented-code block (5 lines) in packages/canonry/src/agent/agent-routes.ts:73", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/src/agent/agent-routes.ts:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c604c48b2ff6bbd9", "name": "Commented-code block (6 lines) in packages/canonry/src/mcp/openapi-classification.ts:173", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/src/mcp/openapi-classification.ts:173"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-519c40e8b717598a", "name": "Commented-code block (5 lines) in packages/canonry/test/telemetry.test.ts:164", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/test/telemetry.test.ts:164"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efe41f983df9dec9", "name": "Commented-code block (6 lines) in packages/canonry/test/notifier-fanout.test.ts:155", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/test/notifier-fanout.test.ts:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c92221245c6c7e8d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/test/gbp-sync.test.ts:380", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/test/gbp-sync.test.ts:380"}, "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-c670d7d4570549a4", "name": "Commented-code block (5 lines) in packages/canonry/test/cli-run-contract.test.ts:236", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/test/cli-run-contract.test.ts:236"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-842e5fc3a1613e13", "name": "Legacy-named symbol `prj_old` in packages/canonry/test/vercel-traffic-config.test.ts:47", "shortDescription": {"text": "Legacy-named symbol `prj_old` in packages/canonry/test/vercel-traffic-config.test.ts:47"}, "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-848ffcbb72e3596c", "name": "Commented-code block (9 lines) in packages/canonry/test/location-commands.test.ts:381", "shortDescription": {"text": "Commented-code block (9 lines) in packages/canonry/test/location-commands.test.ts:381"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87897d568743f4e3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/test/setup.test.ts:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/test/setup.test.ts:17"}, "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-4038e93abe5ed6bf", "name": "Commented-code block (6 lines) in packages/canonry/test/run-coordinator.test.ts:180", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/test/run-coordinator.test.ts:180"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b935527e1cbb5609", "name": "Commented-code block (6 lines) in packages/canonry/test/intelligence-service.test.ts:582", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/test/intelligence-service.test.ts:582"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d2bcfbb62ce5f95", "name": "Commented-code block (6 lines) in packages/canonry/test/traffic-jsonl-degrade.test.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in packages/canonry/test/traffic-jsonl-degrade.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-e6d801244aa55d16", "name": "Commented-code block (5 lines) in packages/canonry/test/agent-providers.test.ts:270", "shortDescription": {"text": "Commented-code block (5 lines) in packages/canonry/test/agent-providers.test.ts:270"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35da946703a285bd", "name": "Commented-code block (5 lines) in packages/integration-traffic/src/ip-verify.ts:97", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-traffic/src/ip-verify.ts:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09d172fb08a6d0af", "name": "Commented-code block (8 lines) in packages/integration-traffic/src/rules.ts:50", "shortDescription": {"text": "Commented-code block (8 lines) in packages/integration-traffic/src/rules.ts:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d98818a274311e0", "name": "Commented-code block (6 lines) in packages/integration-traffic/src/classifier.ts:10", "shortDescription": {"text": "Commented-code block (6 lines) in packages/integration-traffic/src/classifier.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-ef08c2038365a2c6", "name": "Commented-code block (5 lines) in packages/integration-traffic/src/types.ts:29", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-traffic/src/types.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-64fb56ca8f3ba060", "name": "Commented-code block (5 lines) in packages/integration-traffic/test/analysis.test.ts:169", "shortDescription": {"text": "Commented-code block (5 lines) in packages/integration-traffic/test/analysis.test.ts:169"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c244e1523eab037d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/integration-traffic/test/analysis.test.ts:496", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/integration-traffic/test/analysis.test.ts:496"}, "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-085f31ef616dac39", "name": "Legacy-named symbol `toneOld` in scripts/sov-rework-analysis.ts:385", "shortDescription": {"text": "Legacy-named symbol `toneOld` in scripts/sov-rework-analysis.ts:385"}, "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-8be61d4f9a8c51b2", "name": "Commented-code block (7 lines) in scripts/sov-rework-analysis.ts:67", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/sov-rework-analysis.ts:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6adf8bed4f9928c8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/worker/test/worker.test.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/worker/test/worker.test.ts:91"}, "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-35d0cb9b0fd9b284", "name": "Commented-code block (5 lines) in apps/web/src/build-dashboard.ts:158", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/build-dashboard.ts:158"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b5649c3919e1d0f", "name": "Commented-code block (5 lines) in apps/web/src/api.ts:260", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/api.ts:260"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-08ab82371ffd49e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/api.ts:185", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/api.ts:185"}, "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-5d4b3ec9081a2a71", "name": "Commented-code block (6 lines) in apps/web/src/api-aero.ts:77", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/api-aero.ts:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-34bb8ff7fdf50803", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/api-aero.ts:90", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/api-aero.ts:90"}, "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-12f1f567d2fdb3a8", "name": "Commented-code block (8 lines) in apps/web/src/App.tsx:230", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/src/App.tsx:230"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5156ccdfca99c8e2", "name": "Commented-code block (7 lines) in apps/web/src/components/project/GbpSection.tsx:97", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/components/project/GbpSection.tsx:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2442f4b494893964", "name": "Commented-code block (8 lines) in apps/web/src/components/project/DiscoverySection.tsx:117", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/src/components/project/DiscoverySection.tsx:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5f0be3d4340be8d2", "name": "Commented-code block (5 lines) in apps/web/src/pages/TrafficSourceDetailPage.tsx:143", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/pages/TrafficSourceDetailPage.tsx:143"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37e1d26e359f7dfb", "name": "Commented-code block (8 lines) in apps/web/src/pages/SetupPage.tsx:129", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/src/pages/SetupPage.tsx:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e441448e60a44b5e", "name": "Commented-code block (6 lines) in apps/web/src/pages/ProjectPage.tsx:1273", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/pages/ProjectPage.tsx:1273"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ff90f759700edaad", "name": "Commented-code block (5 lines) in apps/web/src/pages/ReportPage.tsx:415", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/pages/ReportPage.tsx:415"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a78ceb6b1027ffd1", "name": "Commented-code block (5 lines) in apps/web/src/lib/visibility-trend-helpers.ts:58", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/visibility-trend-helpers.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0cb45127a165e0f6", "name": "Commented-code block (5 lines) in apps/web/src/lib/traffic-event-filter.ts:122", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/lib/traffic-event-filter.ts:122"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8501f393565897d5", "name": "Commented-code block (6 lines) in apps/web/src/router/routes.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/router/routes.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-e88514b53d3eae82", "name": "Commented-code block (10 lines) in apps/web/src/queries/mutations.ts:298", "shortDescription": {"text": "Commented-code block (10 lines) in apps/web/src/queries/mutations.ts:298"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d400187b1ee7119e", "name": "Commented-code block (10 lines) in apps/web/src/queries/use-dashboard.ts:45", "shortDescription": {"text": "Commented-code block (10 lines) in apps/web/src/queries/use-dashboard.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-18cf512942e8900c", "name": "Commented-code block (7 lines) in apps/web/src/queries/use-project-dashboard.ts:40", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/queries/use-project-dashboard.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7d304d394095b1e", "name": "Commented-code block (8 lines) in apps/web/src/queries/server-traffic.ts:116", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/src/queries/server-traffic.ts:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c9f0e4ff147c1f1", "name": "Commented-code block (5 lines) in apps/web/src/queries/query-client.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/queries/query-client.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-557c40dc6d9ba3a2", "name": "Commented-code block (6 lines) in apps/web/test/app.test.tsx:14", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/test/app.test.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-cd213a5ef208b80e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/ga-connect.test.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/ga-connect.test.ts:6"}, "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-a216dda9c04c98fa", "name": "Commented-code block (6 lines) in apps/web/test/find-evidence-for-modal.test.ts:46", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/test/find-evidence-for-modal.test.ts:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d45d1e0b4d5c1c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/mock-fetch.ts:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/mock-fetch.ts:4"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ae304ce93fce3a6d", "name": "Commented-code block (5 lines) in apps/web/test/run-tracker-store.test.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/test/run-tracker-store.test.ts:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a22355e118f1e1fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/api-fetch-headers.test.ts:6", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/api-fetch-headers.test.ts:6"}, "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-9004ce0a4a0516b7", "name": "Commented-code block (6 lines) in apps/web/test/gbp-section.test.tsx:155", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/test/gbp-section.test.tsx:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-183de7434ee079f2", "name": "Commented-code block (5 lines) in apps/web/test/build-dashboard.test.ts:661", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/test/build-dashboard.test.ts:661"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e6fd93f9adf64c5", "name": "Commented-code block (5 lines) in apps/web/test/setup-launched-run-polling.test.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/test/setup-launched-run-polling.test.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-748f2768a91017b8", "name": "Commented-code block (5 lines) in apps/web/test/traffic-event-filter.test.ts:266", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/test/traffic-event-filter.test.ts:266"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85e56e083882640a", "name": "Dangling fetch: POST https://ainyc.ai/api/telemetry (packages/canonry/test/setup.test.ts:17)", "shortDescription": {"text": "Dangling fetch: POST https://ainyc.ai/api/telemetry (packages/canonry/test/setup.test.ts:17)"}, "fullDescription": {"text": "`packages/canonry/test/setup.test.ts:17` calls `POST https://ainyc.ai/api/telemetry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/ainyc.ai/api/telemetry`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2e898c4b753eb28", "name": "Dangling fetch: GET https://example.com/x (packages/canonry/test/setup.test.ts:25)", "shortDescription": {"text": "Dangling fetch: GET https://example.com/x (packages/canonry/test/setup.test.ts:25)"}, "fullDescription": {"text": "`packages/canonry/test/setup.test.ts:25` calls `GET https://example.com/x` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/example.com/x`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a16e313a53ab6d7", "name": "Dangling fetch: GET http://127.0.0.1:1/none (packages/canonry/test/setup.test.ts:37)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:1/none (packages/canonry/test/setup.test.ts:37)"}, "fullDescription": {"text": "`packages/canonry/test/setup.test.ts:37` calls `GET http://127.0.0.1:1/none` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:1/none`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfa7a4d7d2984914", "name": "Dangling fetch: GET http://127.0.0.1:${workerPort}/health (apps/worker/test/worker.test.ts:91)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${workerPort}/health (apps/worker/test/worker.test.ts:91)"}, "fullDescription": {"text": "`apps/worker/test/worker.test.ts:91` calls `GET http://127.0.0.1:${workerPort}/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca86bdda6a980aec", "name": "Dangling fetch: GET /api/v1/\u2026 (apps/web/src/api.ts:185)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/\u2026 (apps/web/src/api.ts:185)"}, "fullDescription": {"text": "`apps/web/src/api.ts:185` calls `GET /api/v1/\u2026` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/\u2026`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1e1ee09590b0a49", "name": "Unused endpoint: GET /projects", "shortDescription": {"text": "Unused endpoint: GET /projects"}, "fullDescription": {"text": "`packages/api-routes/src/projects.ts` declares `GET /projects` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-678c6e4b90d6c8d1", "name": "Unused endpoint: GET /cdp/status", "shortDescription": {"text": "Unused endpoint: GET /cdp/status"}, "fullDescription": {"text": "`packages/api-routes/src/cdp.ts` declares `GET /cdp/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-968d4311ce08cfe9", "name": "Unused endpoint: GET /openapi.json", "shortDescription": {"text": "Unused endpoint: GET /openapi.json"}, "fullDescription": {"text": "`packages/api-routes/src/openapi.ts` declares `GET /openapi.json` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1bfcf35f75a7fc46", "name": "Unused endpoint: GET /notifications/events", "shortDescription": {"text": "Unused endpoint: GET /notifications/events"}, "fullDescription": {"text": "`packages/api-routes/src/notifications.ts` declares `GET /notifications/events` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a88e32ba95dda7c", "name": "Unused endpoint: POST /apply", "shortDescription": {"text": "Unused endpoint: POST /apply"}, "fullDescription": {"text": "`packages/api-routes/src/apply.ts` declares `POST /apply` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec44c1dacd8c8ee0", "name": "Unused endpoint: GET /keys", "shortDescription": {"text": "Unused endpoint: GET /keys"}, "fullDescription": {"text": "`packages/api-routes/src/keys.ts` declares `GET /keys` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0f53365bbb1c16b8", "name": "Unused endpoint: POST /keys", "shortDescription": {"text": "Unused endpoint: POST /keys"}, "fullDescription": {"text": "`packages/api-routes/src/keys.ts` declares `POST /keys` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afc064028ae39ea9", "name": "Unused endpoint: GET /history", "shortDescription": {"text": "Unused endpoint: GET /history"}, "fullDescription": {"text": "`packages/api-routes/src/history.ts` declares `GET /history` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b97321fc4874886", "name": "Unused endpoint: GET /telemetry", "shortDescription": {"text": "Unused endpoint: GET /telemetry"}, "fullDescription": {"text": "`packages/api-routes/src/telemetry.ts` declares `GET /telemetry` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-512ccb0fd0b230ba", "name": "Unused endpoint: GET /settings", "shortDescription": {"text": "Unused endpoint: GET /settings"}, "fullDescription": {"text": "`packages/api-routes/src/settings.ts` declares `GET /settings` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6648f58167b044d3", "name": "Unused endpoint: GET /backlinks/status", "shortDescription": {"text": "Unused endpoint: GET /backlinks/status"}, "fullDescription": {"text": "`packages/api-routes/src/backlinks.ts` declares `GET /backlinks/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dd0926a86dfe17e2", "name": "Unused endpoint: POST /backlinks/install", "shortDescription": {"text": "Unused endpoint: POST /backlinks/install"}, "fullDescription": {"text": "`packages/api-routes/src/backlinks.ts` declares `POST /backlinks/install` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1faacd12381c071", "name": "Unused endpoint: GET /backlinks/syncs/latest", "shortDescription": {"text": "Unused endpoint: GET /backlinks/syncs/latest"}, "fullDescription": {"text": "`packages/api-routes/src/backlinks.ts` declares `GET /backlinks/syncs/latest` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de7e65ac92d7625d", "name": "Unused endpoint: GET /backlinks/syncs", "shortDescription": {"text": "Unused endpoint: GET /backlinks/syncs"}, "fullDescription": {"text": "`packages/api-routes/src/backlinks.ts` declares `GET /backlinks/syncs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2dcccc5c5720afdc", "name": "Unused endpoint: GET /backlinks/releases", "shortDescription": {"text": "Unused endpoint: GET /backlinks/releases"}, "fullDescription": {"text": "`packages/api-routes/src/backlinks.ts` declares `GET /backlinks/releases` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c22116d864b4c7e5", "name": "Unused endpoint: GET /backlinks/latest-release", "shortDescription": {"text": "Unused endpoint: GET /backlinks/latest-release"}, "fullDescription": {"text": "`packages/api-routes/src/backlinks.ts` declares `GET /backlinks/latest-release` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24821"}, "properties": {"repository": "Canonry/canonry", "repoUrl": "https://github.com/Canonry/canonry", "branch": "main"}, "results": [{"ruleId": "scanner-4586ca76c74ea9e0", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/api-routes/src/openapi.ts:332"}, "properties": {"repobilityId": "1b14357cc7ed9db9", "scanner": "scanner-primary", "fingerprint": "4586ca76c74ea9e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ec763befdce152ab", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/api-routes/test/no-new-loose-routes.test.ts:59"}, "properties": {"repobilityId": "c2e36ec4cb537bf0", "scanner": "scanner-primary", "fingerprint": "ec763befdce152ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-fc2fd5d9b0b17036", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/api-client-generated/codegen.ts:67"}, "properties": {"repobilityId": "26e708410d0ed3e6", "scanner": "scanner-primary", "fingerprint": "fc2fd5d9b0b17036", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-92048e470965878e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/api-client-generated/src/generated/client/client.gen.ts:207"}, "properties": {"repobilityId": "a147cd822aa766df", "scanner": "scanner-primary", "fingerprint": "92048e470965878e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-4d880de88533fe61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/build-web.ts:21"}, "properties": {"repobilityId": "f4196b5512588d58", "scanner": "scanner-primary", "fingerprint": "4d880de88533fe61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5da0e6402e7e88d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/scripts/copy-agent-assets.ts:47"}, "properties": {"repobilityId": "e93ae52a450a7ae8", "scanner": "scanner-primary", "fingerprint": "5da0e6402e7e88d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4d28c4b3bab6c32", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/cli.ts:81"}, "properties": {"repobilityId": "66bda0eb68df177b", "scanner": "scanner-primary", "fingerprint": "b4d28c4b3bab6c32", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-abfa9820608892e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/cli-dispatch.ts:75"}, "properties": {"repobilityId": "07e3fb275d899f1c", "scanner": "scanner-primary", "fingerprint": "abfa9820608892e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b74e522f8b55d70d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/serve.ts:38"}, "properties": {"repobilityId": "25a900fd7d10fe7c", "scanner": "scanner-primary", "fingerprint": "b74e522f8b55d70d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-981ad1b592708ef5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/notify.ts:34"}, "properties": {"repobilityId": "77321e4866987c1e", "scanner": "scanner-primary", "fingerprint": "981ad1b592708ef5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ef8962ef4470a876", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/project.ts:26"}, "properties": {"repobilityId": "d12eaf7d0612d9ae", "scanner": "scanner-primary", "fingerprint": "ef8962ef4470a876", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30c36068e1d533b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-transcript.ts:28"}, "properties": {"repobilityId": "4f969445e24279f3", "scanner": "scanner-primary", "fingerprint": "30c36068e1d533b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4494b2a97cff044f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/analytics.ts:51"}, "properties": {"repobilityId": "6694973850175d8c", "scanner": "scanner-primary", "fingerprint": "4494b2a97cff044f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee068821ade0470c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/skills.ts:411"}, "properties": {"repobilityId": "47e4d25572cf3db3", "scanner": "scanner-primary", "fingerprint": "ee068821ade0470c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-66a5dda26926c377", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/gbp.ts:35"}, "properties": {"repobilityId": "67dfc0af2cd36221", "scanner": "scanner-primary", "fingerprint": "66a5dda26926c377", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a93d2e5871fe28fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/cdp.ts:26"}, "properties": {"repobilityId": "fdbc1479f8f8fd1c", "scanner": "scanner-primary", "fingerprint": "a93d2e5871fe28fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d3bab5ad873c2b6d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/bootstrap.ts:87"}, "properties": {"repobilityId": "f1894780282d6317", "scanner": "scanner-primary", "fingerprint": "d3bab5ad873c2b6d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2500c9624811a8db", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/doctor.ts:30"}, "properties": {"repobilityId": "3a66aebdbb4908f7", "scanner": "scanner-primary", "fingerprint": "2500c9624811a8db", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e5c0720ee367158", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/backfill.ts:204"}, "properties": {"repobilityId": "f55ef05cf29dd1f8", "scanner": "scanner-primary", "fingerprint": "6e5c0720ee367158", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d14f0094537bb266", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/traffic.ts:91"}, "properties": {"repobilityId": "74c582ec08ff55a1", "scanner": "scanner-primary", "fingerprint": "d14f0094537bb266", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47dee1763f7142d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/query.ts:15"}, "properties": {"repobilityId": "1e32b3e0927c5d45", "scanner": "scanner-primary", "fingerprint": "47dee1763f7142d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bab276dc17afadb4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-providers.ts:24"}, "properties": {"repobilityId": "97e2967c9c718f91", "scanner": "scanner-primary", "fingerprint": "bab276dc17afadb4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d30aeba6cd78973", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/mcp.ts:235"}, "properties": {"repobilityId": "f5a2d3201fa83de1", "scanner": "scanner-primary", "fingerprint": "8d30aeba6cd78973", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3043cad078a46382", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-memory.ts:25"}, "properties": {"repobilityId": "22303a29f0c3ddd1", "scanner": "scanner-primary", "fingerprint": "3043cad078a46382", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46e3d9e9fc6feaf0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/status.ts:21"}, "properties": {"repobilityId": "614075aa0eb17871", "scanner": "scanner-primary", "fingerprint": "46e3d9e9fc6feaf0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0aaa8116755a042c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/health-cmd.ts:14"}, "properties": {"repobilityId": "46a05f2b2220e797", "scanner": "scanner-primary", "fingerprint": "0aaa8116755a042c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d4058d6f3735e57a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/run.ts:50"}, "properties": {"repobilityId": "33111c265c7f2baa", "scanner": "scanner-primary", "fingerprint": "d4058d6f3735e57a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dbfc25d21c1f4c04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/search.ts:12"}, "properties": {"repobilityId": "0326b8ad411b59e0", "scanner": "scanner-primary", "fingerprint": "dbfc25d21c1f4c04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43cbdd6b309ec72b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/discover.ts:111"}, "properties": {"repobilityId": "138f530bcea03a97", "scanner": "scanner-primary", "fingerprint": "43cbdd6b309ec72b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0dbe21b059e5e28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/overview.ts:19"}, "properties": {"repobilityId": "24ad4bf0a3489481", "scanner": "scanner-primary", "fingerprint": "d0dbe21b059e5e28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b86d8d1e559a504", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/wordpress.ts:29"}, "properties": {"repobilityId": "fe6cbf273a1ef2a3", "scanner": "scanner-primary", "fingerprint": "1b86d8d1e559a504", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f25c41710b4c2ab3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/apply.ts:74"}, "properties": {"repobilityId": "79e73980f3b4042e", "scanner": "scanner-primary", "fingerprint": "f25c41710b4c2ab3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cbfaf8c6e7565899", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent-ask.ts:143"}, "properties": {"repobilityId": "ffe1dd1b1b5a04b2", "scanner": "scanner-primary", "fingerprint": "cbfaf8c6e7565899", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-848e9672b57a75d2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/keys.ts:19"}, "properties": {"repobilityId": "3f30d3252311a286", "scanner": "scanner-primary", "fingerprint": "848e9672b57a75d2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da9ca7f46fa30537", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/agent.ts:12"}, "properties": {"repobilityId": "eadc31eabb5d14c4", "scanner": "scanner-primary", "fingerprint": "da9ca7f46fa30537", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea4dac0f91484176", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/evidence.ts:22"}, "properties": {"repobilityId": "56a41524fd1e4586", "scanner": "scanner-primary", "fingerprint": "ea4dac0f91484176", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-806139199a996b1c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/insights.ts:13"}, "properties": {"repobilityId": "8b60e9581971e29e", "scanner": "scanner-primary", "fingerprint": "806139199a996b1c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbb7709029d32c31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/get.ts:71"}, "properties": {"repobilityId": "a2a2714df6c9e669", "scanner": "scanner-primary", "fingerprint": "fbb7709029d32c31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-563f957065ccd755", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/history.ts:16"}, "properties": {"repobilityId": "9f3680812b4e6771", "scanner": "scanner-primary", "fingerprint": "563f957065ccd755", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-da22148a510eb4b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/competitor.ts:20"}, "properties": {"repobilityId": "95161333831e77f8", "scanner": "scanner-primary", "fingerprint": "da22148a510eb4b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-239ef0361377d742", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/ga.ts:57"}, "properties": {"repobilityId": "c81da19613fb8aba", "scanner": "scanner-primary", "fingerprint": "239ef0361377d742", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-44f4e94f2645cff6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/export-cmd.ts:19"}, "properties": {"repobilityId": "ba909777a3959613", "scanner": "scanner-primary", "fingerprint": "44f4e94f2645cff6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5ae0fc643ac38c7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/snapshot.ts:60"}, "properties": {"repobilityId": "b686635a26898332", "scanner": "scanner-primary", "fingerprint": "c5ae0fc643ac38c7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2adfffa381303e2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/telemetry.ts:22"}, "properties": {"repobilityId": "b94c742e734a0ad1", "scanner": "scanner-primary", "fingerprint": "2adfffa381303e2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd152312a116de58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/ads.ts:45"}, "properties": {"repobilityId": "21d58e39d40ed8e9", "scanner": "scanner-primary", "fingerprint": "bd152312a116de58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2f493179375ac79a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/keyword.ts:15"}, "properties": {"repobilityId": "a99014e25d93605a", "scanner": "scanner-primary", "fingerprint": "2f493179375ac79a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-222e22402a730021", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/schedule.ts:29"}, "properties": {"repobilityId": "d0abebb0305542d6", "scanner": "scanner-primary", "fingerprint": "222e22402a730021", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-99a651f27465f1aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/settings.ts:27"}, "properties": {"repobilityId": "20ed697e832124b1", "scanner": "scanner-primary", "fingerprint": "99a651f27465f1aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ade30489df41c3f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/backlinks.ts:25"}, "properties": {"repobilityId": "330315e005a23715", "scanner": "scanner-primary", "fingerprint": "8ade30489df41c3f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b679f8917bf50450", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/report.ts:30"}, "properties": {"repobilityId": "221998ea83e98c75", "scanner": "scanner-primary", "fingerprint": "b679f8917bf50450", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5008e8c61c1179a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/init.ts:83"}, "properties": {"repobilityId": "826256e074fa282e", "scanner": "scanner-primary", "fingerprint": "5008e8c61c1179a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d79bd23b5f36807e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/technical-aeo.ts:15"}, "properties": {"repobilityId": "97c01e1a9c3693d2", "scanner": "scanner-primary", "fingerprint": "d79bd23b5f36807e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3023334450e0e949", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/citations.ts:12"}, "properties": {"repobilityId": "a5d145667b53fe9f", "scanner": "scanner-primary", "fingerprint": "3023334450e0e949", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09718e79a51d4ac7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/content.ts:26"}, "properties": {"repobilityId": "9df0ab891a961eb4", "scanner": "scanner-primary", "fingerprint": "09718e79a51d4ac7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cb299d985e79c8fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/daemon.ts:116"}, "properties": {"repobilityId": "c8ff2e3bba467c92", "scanner": "scanner-primary", "fingerprint": "cb299d985e79c8fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d44bca29db88ee0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/bing.ts:81"}, "properties": {"repobilityId": "54105048c7076a18", "scanner": "scanner-primary", "fingerprint": "8d44bca29db88ee0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ff6458881ac7f60d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/sources.ts:45"}, "properties": {"repobilityId": "a51a907b83652216", "scanner": "scanner-primary", "fingerprint": "ff6458881ac7f60d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05b7ba57ee61a29a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/src/commands/google.ts:79"}, "properties": {"repobilityId": "e7dc755f2930ee8e", "scanner": "scanner-primary", "fingerprint": "05b7ba57ee61a29a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20b805f4940be2ea", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/canonry/test/sources-command.test.ts:12"}, "properties": {"repobilityId": "8b2927d2b1c7fc49", "scanner": "scanner-primary", "fingerprint": "20b805f4940be2ea", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6835be50555cdd9b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sov-rework-analysis.ts:621"}, "properties": {"repobilityId": "4fb76db3a4077c7f", "scanner": "scanner-primary", "fingerprint": "6835be50555cdd9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f881260d3cc529d1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/App.tsx:764"}, "properties": {"repobilityId": "9dd2be8e09997a2f", "scanner": "scanner-primary", "fingerprint": "f881260d3cc529d1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7c5aa49136eb972", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/SearchConsoleSummaryCard.tsx:49"}, "properties": {"repobilityId": "d49723844054bd1b", "scanner": "scanner-primary", "fingerprint": "a7c5aa49136eb972", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-22e56333658e821c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/TechnicalAeoSection.tsx:180"}, "properties": {"repobilityId": "09b0e13b90067e80", "scanner": "scanner-primary", "fingerprint": "22e56333658e821c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d97cd93ee350d094", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/ActivitySection.tsx:1293"}, "properties": {"repobilityId": "a7e4e898ed49de1f", "scanner": "scanner-primary", "fingerprint": "d97cd93ee350d094", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e13f34815b04913e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/project/GscSection.tsx:944"}, "properties": {"repobilityId": "e5a56c3191c7c4ba", "scanner": "scanner-primary", "fingerprint": "e13f34815b04913e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f3340186f54b016f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/layout/EvidenceDetailModal.tsx:393"}, "properties": {"repobilityId": "13181076b5c8b7f8", "scanner": "scanner-primary", "fingerprint": "f3340186f54b016f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da4d98c0d3a3b7b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/TrafficSourceDetailPage.tsx:893"}, "properties": {"repobilityId": "46a782604398665e", "scanner": "scanner-primary", "fingerprint": "da4d98c0d3a3b7b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b70400bda8b7102a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/pages/ProjectPage.tsx:520"}, "properties": {"repobilityId": "1b5bd898fb48fa59", "scanner": "scanner-primary", "fingerprint": "b70400bda8b7102a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-830940026c9c2a38", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/lib/highlight.ts:28"}, "properties": {"repobilityId": "d228f8022a022cb9", "scanner": "scanner-primary", "fingerprint": "830940026c9c2a38", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-9ba8282f8906e5a4", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: public.ecr.aws/docker/library/node:20-bookworm-slim"}, "properties": {"repobilityId": "3e64ad0909128395", "scanner": "scanner-primary", "fingerprint": "9ba8282f8906e5a4", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-9ba8282f8906e5a4", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: public.ecr.aws/docker/library/node:20-bookworm-slim"}, "properties": {"repobilityId": "9742d391b4daecc5", "scanner": "scanner-primary", "fingerprint": "9ba8282f8906e5a4", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-e98333803e93abea", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/integration-commoncrawl/src/plugin-installer.ts:1"}, "properties": {"repobilityId": "c563d1e9bdb04d0a", "scanner": "scanner-primary", "fingerprint": "e98333803e93abea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-commoncrawl/src/plugin-installer.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a81b144fc97e2499", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/canonry/build-web.ts:11"}, "properties": {"repobilityId": "ecc5cfc3c93b9adb", "scanner": "scanner-primary", "fingerprint": "a81b144fc97e2499", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/canonry/build-web.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-b4e04aa3fa57ef5b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/canonry/src/commands/daemon.ts:1"}, "properties": {"repobilityId": "97372d9391b3ae51", "scanner": "scanner-primary", "fingerprint": "b4e04aa3fa57ef5b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/canonry/src/commands/daemon.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-daac6725d5a03e2a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "5e7bc2d57f3d35f0", "scanner": "scanner-primary", "fingerprint": "daac6725d5a03e2a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/wp-plugin-release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a53bf972e19b52fd", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bf870f7f60e0da5e", "scanner": "scanner-primary", "fingerprint": "a53bf972e19b52fd", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 115}}}]}, {"ruleId": "scanner-7ffa33751be3d771", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "491a3ad29cbaf189", "scanner": "scanner-primary", "fingerprint": "7ffa33751be3d771", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "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": 50}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e2ffdda808c2036c", "level": "note", "message": {"text": "Very large file: packages/api-routes/src/report-renderer.ts (2648 lines)"}, "properties": {"repobilityId": "79aed765e5d4cb61", "scanner": "scanner-primary", "fingerprint": "e2ffdda808c2036c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f88ad125eb437396", "level": "note", "message": {"text": "Very large file: packages/api-routes/src/traffic.ts (2532 lines)"}, "properties": {"repobilityId": "43a0ae7f7568d9df", "scanner": "scanner-primary", "fingerprint": "f88ad125eb437396", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-43446bec1e15bf14", "level": "note", "message": {"text": "Very large file: packages/api-routes/src/openapi.ts (4168 lines)"}, "properties": {"repobilityId": "af90323e58f85d5d", "scanner": "scanner-primary", "fingerprint": "43446bec1e15bf14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bdb350c8ddbfedc3", "level": "note", "message": {"text": "Very large file: packages/api-routes/src/ga.ts (1336 lines)"}, "properties": {"repobilityId": "3665636811e76c60", "scanner": "scanner-primary", "fingerprint": "bdb350c8ddbfedc3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e7bd04c26746d88f", "level": "note", "message": {"text": "Very large file: packages/api-routes/src/report.ts (2190 lines)"}, "properties": {"repobilityId": "b14be6bcd7e364f6", "scanner": "scanner-primary", "fingerprint": "e7bd04c26746d88f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-710a11d8f1a588b9", "level": "note", "message": {"text": "Very large file: packages/api-routes/src/google.ts (1925 lines)"}, "properties": {"repobilityId": "0a6ea0adafc9e8e9", "scanner": "scanner-primary", "fingerprint": "710a11d8f1a588b9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f2f4e59dcc0d2640", "level": "note", "message": {"text": "Very large file: packages/api-routes/test/report-renderer.test.ts (1294 lines)"}, "properties": {"repobilityId": "d6774c13988c2a0c", "scanner": "scanner-primary", "fingerprint": "f2f4e59dcc0d2640", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3380e458dc084df1", "level": "note", "message": {"text": "Very large file: packages/api-routes/test/content.test.ts (1584 lines)"}, "properties": {"repobilityId": "93ae0e0ef3c85e39", "scanner": "scanner-primary", "fingerprint": "3380e458dc084df1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4dcf2c37f961a406", "level": "note", "message": {"text": "Very large file: packages/api-routes/test/analytics.test.ts (1126 lines)"}, "properties": {"repobilityId": "d44a8b0bf27389cd", "scanner": "scanner-primary", "fingerprint": "4dcf2c37f961a406", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2cf22a28e63222a9", "level": "note", "message": {"text": "Very large file: packages/api-routes/test/traffic.test.ts (3904 lines)"}, "properties": {"repobilityId": "b6115931d6902fa1", "scanner": "scanner-primary", "fingerprint": "2cf22a28e63222a9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b41947b6eb73e29c", "level": "note", "message": {"text": "Very large file: packages/api-routes/test/discovery.test.ts (1737 lines)"}, "properties": {"repobilityId": "e1059da7d2281443", "scanner": "scanner-primary", "fingerprint": "b41947b6eb73e29c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-096e2e027a5d6305", "level": "note", "message": {"text": "Very large file: packages/api-routes/test/report.test.ts (1783 lines)"}, "properties": {"repobilityId": "6eff7236b6322024", "scanner": "scanner-primary", "fingerprint": "096e2e027a5d6305", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1c367023df12c31", "level": "note", "message": {"text": "Very large file: packages/api-routes/test/google.test.ts (1519 lines)"}, "properties": {"repobilityId": "370b12252f99875e", "scanner": "scanner-primary", "fingerprint": "e1c367023df12c31", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-521d71f6fcf8d543", "level": "note", "message": {"text": "Very large file: packages/api-routes/test/ga.test.ts (1998 lines)"}, "properties": {"repobilityId": "d958afe35699e99b", "scanner": "scanner-primary", "fingerprint": "521d71f6fcf8d543", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3d65c1b6fd3905cb", "level": "note", "message": {"text": "Very large file: packages/db/src/schema.ts (1216 lines)"}, "properties": {"repobilityId": "f84bcf24c9f7eca9", "scanner": "scanner-primary", "fingerprint": "3d65c1b6fd3905cb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0ec3b8a159b94b8b", "level": "note", "message": {"text": "Very large file: packages/db/src/migrate.ts (2031 lines)"}, "properties": {"repobilityId": "0b34cdeb334e249c", "scanner": "scanner-primary", "fingerprint": "0ec3b8a159b94b8b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2f9953fa9a586973", "level": "note", "message": {"text": "Very large file: packages/api-client-generated/src/generated/types.gen.ts (9637 lines)"}, "properties": {"repobilityId": "d26b39a7f6aea05f", "scanner": "scanner-primary", "fingerprint": "2f9953fa9a586973", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-63e736a261e127b4", "level": "note", "message": {"text": "Very large file: packages/api-client-generated/src/generated/sdk.gen.ts (3705 lines)"}, "properties": {"repobilityId": "724a2a40216dd2cf", "scanner": "scanner-primary", "fingerprint": "63e736a261e127b4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9642af3d3acd8df4", "level": "note", "message": {"text": "Very large file: packages/api-client-generated/src/generated/@tanstack/react-query.gen.ts (4163 lines)"}, "properties": {"repobilityId": "9396e89e4b8be6e8", "scanner": "scanner-primary", "fingerprint": "9642af3d3acd8df4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9b5ed2d6a74894d3", "level": "note", "message": {"text": "Very large file: packages/canonry/src/server.ts (1919 lines)"}, "properties": {"repobilityId": "006fdd80474ca6ce", "scanner": "scanner-primary", "fingerprint": "9b5ed2d6a74894d3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8f8f2fb06ebd2ce2", "level": "note", "message": {"text": "Very large file: packages/canonry/src/client.ts (2361 lines)"}, "properties": {"repobilityId": "4b8a447aa38f21d2", "scanner": "scanner-primary", "fingerprint": "8f8f2fb06ebd2ce2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ca8528d4484afa1a", "level": "note", "message": {"text": "Very large file: packages/canonry/src/commands/backfill.ts (1451 lines)"}, "properties": {"repobilityId": "177da14c3a9d5e48", "scanner": "scanner-primary", "fingerprint": "ca8528d4484afa1a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e1a56650b697eb66", "level": "note", "message": {"text": "Very large file: packages/canonry/src/mcp/tool-registry.ts (1770 lines)"}, "properties": {"repobilityId": "080f0ce33ece4296", "scanner": "scanner-primary", "fingerprint": "e1a56650b697eb66", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-29446589e6ab5151", "level": "note", "message": {"text": "Very large file: apps/web/src/api.ts (1923 lines)"}, "properties": {"repobilityId": "15c0d14da08eddfe", "scanner": "scanner-primary", "fingerprint": "29446589e6ab5151", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bef5cb91135eac83", "level": "note", "message": {"text": "Very large file: apps/web/src/components/project/ActivitySection.tsx (1603 lines)"}, "properties": {"repobilityId": "e5cacc296141ad09", "scanner": "scanner-primary", "fingerprint": "bef5cb91135eac83", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b76dd9c27a0394d0", "level": "note", "message": {"text": "Very large file: apps/web/src/components/project/GscSection.tsx (1804 lines)"}, "properties": {"repobilityId": "9f10ebdf0ec0197b", "scanner": "scanner-primary", "fingerprint": "b76dd9c27a0394d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0270d92589380669", "level": "note", "message": {"text": "Very large file: apps/web/src/pages/ProjectPage.tsx (2365 lines)"}, "properties": {"repobilityId": "2c10d7abc000c96f", "scanner": "scanner-primary", "fingerprint": "0270d92589380669", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-45901f0f3ef87861", "level": "note", "message": {"text": "44 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "45901f0f3ef87861", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-b6b08387edf60974", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/intelligence/package.json"}, "properties": {"repobilityId": "b1ba4e28a1729ff0", "scanner": "scanner-primary", "fingerprint": "b6b08387edf60974", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/intelligence/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-60793c8a6f50562a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-wordpress/package.json"}, "properties": {"repobilityId": "ff5ded04d812368f", "scanner": "scanner-primary", "fingerprint": "60793c8a6f50562a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-wordpress/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-43863480c15a78ef", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/provider-claude/package.json"}, "properties": {"repobilityId": "b88d42d6f02760b1", "scanner": "scanner-primary", "fingerprint": "43863480c15a78ef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/provider-claude/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d100f5ee248fd3e6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/provider-gemini/package.json"}, "properties": {"repobilityId": "26362eb3604ccb60", "scanner": "scanner-primary", "fingerprint": "d100f5ee248fd3e6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/provider-gemini/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f85d8f0719e22fa8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/contracts/package.json"}, "properties": {"repobilityId": "9533b27beaa7d171", "scanner": "scanner-primary", "fingerprint": "f85d8f0719e22fa8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/contracts/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d391398ea1645f4e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-google-analytics/package.json"}, "properties": {"repobilityId": "3b10b4e974f31451", "scanner": "scanner-primary", "fingerprint": "d391398ea1645f4e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-google-analytics/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0f22cd183bd9ac19", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-wordpress-traffic/package.json"}, "properties": {"repobilityId": "6731abd9e78c65e8", "scanner": "scanner-primary", "fingerprint": "0f22cd183bd9ac19", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-wordpress-traffic/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-13230a8c055ee32a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/provider-openai/package.json"}, "properties": {"repobilityId": "dd875526762414fe", "scanner": "scanner-primary", "fingerprint": "13230a8c055ee32a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/provider-openai/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1e67ce79e7c1bbfc", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/api-routes/package.json"}, "properties": {"repobilityId": "5f6fcbd21f5bad6b", "scanner": "scanner-primary", "fingerprint": "1e67ce79e7c1bbfc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/api-routes/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cdf69f3575947d0d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-vercel/package.json"}, "properties": {"repobilityId": "38d700030f4f83b6", "scanner": "scanner-primary", "fingerprint": "cdf69f3575947d0d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-vercel/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-83fe48fce191855a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-cloud-run/package.json"}, "properties": {"repobilityId": "8cddf246d5fff8f5", "scanner": "scanner-primary", "fingerprint": "83fe48fce191855a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-cloud-run/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d593114334d4cf6e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-google-business-profile/package.json"}, "properties": {"repobilityId": "d3d7903c2e3f1f95", "scanner": "scanner-primary", "fingerprint": "d593114334d4cf6e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-google-business-profile/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b16ae2bd0fca524", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/db/package.json"}, "properties": {"repobilityId": "2bddd295d559a9b6", "scanner": "scanner-primary", "fingerprint": "7b16ae2bd0fca524", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/db/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a4b3b8828130b5b0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/provider-perplexity/package.json"}, "properties": {"repobilityId": "f72d7cf2fc2dea28", "scanner": "scanner-primary", "fingerprint": "a4b3b8828130b5b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/provider-perplexity/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d7314bba6aab6e50", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-google-places/package.json"}, "properties": {"repobilityId": "d116e584aec44bc7", "scanner": "scanner-primary", "fingerprint": "d7314bba6aab6e50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-google-places/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18e0e7cc86bc6af1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/api-client-generated/package.json"}, "properties": {"repobilityId": "1bd1f4255b889413", "scanner": "scanner-primary", "fingerprint": "18e0e7cc86bc6af1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/api-client-generated/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b13c3bb4fd965d8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-commoncrawl/package.json"}, "properties": {"repobilityId": "d7f462a92411fd87", "scanner": "scanner-primary", "fingerprint": "7b13c3bb4fd965d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-commoncrawl/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1172583b2494bda5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/canonry/package.json"}, "properties": {"repobilityId": "0060efaf63a41c95", "scanner": "scanner-primary", "fingerprint": "1172583b2494bda5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/canonry/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1bc1eef9e8152f67", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/provider-local/package.json"}, "properties": {"repobilityId": "679c50a5ce4813ee", "scanner": "scanner-primary", "fingerprint": "1bc1eef9e8152f67", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/provider-local/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eddecaa766cadff2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/config/package.json"}, "properties": {"repobilityId": "03931bf3537e3eaf", "scanner": "scanner-primary", "fingerprint": "eddecaa766cadff2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/config/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-16e38e5baa620725", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/provider-cdp/package.json"}, "properties": {"repobilityId": "0fc241deedf74e5e", "scanner": "scanner-primary", "fingerprint": "16e38e5baa620725", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/provider-cdp/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de438a4383e7e6fa", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/integration-traffic/package.json"}, "properties": {"repobilityId": "46b278578828b78d", "scanner": "scanner-primary", "fingerprint": "de438a4383e7e6fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-traffic/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8d1ed11de463ffed", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/worker/package.json"}, "properties": {"repobilityId": "332aff32a3fdf183", "scanner": "scanner-primary", "fingerprint": "8d1ed11de463ffed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/worker/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b06b8d86f24c77f9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "properties": {"repobilityId": "ce77cd34ed0306d4", "scanner": "scanner-primary", "fingerprint": "b06b8d86f24c77f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "383fdf59208ba851", "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": "c38ba9eded44b567", "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": "5df35ab77c356fe6", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "4eed6150eb07caad", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2679282aa1c484b5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "properties": {"repobilityId": "27d579812e6be614", "scanner": "scanner-primary", "fingerprint": "2679282aa1c484b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6cbc9b9db95d122b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: packages/intelligence/AGENTS.md"}, "properties": {"repobilityId": "2a558999985cbc43", "scanner": "scanner-primary", "fingerprint": "6cbc9b9db95d122b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/intelligence/AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f3e5585f72100b03", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: packages/wordpress-traffic-logger-plugin/AGENTS.md"}, "properties": {"repobilityId": "0b5b4691e507334f", "scanner": "scanner-primary", "fingerprint": "f3e5585f72100b03", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/wordpress-traffic-logger-plugin/AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-09d6c0391ad5163c", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: packages/integration-wordpress-traffic/AGENTS.md"}, "properties": {"repobilityId": "34982ddf91344329", "scanner": "scanner-primary", "fingerprint": "09d6c0391ad5163c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-wordpress-traffic/AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0601f760dc0be0a1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: packages/db/AGENTS.md"}, "properties": {"repobilityId": "8b72b0cc7dc8cea2", "scanner": "scanner-primary", "fingerprint": "0601f760dc0be0a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/db/AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0cfc7695ec1c39c8", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: packages/integration-google-places/AGENTS.md"}, "properties": {"repobilityId": "a1df54c79f4556cc", "scanner": "scanner-primary", "fingerprint": "0cfc7695ec1c39c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/integration-google-places/AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c62727de2854cb37", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: packages/canonry/AGENTS.md"}, "properties": {"repobilityId": "68cc7cd98102e17f", "scanner": "scanner-primary", "fingerprint": "c62727de2854cb37", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/canonry/AGENTS.md"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-ea368cfd9d377cad", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: apps/api/AGENTS.md"}, "properties": {"repobilityId": "a41ae12dfbc62fd7", "scanner": "scanner-primary", "fingerprint": "ea368cfd9d377cad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a0ac80da0a3bd9c6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: skills/canonry/SKILL.md"}, "properties": {"repobilityId": "da969e58b22762c6", "scanner": "scanner-primary", "fingerprint": "a0ac80da0a3bd9c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/canonry/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-215581e876c2abf5", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: skills/canonry/SKILL.md"}, "properties": {"repobilityId": "19e9aaa1e3f8d835", "scanner": "scanner-primary", "fingerprint": "215581e876c2abf5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "skills/canonry/SKILL.md"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-c7cfde8231c5aee3", "level": "none", "message": {"text": "Commented-code block (8 lines) in eslint.config.js:51"}, "properties": {"repobilityId": "d9cc0e7f4d52d25d", "scanner": "scanner-primary", "fingerprint": "c7cfde8231c5aee3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9957a334663a073f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 eslint.config.js:225"}, "properties": {"repobilityId": "b2fb638d26a7143f", "scanner": "scanner-primary", "fingerprint": "9957a334663a073f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a68de86db3ec3a8f", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/intelligence/src/content-targets.ts:402"}, "properties": {"repobilityId": "a298d16233058b57", "scanner": "scanner-primary", "fingerprint": "a68de86db3ec3a8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea05eb32841c23ca", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/intelligence/src/gbp-analyzer.ts:109"}, "properties": {"repobilityId": "e8642ee060ea544c", "scanner": "scanner-primary", "fingerprint": "ea05eb32841c23ca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a7fc763dba7ac1f", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/intelligence/src/causes.ts:4"}, "properties": {"repobilityId": "4d425a32f87c2e27", "scanner": "scanner-primary", "fingerprint": "8a7fc763dba7ac1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-510277dc4b9a93e6", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/intelligence/test/regressions.test.ts:199"}, "properties": {"repobilityId": "9f7c354e1a1d3637", "scanner": "scanner-primary", "fingerprint": "510277dc4b9a93e6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b0cd5cc79d6873d", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/intelligence/test/causes.test.ts:87"}, "properties": {"repobilityId": "d30acd56425356b9", "scanner": "scanner-primary", "fingerprint": "4b0cd5cc79d6873d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ae778f7f25b714c", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/intelligence/test/content-classifier.test.ts:135"}, "properties": {"repobilityId": "609ca11b89e0f7f8", "scanner": "scanner-primary", "fingerprint": "9ae778f7f25b714c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afd8268220dbf897", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/intelligence/test/visibility-score.test.ts:18"}, "properties": {"repobilityId": "f6434459314467d5", "scanner": "scanner-primary", "fingerprint": "afd8268220dbf897", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de7837afc35074a9", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/intelligence/test/insight-grouping.test.ts:80"}, "properties": {"repobilityId": "3266ca50303946f2", "scanner": "scanner-primary", "fingerprint": "de7837afc35074a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0365c402c819b08", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-bing/test/bing-client.test.ts:17"}, "properties": {"repobilityId": "64d10f53cd169695", "scanner": "scanner-primary", "fingerprint": "b0365c402c819b08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ba06a8011cdbb9e", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/contracts/src/source-categories.ts:49"}, "properties": {"repobilityId": "ab1407d100c5949b", "scanner": "scanner-primary", "fingerprint": "2ba06a8011cdbb9e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e341c6cfabe24ba9", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/contracts/src/project.ts:99"}, "properties": {"repobilityId": "806e8c7857efb74f", "scanner": "scanner-primary", "fingerprint": "e341c6cfabe24ba9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d45dd12166a6a5d", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/contracts/src/gbp.ts:25"}, "properties": {"repobilityId": "58a84962d7ceb26a", "scanner": "scanner-primary", "fingerprint": "1d45dd12166a6a5d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd12e9a6a5b756de", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/contracts/src/ads.ts:3"}, "properties": {"repobilityId": "04e175e70fefcc0a", "scanner": "scanner-primary", "fingerprint": "fd12e9a6a5b756de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0181c8d5d7235f6d", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/contracts/src/answer-visibility.ts:23"}, "properties": {"repobilityId": "7fcd54f81a70884d", "scanner": "scanner-primary", "fingerprint": "0181c8d5d7235f6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9efa413bc4096700", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/contracts/src/composites.ts:45"}, "properties": {"repobilityId": "29b14c94385bd76f", "scanner": "scanner-primary", "fingerprint": "9efa413bc4096700", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa7c7558f395e9ae", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/contracts/src/money.ts:1"}, "properties": {"repobilityId": "0f0265a63b154442", "scanner": "scanner-primary", "fingerprint": "fa7c7558f395e9ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cfd270d54254a31", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/contracts/src/content.ts:70"}, "properties": {"repobilityId": "25cbcfb199b0e4df", "scanner": "scanner-primary", "fingerprint": "6cfd270d54254a31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b7d604860a8756b", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/contracts/src/google.ts:62"}, "properties": {"repobilityId": "0474997ac6c8cb89", "scanner": "scanner-primary", "fingerprint": "8b7d604860a8756b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ccb4c207e42dfc58", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/contracts/test/embeddings.test.ts:131"}, "properties": {"repobilityId": "f5b95b15ae472a80", "scanner": "scanner-primary", "fingerprint": "ccb4c207e42dfc58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53ee4b0b773e34df", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/contracts/test/index.test.ts:1072"}, "properties": {"repobilityId": "2ceb51d38b4e4240", "scanner": "scanner-primary", "fingerprint": "53ee4b0b773e34df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5598361d17e7fcf1", "level": "note", "message": {"text": "Legacy-named symbol `sess_legacy` in packages/contracts/test/discovery.test.ts:357"}, "properties": {"repobilityId": "ac0348b0cd8b01b5", "scanner": "scanner-primary", "fingerprint": "5598361d17e7fcf1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0631669bfa875de0", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-google-analytics/src/constants.ts:15"}, "properties": {"repobilityId": "53bc2cd66d64cc95", "scanner": "scanner-primary", "fingerprint": "0631669bfa875de0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c19d17c25080b624", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-google-analytics/src/ga4-client.ts:367"}, "properties": {"repobilityId": "e12eb8aab24b0367", "scanner": "scanner-primary", "fingerprint": "c19d17c25080b624", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24375febc278a6d7", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-wordpress-traffic/src/client.ts:108"}, "properties": {"repobilityId": "b4a773579ba008cc", "scanner": "scanner-primary", "fingerprint": "24375febc278a6d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac7e57c97822b08f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/integration-wordpress-traffic/src/types.ts:70"}, "properties": {"repobilityId": "fbcf17c0174b7ef0", "scanner": "scanner-primary", "fingerprint": "ac7e57c97822b08f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1bb6f306df1d4a27", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/api-routes/src/index.ts:269"}, "properties": {"repobilityId": "0eda5394fba9f50c", "scanner": "scanner-primary", "fingerprint": "1bb6f306df1d4a27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-128fb360fcbb08ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/analytics.ts:118"}, "properties": {"repobilityId": "d91b8baaacb96a79", "scanner": "scanner-primary", "fingerprint": "128fb360fcbb08ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d181ee1f964b32d1", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/report-renderer.ts:2609"}, "properties": {"repobilityId": "b37f6527e2be0436", "scanner": "scanner-primary", "fingerprint": "d181ee1f964b32d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bc2130732e5cc80", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/api-routes/src/traffic.ts:256"}, "properties": {"repobilityId": "e2461e56f5cee67f", "scanner": "scanner-primary", "fingerprint": "6bc2130732e5cc80", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3b893905462cbd9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api-routes/src/traffic.ts:654"}, "properties": {"repobilityId": "6ff875bbf9518e56", "scanner": "scanner-primary", "fingerprint": "f3b893905462cbd9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e0623fb870646364", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/api-routes/src/intelligence.ts:210"}, "properties": {"repobilityId": "925b61e86659976c", "scanner": "scanner-primary", "fingerprint": "e0623fb870646364", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a8102b992b25ceb7", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/db-derived-dtos.ts:64"}, "properties": {"repobilityId": "114318e599914ad6", "scanner": "scanner-primary", "fingerprint": "a8102b992b25ceb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b5310a1057b6f310", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/openapi.ts:4116"}, "properties": {"repobilityId": "eaf445ded3321575", "scanner": "scanner-primary", "fingerprint": "b5310a1057b6f310", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61d63e50f26bd747", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/content-data.ts:443"}, "properties": {"repobilityId": "787c33d2bfab65e1", "scanner": "scanner-primary", "fingerprint": "61d63e50f26bd747", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3ad90aa2be452db", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/auth.ts:38"}, "properties": {"repobilityId": "e10284bb91ae44b1", "scanner": "scanner-primary", "fingerprint": "b3ad90aa2be452db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-71dc92b5d55f8915", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/wordpress.ts:106"}, "properties": {"repobilityId": "c6c84a4ff8393da8", "scanner": "scanner-primary", "fingerprint": "71dc92b5d55f8915", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f410374f68f119fc", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/apply.ts:213"}, "properties": {"repobilityId": "ff3ed7ff3445d94a", "scanner": "scanner-primary", "fingerprint": "f410374f68f119fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-378d71487e00284b", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/api-routes/src/history.ts:153"}, "properties": {"repobilityId": "7b9dc6040d235d0d", "scanner": "scanner-primary", "fingerprint": "378d71487e00284b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cb8aaf51c5926b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/ga.ts:89"}, "properties": {"repobilityId": "da6c9e828bf50451", "scanner": "scanner-primary", "fingerprint": "2cb8aaf51c5926b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-072b8ca57672bb37", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/api-routes/src/queries.ts:80"}, "properties": {"repobilityId": "f03877a0eec003e3", "scanner": "scanner-primary", "fingerprint": "072b8ca57672bb37", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17904faeb11b1cd0", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/report.ts:114"}, "properties": {"repobilityId": "01fceddd3f75b7e9", "scanner": "scanner-primary", "fingerprint": "17904faeb11b1cd0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-014446da981bd41f", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/composites.ts:74"}, "properties": {"repobilityId": "20e95a4955a1d6a1", "scanner": "scanner-primary", "fingerprint": "014446da981bd41f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9b2a53d26d36f02", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/api-routes/src/backlinks-filter.ts:4"}, "properties": {"repobilityId": "e0d074228f44015c", "scanner": "scanner-primary", "fingerprint": "c9b2a53d26d36f02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe913adaba9fd6fd", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/runs.ts:104"}, "properties": {"repobilityId": "83679e51f46f2c9d", "scanner": "scanner-primary", "fingerprint": "fe913adaba9fd6fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b40c5a3423e87978", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/citations.ts:121"}, "properties": {"repobilityId": "3ee256b150862bd1", "scanner": "scanner-primary", "fingerprint": "b40c5a3423e87978", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44d6bdd0b8a089d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/competitors.ts:8"}, "properties": {"repobilityId": "9861237d57753cbb", "scanner": "scanner-primary", "fingerprint": "44d6bdd0b8a089d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea9255e44a8e62d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/content.ts:359"}, "properties": {"repobilityId": "5ef245743c847f2b", "scanner": "scanner-primary", "fingerprint": "ea9255e44a8e62d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-214e4dd923ffc5ec", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/bing.ts:497"}, "properties": {"repobilityId": "940d99845425b481", "scanner": "scanner-primary", "fingerprint": "214e4dd923ffc5ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d2eaf7673073f65f", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/src/google.ts:372"}, "properties": {"repobilityId": "8aca324b34c4c752", "scanner": "scanner-primary", "fingerprint": "d2eaf7673073f65f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52744dd8ec00c4cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/discovery/orchestrate.ts:353"}, "properties": {"repobilityId": "109e60d2e386e800", "scanner": "scanner-primary", "fingerprint": "52744dd8ec00c4cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87026cff57f2b9a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/src/discovery/routes.ts:335"}, "properties": {"repobilityId": "0ff7d3b1124b09dc", "scanner": "scanner-primary", "fingerprint": "87026cff57f2b9a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b05fde471ee4cb3b", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/api-routes/test/google-properties-error.test.ts:128"}, "properties": {"repobilityId": "6c86de1bd6de43e0", "scanner": "scanner-primary", "fingerprint": "b05fde471ee4cb3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13cb39f8aa64c99c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/test/openapi-contract.test.ts:162"}, "properties": {"repobilityId": "5413d410675f83a6", "scanner": "scanner-primary", "fingerprint": "13cb39f8aa64c99c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e75ecc23de8a5e58", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/test/report-renderer.test.ts:456"}, "properties": {"repobilityId": "f585db1d1f396dc8", "scanner": "scanner-primary", "fingerprint": "e75ecc23de8a5e58", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad176d219ae712ef", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/api-routes/test/composites.test.ts:566"}, "properties": {"repobilityId": "3b901bb724b3dae6", "scanner": "scanner-primary", "fingerprint": "ad176d219ae712ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-82e7c6e6b3b0b762", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/test/content.test.ts:114"}, "properties": {"repobilityId": "dd349dd294278b24", "scanner": "scanner-primary", "fingerprint": "82e7c6e6b3b0b762", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd9f82e417fb3d33", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/test/analytics.test.ts:846"}, "properties": {"repobilityId": "0bf376e9e171f898", "scanner": "scanner-primary", "fingerprint": "bd9f82e417fb3d33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc245196ff604485", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/test/runs-list-filters.test.ts:58"}, "properties": {"repobilityId": "f7f05ec79f9d9cd6", "scanner": "scanner-primary", "fingerprint": "cc245196ff604485", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc9e7b2effc87d6b", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/test/traffic.test.ts:101"}, "properties": {"repobilityId": "37b1ef8703d8dfd6", "scanner": "scanner-primary", "fingerprint": "bc9e7b2effc87d6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-933105178f4a8ff0", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/test/discovery.test.ts:1064"}, "properties": {"repobilityId": "726f30425393746f", "scanner": "scanner-primary", "fingerprint": "933105178f4a8ff0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74c44e8d2ff9481a", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/test/report.test.ts:836"}, "properties": {"repobilityId": "586bd9fbc9555c1e", "scanner": "scanner-primary", "fingerprint": "74c44e8d2ff9481a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32b4801ab87f4161", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/api-routes/test/google.test.ts:211"}, "properties": {"repobilityId": "84d6f8cad0d964f1", "scanner": "scanner-primary", "fingerprint": "32b4801ab87f4161", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-816eba5bdf2cd556", "level": "note", "message": {"text": "Legacy-named symbol `p_old` in packages/api-routes/test/gbp.test.ts:513"}, "properties": {"repobilityId": "84c0fae7c32dabf5", "scanner": "scanner-primary", "fingerprint": "816eba5bdf2cd556", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b66280ab52daace4", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/test/security.test.ts:97"}, "properties": {"repobilityId": "11c3f6665377da49", "scanner": "scanner-primary", "fingerprint": "b66280ab52daace4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2b9acce465f785f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-routes/test/ga.test.ts:428"}, "properties": {"repobilityId": "134d9eb0672a6e29", "scanner": "scanner-primary", "fingerprint": "2b9acce465f785f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9df6e4a0d2bf62c8", "level": "none", "message": {"text": "Commented-code block (14 lines) in packages/integration-vercel/src/drain.ts:312"}, "properties": {"repobilityId": "53224801f7ff8597", "scanner": "scanner-primary", "fingerprint": "9df6e4a0d2bf62c8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-576188f0bf5d2a9d", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-vercel/test/drain.test.ts:189"}, "properties": {"repobilityId": "f79400f65a07f814", "scanner": "scanner-primary", "fingerprint": "576188f0bf5d2a9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-504af1f4cf6e523b", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/db/src/schema.ts:70"}, "properties": {"repobilityId": "e4c14d48257e1db4", "scanner": "scanner-primary", "fingerprint": "504af1f4cf6e523b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc3e1fe21fdd1cad", "level": "note", "message": {"text": "Legacy-named symbol `idx_ga_ai_ref_unique_v2` in packages/db/src/migrate.ts:466"}, "properties": {"repobilityId": "f202e4e6eae056a6", "scanner": "scanner-primary", "fingerprint": "dc3e1fe21fdd1cad", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dc4b6459b04abe64", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/db/src/migrate.ts:459"}, "properties": {"repobilityId": "fc91702340239183", "scanner": "scanner-primary", "fingerprint": "dc4b6459b04abe64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0b11524fffbb0ea6", "level": "note", "message": {"text": "Legacy-named symbol `q_legacy` in packages/db/test/discovery-migration.test.ts:236"}, "properties": {"repobilityId": "adfbedb781cd49d0", "scanner": "scanner-primary", "fingerprint": "0b11524fffbb0ea6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d8c4091191868951", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/db/test/discovery-migration.test.ts:226"}, "properties": {"repobilityId": "0b844ce7cd2d16ac", "scanner": "scanner-primary", "fingerprint": "d8c4091191868951", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a2b03bbd0757448", "level": "note", "message": {"text": "Legacy-named symbol `sess_old` in packages/db/test/domain-classifications-migration.test.ts:84"}, "properties": {"repobilityId": "2ba4366cf7d0c640", "scanner": "scanner-primary", "fingerprint": "6a2b03bbd0757448", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c5cc6ddddbe486e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/db/test/query-snapshots-preserve.test.ts:163"}, "properties": {"repobilityId": "5836a9fbc85c80d6", "scanner": "scanner-primary", "fingerprint": "c5cc6ddddbe486e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2da93a7ac9ee3abb", "level": "note", "message": {"text": "Legacy-named symbol `proj_legacy` in packages/db/test/index.test.ts:251"}, "properties": {"repobilityId": "ea00af8f5c9d797e", "scanner": "scanner-primary", "fingerprint": "2da93a7ac9ee3abb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d03ab25c4d8636cc", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/db/test/index.test.ts:817"}, "properties": {"repobilityId": "fb153449c3d05c05", "scanner": "scanner-primary", "fingerprint": "d03ab25c4d8636cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74c6c44e966d2420", "level": "note", "message": {"text": "Legacy-named symbol `snap_legacy` in packages/db/test/ga-traffic-landing-normalized.test.ts:76"}, "properties": {"repobilityId": "4122ab21003bb364", "scanner": "scanner-primary", "fingerprint": "74c6c44e966d2420", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a664081e1d6bae4f", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/db/test/ga-traffic-landing-normalized.test.ts:178"}, "properties": {"repobilityId": "bc23234e61860ee3", "scanner": "scanner-primary", "fingerprint": "a664081e1d6bae4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d3e3ed696a96de77", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/db/test/audit-log-preserve.test.ts:64"}, "properties": {"repobilityId": "00cfea52b05bbc7e", "scanner": "scanner-primary", "fingerprint": "d3e3ed696a96de77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60e5d11649b587dd", "level": "note", "message": {"text": "Legacy-named symbol `src_legacy` in packages/db/test/traffic-tables.test.ts:315"}, "properties": {"repobilityId": "45fee1944429638a", "scanner": "scanner-primary", "fingerprint": "60e5d11649b587dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0dd90f2cdd40b9c5", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/db/test/traffic-tables.test.ts:301"}, "properties": {"repobilityId": "486bbd8ac05e6f31", "scanner": "scanner-primary", "fingerprint": "0dd90f2cdd40b9c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a29dc360c3fd757c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-openai-ads/test/fixtures.ts:1"}, "properties": {"repobilityId": "3eb0a1fd9b934184", "scanner": "scanner-primary", "fingerprint": "a29dc360c3fd757c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bfb3471db95e409d", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/api-client-generated/codegen.ts:25"}, "properties": {"repobilityId": "e038db6893d7af74", "scanner": "scanner-primary", "fingerprint": "bfb3471db95e409d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-740eba75fa83c456", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/api-client-generated/codegen.ts:29"}, "properties": {"repobilityId": "576a5fba6d82d892", "scanner": "scanner-primary", "fingerprint": "740eba75fa83c456", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab3e6abe4ca8596b", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/src/server.ts:136"}, "properties": {"repobilityId": "c4807d3dce1ba559", "scanner": "scanner-primary", "fingerprint": "ab3e6abe4ca8596b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ee759a77ec49506", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/src/discovery-run.ts:314"}, "properties": {"repobilityId": "e8d252a07a153323", "scanner": "scanner-primary", "fingerprint": "6ee759a77ec49506", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20a964e412db6bb6", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/src/scheduler.ts:235"}, "properties": {"repobilityId": "258579e3d9062a88", "scanner": "scanner-primary", "fingerprint": "20a964e412db6bb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e190f3ecc8c9512", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/src/sitemap-parser.ts:18"}, "properties": {"repobilityId": "f0abe696fe5b2823", "scanner": "scanner-primary", "fingerprint": "0e190f3ecc8c9512", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0989eaeea98f9fa4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/src/sitemap-parser.ts:70"}, "properties": {"repobilityId": "21421670845f94b4", "scanner": "scanner-primary", "fingerprint": "0989eaeea98f9fa4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b04add6af236b8b1", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/src/run-coordinator.ts:71"}, "properties": {"repobilityId": "aebf024bf3cb799c", "scanner": "scanner-primary", "fingerprint": "b04add6af236b8b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7845ab52ae713bd", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/src/intelligence-service.ts:105"}, "properties": {"repobilityId": "f1913ffc166afd27", "scanner": "scanner-primary", "fingerprint": "f7845ab52ae713bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2f3d14958148190", "level": "none", "message": {"text": "Commented-code block (14 lines) in packages/canonry/src/notifier.ts:169"}, "properties": {"repobilityId": "0d14f2edec5d2afd", "scanner": "scanner-primary", "fingerprint": "f2f3d14958148190", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67db39b36407831f", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/canonry/src/job-runner.ts:638"}, "properties": {"repobilityId": "9bd75a2b6d0d983c", "scanner": "scanner-primary", "fingerprint": "67db39b36407831f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcb4e5baaae99620", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/canonry/src/client.ts:602"}, "properties": {"repobilityId": "5df438382fe7af72", "scanner": "scanner-primary", "fingerprint": "fcb4e5baaae99620", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-624c820ac0ee2a6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/src/config.ts:337"}, "properties": {"repobilityId": "cdc0ae1c44b91d25", "scanner": "scanner-primary", "fingerprint": "624c820ac0ee2a6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4008281acf260b08", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/canonry/src/ads-sync.ts:136"}, "properties": {"repobilityId": "ac9ca92f7e644340", "scanner": "scanner-primary", "fingerprint": "4008281acf260b08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ac8516178222ae4", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/canonry/src/execute-site-audit.ts:142"}, "properties": {"repobilityId": "f72201c9b752b908", "scanner": "scanner-primary", "fingerprint": "2ac8516178222ae4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6787e442590f8bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/src/gbp-sync.ts:27"}, "properties": {"repobilityId": "13adcdd83bf34f15", "scanner": "scanner-primary", "fingerprint": "c6787e442590f8bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6690bfedbef756c7", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/canonry/src/commands/backfill.ts:750"}, "properties": {"repobilityId": "d6b4500934332da4", "scanner": "scanner-primary", "fingerprint": "6690bfedbef756c7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c898e0b7668ef750", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/src/commands/run.ts:154"}, "properties": {"repobilityId": "9e36f2e182961a2a", "scanner": "scanner-primary", "fingerprint": "c898e0b7668ef750", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c9d7618da1e8370", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/src/commands/discover.ts:214"}, "properties": {"repobilityId": "024aa151d30b11da", "scanner": "scanner-primary", "fingerprint": "5c9d7618da1e8370", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4366200e06ff33ed", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/src/commands/init.ts:293"}, "properties": {"repobilityId": "64a8d06447250268", "scanner": "scanner-primary", "fingerprint": "4366200e06ff33ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5e32a80d3a53ca5", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/src/agent/agent-routes.ts:73"}, "properties": {"repobilityId": "a4f0ac1302b6f0e2", "scanner": "scanner-primary", "fingerprint": "e5e32a80d3a53ca5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c604c48b2ff6bbd9", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/src/mcp/openapi-classification.ts:173"}, "properties": {"repobilityId": "f934b23a4e101e0c", "scanner": "scanner-primary", "fingerprint": "c604c48b2ff6bbd9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-519c40e8b717598a", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/test/telemetry.test.ts:164"}, "properties": {"repobilityId": "671cf73c701411ab", "scanner": "scanner-primary", "fingerprint": "519c40e8b717598a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efe41f983df9dec9", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/test/notifier-fanout.test.ts:155"}, "properties": {"repobilityId": "0e285c459bf7154f", "scanner": "scanner-primary", "fingerprint": "efe41f983df9dec9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c92221245c6c7e8d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/test/gbp-sync.test.ts:380"}, "properties": {"repobilityId": "09aec9f7f0e0ef5c", "scanner": "scanner-primary", "fingerprint": "c92221245c6c7e8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c670d7d4570549a4", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/test/cli-run-contract.test.ts:236"}, "properties": {"repobilityId": "fc8e0871253fde9d", "scanner": "scanner-primary", "fingerprint": "c670d7d4570549a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-842e5fc3a1613e13", "level": "note", "message": {"text": "Legacy-named symbol `prj_old` in packages/canonry/test/vercel-traffic-config.test.ts:47"}, "properties": {"repobilityId": "5788e4b16c248a3b", "scanner": "scanner-primary", "fingerprint": "842e5fc3a1613e13", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-848ffcbb72e3596c", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/canonry/test/location-commands.test.ts:381"}, "properties": {"repobilityId": "0b56783e609ded49", "scanner": "scanner-primary", "fingerprint": "848ffcbb72e3596c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87897d568743f4e3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/canonry/test/setup.test.ts:17"}, "properties": {"repobilityId": "c5822b0c8dea1d47", "scanner": "scanner-primary", "fingerprint": "87897d568743f4e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4038e93abe5ed6bf", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/test/run-coordinator.test.ts:180"}, "properties": {"repobilityId": "6a9eee1f8931dd83", "scanner": "scanner-primary", "fingerprint": "4038e93abe5ed6bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b935527e1cbb5609", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/test/intelligence-service.test.ts:582"}, "properties": {"repobilityId": "bf9df7d4f80c8bb9", "scanner": "scanner-primary", "fingerprint": "b935527e1cbb5609", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d2bcfbb62ce5f95", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/canonry/test/traffic-jsonl-degrade.test.ts:3"}, "properties": {"repobilityId": "52651c184c7aa608", "scanner": "scanner-primary", "fingerprint": "0d2bcfbb62ce5f95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6d801244aa55d16", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/canonry/test/agent-providers.test.ts:270"}, "properties": {"repobilityId": "5963df4699026378", "scanner": "scanner-primary", "fingerprint": "e6d801244aa55d16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35da946703a285bd", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-traffic/src/ip-verify.ts:97"}, "properties": {"repobilityId": "e512871f70b2d703", "scanner": "scanner-primary", "fingerprint": "35da946703a285bd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09d172fb08a6d0af", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/integration-traffic/src/rules.ts:50"}, "properties": {"repobilityId": "6acbeae058416140", "scanner": "scanner-primary", "fingerprint": "09d172fb08a6d0af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d98818a274311e0", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/integration-traffic/src/classifier.ts:10"}, "properties": {"repobilityId": "88e543de3fd307f4", "scanner": "scanner-primary", "fingerprint": "3d98818a274311e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef08c2038365a2c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-traffic/src/types.ts:29"}, "properties": {"repobilityId": "a98d0ea4df750fcf", "scanner": "scanner-primary", "fingerprint": "ef08c2038365a2c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64fb56ca8f3ba060", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/integration-traffic/test/analysis.test.ts:169"}, "properties": {"repobilityId": "b7d9c948514a89ec", "scanner": "scanner-primary", "fingerprint": "64fb56ca8f3ba060", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c244e1523eab037d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/integration-traffic/test/analysis.test.ts:496"}, "properties": {"repobilityId": "9c8f31038b76fbee", "scanner": "scanner-primary", "fingerprint": "c244e1523eab037d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-085f31ef616dac39", "level": "note", "message": {"text": "Legacy-named symbol `toneOld` in scripts/sov-rework-analysis.ts:385"}, "properties": {"repobilityId": "a4d527651373b391", "scanner": "scanner-primary", "fingerprint": "085f31ef616dac39", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8be61d4f9a8c51b2", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/sov-rework-analysis.ts:67"}, "properties": {"repobilityId": "bfc474f357104c6b", "scanner": "scanner-primary", "fingerprint": "8be61d4f9a8c51b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6adf8bed4f9928c8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/worker/test/worker.test.ts:91"}, "properties": {"repobilityId": "556607ec6c7bc6a0", "scanner": "scanner-primary", "fingerprint": "6adf8bed4f9928c8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-35d0cb9b0fd9b284", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/build-dashboard.ts:158"}, "properties": {"repobilityId": "f4c23d31a0216aab", "scanner": "scanner-primary", "fingerprint": "35d0cb9b0fd9b284", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b5649c3919e1d0f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/api.ts:260"}, "properties": {"repobilityId": "3b3265676dca6d37", "scanner": "scanner-primary", "fingerprint": "4b5649c3919e1d0f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08ab82371ffd49e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/api.ts:185"}, "properties": {"repobilityId": "ecc3538197f24eb6", "scanner": "scanner-primary", "fingerprint": "08ab82371ffd49e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5d4b3ec9081a2a71", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/api-aero.ts:77"}, "properties": {"repobilityId": "f7391fdce8286ff6", "scanner": "scanner-primary", "fingerprint": "5d4b3ec9081a2a71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-34bb8ff7fdf50803", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/src/api-aero.ts:90"}, "properties": {"repobilityId": "9037e2af865eff04", "scanner": "scanner-primary", "fingerprint": "34bb8ff7fdf50803", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-12f1f567d2fdb3a8", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/src/App.tsx:230"}, "properties": {"repobilityId": "ec71384f669d0c02", "scanner": "scanner-primary", "fingerprint": "12f1f567d2fdb3a8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5156ccdfca99c8e2", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/components/project/GbpSection.tsx:97"}, "properties": {"repobilityId": "b8b9ea1030d5d882", "scanner": "scanner-primary", "fingerprint": "5156ccdfca99c8e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2442f4b494893964", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/src/components/project/DiscoverySection.tsx:117"}, "properties": {"repobilityId": "974994a07cc5a666", "scanner": "scanner-primary", "fingerprint": "2442f4b494893964", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f0be3d4340be8d2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/pages/TrafficSourceDetailPage.tsx:143"}, "properties": {"repobilityId": "ede0e6b23520f8bf", "scanner": "scanner-primary", "fingerprint": "5f0be3d4340be8d2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37e1d26e359f7dfb", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/src/pages/SetupPage.tsx:129"}, "properties": {"repobilityId": "b258b83dc3466e5b", "scanner": "scanner-primary", "fingerprint": "37e1d26e359f7dfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e441448e60a44b5e", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/pages/ProjectPage.tsx:1273"}, "properties": {"repobilityId": "24ba768f7c103267", "scanner": "scanner-primary", "fingerprint": "e441448e60a44b5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff90f759700edaad", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/pages/ReportPage.tsx:415"}, "properties": {"repobilityId": "d7def332411d3553", "scanner": "scanner-primary", "fingerprint": "ff90f759700edaad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a78ceb6b1027ffd1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/visibility-trend-helpers.ts:58"}, "properties": {"repobilityId": "1613e606f0ae9f33", "scanner": "scanner-primary", "fingerprint": "a78ceb6b1027ffd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0cb45127a165e0f6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/lib/traffic-event-filter.ts:122"}, "properties": {"repobilityId": "844142ce57c68303", "scanner": "scanner-primary", "fingerprint": "0cb45127a165e0f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8501f393565897d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/router/routes.tsx:6"}, "properties": {"repobilityId": "e01b3f71b8f72b00", "scanner": "scanner-primary", "fingerprint": "8501f393565897d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e88514b53d3eae82", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/web/src/queries/mutations.ts:298"}, "properties": {"repobilityId": "c33c2f422da98ced", "scanner": "scanner-primary", "fingerprint": "e88514b53d3eae82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d400187b1ee7119e", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/web/src/queries/use-dashboard.ts:45"}, "properties": {"repobilityId": "46a6a92e87e7cc4b", "scanner": "scanner-primary", "fingerprint": "d400187b1ee7119e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18cf512942e8900c", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/queries/use-project-dashboard.ts:40"}, "properties": {"repobilityId": "13713eb662f29766", "scanner": "scanner-primary", "fingerprint": "18cf512942e8900c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7d304d394095b1e", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/src/queries/server-traffic.ts:116"}, "properties": {"repobilityId": "c8d6b51282447c79", "scanner": "scanner-primary", "fingerprint": "d7d304d394095b1e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c9f0e4ff147c1f1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/queries/query-client.ts:9"}, "properties": {"repobilityId": "224f0ae84ffb5412", "scanner": "scanner-primary", "fingerprint": "3c9f0e4ff147c1f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-557c40dc6d9ba3a2", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/test/app.test.tsx:14"}, "properties": {"repobilityId": "103413c737d75d1d", "scanner": "scanner-primary", "fingerprint": "557c40dc6d9ba3a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd213a5ef208b80e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/ga-connect.test.ts:6"}, "properties": {"repobilityId": "38ab6f1a4bf2caff", "scanner": "scanner-primary", "fingerprint": "cd213a5ef208b80e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a216dda9c04c98fa", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/test/find-evidence-for-modal.test.ts:46"}, "properties": {"repobilityId": "5732ddd7f3378b7e", "scanner": "scanner-primary", "fingerprint": "a216dda9c04c98fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d45d1e0b4d5c1c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/mock-fetch.ts:4"}, "properties": {"repobilityId": "1de27b11fab439bc", "scanner": "scanner-primary", "fingerprint": "0d45d1e0b4d5c1c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ae304ce93fce3a6d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/test/run-tracker-store.test.ts:31"}, "properties": {"repobilityId": "973758fa9c1a557b", "scanner": "scanner-primary", "fingerprint": "ae304ce93fce3a6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a22355e118f1e1fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/test/api-fetch-headers.test.ts:6"}, "properties": {"repobilityId": "8846748f0fbdcfdb", "scanner": "scanner-primary", "fingerprint": "a22355e118f1e1fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9004ce0a4a0516b7", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/test/gbp-section.test.tsx:155"}, "properties": {"repobilityId": "66ff4bea07526c50", "scanner": "scanner-primary", "fingerprint": "9004ce0a4a0516b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-183de7434ee079f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/test/build-dashboard.test.ts:661"}, "properties": {"repobilityId": "3088feda5e4e3aa5", "scanner": "scanner-primary", "fingerprint": "183de7434ee079f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e6fd93f9adf64c5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/test/setup-launched-run-polling.test.tsx:3"}, "properties": {"repobilityId": "63ffaf2b827b27e8", "scanner": "scanner-primary", "fingerprint": "9e6fd93f9adf64c5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-748f2768a91017b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/test/traffic-event-filter.test.ts:266"}, "properties": {"repobilityId": "5b7f6cba0b146fe4", "scanner": "scanner-primary", "fingerprint": "748f2768a91017b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85e56e083882640a", "level": "error", "message": {"text": "Dangling fetch: POST https://ainyc.ai/api/telemetry (packages/canonry/test/setup.test.ts:17)"}, "properties": {"repobilityId": "ccf9d41b307a5f89", "scanner": "scanner-primary", "fingerprint": "85e56e083882640a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2e898c4b753eb28", "level": "error", "message": {"text": "Dangling fetch: GET https://example.com/x (packages/canonry/test/setup.test.ts:25)"}, "properties": {"repobilityId": "84412582724c011f", "scanner": "scanner-primary", "fingerprint": "b2e898c4b753eb28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a16e313a53ab6d7", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:1/none (packages/canonry/test/setup.test.ts:37)"}, "properties": {"repobilityId": "4416eb2de94ca551", "scanner": "scanner-primary", "fingerprint": "3a16e313a53ab6d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfa7a4d7d2984914", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${workerPort}/health (apps/worker/test/worker.test.ts:91)"}, "properties": {"repobilityId": "b0f7b880ef3b8de0", "scanner": "scanner-primary", "fingerprint": "dfa7a4d7d2984914", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca86bdda6a980aec", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/\u2026 (apps/web/src/api.ts:185)"}, "properties": {"repobilityId": "036905915a17b1ee", "scanner": "scanner-primary", "fingerprint": "ca86bdda6a980aec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1e1ee09590b0a49", "level": "note", "message": {"text": "Unused endpoint: GET /projects"}, "properties": {"repobilityId": "a3f357f63cddbfbf", "scanner": "scanner-primary", "fingerprint": "c1e1ee09590b0a49", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-678c6e4b90d6c8d1", "level": "note", "message": {"text": "Unused endpoint: GET /cdp/status"}, "properties": {"repobilityId": "3b44c4c42f201559", "scanner": "scanner-primary", "fingerprint": "678c6e4b90d6c8d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-968d4311ce08cfe9", "level": "note", "message": {"text": "Unused endpoint: GET /openapi.json"}, "properties": {"repobilityId": "44be18a820c32816", "scanner": "scanner-primary", "fingerprint": "968d4311ce08cfe9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bfcf35f75a7fc46", "level": "note", "message": {"text": "Unused endpoint: GET /notifications/events"}, "properties": {"repobilityId": "5e5a641854daa9d2", "scanner": "scanner-primary", "fingerprint": "1bfcf35f75a7fc46", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a88e32ba95dda7c", "level": "note", "message": {"text": "Unused endpoint: POST /apply"}, "properties": {"repobilityId": "3f82117b4ad98e28", "scanner": "scanner-primary", "fingerprint": "9a88e32ba95dda7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec44c1dacd8c8ee0", "level": "note", "message": {"text": "Unused endpoint: GET /keys"}, "properties": {"repobilityId": "fe7d540f8e84517d", "scanner": "scanner-primary", "fingerprint": "ec44c1dacd8c8ee0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f53365bbb1c16b8", "level": "note", "message": {"text": "Unused endpoint: POST /keys"}, "properties": {"repobilityId": "e15bd59de972bab3", "scanner": "scanner-primary", "fingerprint": "0f53365bbb1c16b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-afc064028ae39ea9", "level": "note", "message": {"text": "Unused endpoint: GET /history"}, "properties": {"repobilityId": "46dac0a00ba95184", "scanner": "scanner-primary", "fingerprint": "afc064028ae39ea9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b97321fc4874886", "level": "note", "message": {"text": "Unused endpoint: GET /telemetry"}, "properties": {"repobilityId": "68cb0e2a02a76f54", "scanner": "scanner-primary", "fingerprint": "1b97321fc4874886", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-512ccb0fd0b230ba", "level": "note", "message": {"text": "Unused endpoint: GET /settings"}, "properties": {"repobilityId": "1660ef359c90d1bd", "scanner": "scanner-primary", "fingerprint": "512ccb0fd0b230ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6648f58167b044d3", "level": "note", "message": {"text": "Unused endpoint: GET /backlinks/status"}, "properties": {"repobilityId": "b7e8d8784d3e1570", "scanner": "scanner-primary", "fingerprint": "6648f58167b044d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dd0926a86dfe17e2", "level": "note", "message": {"text": "Unused endpoint: POST /backlinks/install"}, "properties": {"repobilityId": "b8de389e1231f92c", "scanner": "scanner-primary", "fingerprint": "dd0926a86dfe17e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a1faacd12381c071", "level": "note", "message": {"text": "Unused endpoint: GET /backlinks/syncs/latest"}, "properties": {"repobilityId": "df24b566f63da1d3", "scanner": "scanner-primary", "fingerprint": "a1faacd12381c071", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de7e65ac92d7625d", "level": "note", "message": {"text": "Unused endpoint: GET /backlinks/syncs"}, "properties": {"repobilityId": "f34408372c2c5f5d", "scanner": "scanner-primary", "fingerprint": "de7e65ac92d7625d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2dcccc5c5720afdc", "level": "note", "message": {"text": "Unused endpoint: GET /backlinks/releases"}, "properties": {"repobilityId": "c8dd469bda84b061", "scanner": "scanner-primary", "fingerprint": "2dcccc5c5720afdc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c22116d864b4c7e5", "level": "note", "message": {"text": "Unused endpoint: GET /backlinks/latest-release"}, "properties": {"repobilityId": "77edc9828d251e92", "scanner": "scanner-primary", "fingerprint": "c22116d864b4c7e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}