{"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-3ac6eb652da8f5fd", "name": "Possibly dead Python function: format_entry_for_display", "shortDescription": {"text": "Possibly dead Python function: format_entry_for_display"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d78e249c15da7cec", "name": "Stray `console.log` in TS/JS \u2014 packages/relay/src/relay-core.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/relay/src/relay-core.ts:97"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1509e8a3971fb0a5", "name": "Stray `console.log` in TS/JS \u2014 packages/relay/src/signal-emitter.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/relay/src/signal-emitter.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-842efdeb9c2bb43d", "name": "Stray `console.log` in TS/JS \u2014 packages/relay/src/access-control.ts:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/relay/src/access-control.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-6d450dd885a8661c", "name": "Stray `console.log` in TS/JS \u2014 packages/relay/src/maildir-store.ts:91", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/relay/src/maildir-store.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-c918844be3c32d5f", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/scripts/build.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/scripts/build.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-50374c9e07a1df72", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/cli.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/cli.ts:40"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a2877894971e7e4", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/config-commands.ts:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/config-commands.ts:78"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38a1e1f91b519169", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/package-validate-command.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/package-validate-command.ts:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a1417958d1415317", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/cleanup-command.ts:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/cleanup-command.ts:96"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-365be2f313d21432", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/init-wizard.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/init-wizard.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-298a4e38f1bfa25b", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/package-init-command.ts:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/package-init-command.ts:131"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0bd74336ec17fd0b", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-remove.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-remove.ts:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-360702e56226d3fb", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-list.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-list.ts:121"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bccdd8adf076443e", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/cache-commands.ts:229", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/cache-commands.ts:229"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad03b1b8a074f678", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/update.ts:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/update.ts:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d999495504f0017", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/install.ts:139", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/install.ts:139"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a5aa58b6875cbaa", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/uninstall.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/uninstall.ts:95"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8acd7a3731a3a6cd", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-refresh.ts:148", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-refresh.ts:148"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c479857ed9609406", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-dispatcher.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-dispatcher.ts:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1622d08ab79ab1f2", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-add.ts:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-add.ts:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84aef65158d9c7c2", "name": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/cache-dispatcher.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/cache-dispatcher.ts:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fdba45d980dabd42", "name": "Stray `console.log` in TS/JS \u2014 scripts/export-openapi.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-openapi.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9048ca9b56073876", "name": "Stray `console.log` in TS/JS \u2014 examples/extensions/hello-world/index.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 examples/extensions/hello-world/index.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37e66b95dc321903", "name": "TODO/FIXME marker in shipping code \u2014 templates/relay-adapter/src/my-adapter.ts:27", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 templates/relay-adapter/src/my-adapter.ts:27"}, "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-b280dd872be266f0", "name": "Stray `console.log` in TS/JS \u2014 apps/obsidian-plugin/build-plugins/patch-electron-compat.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/obsidian-plugin/build-plugins/patch-electron-compat.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8347f7e2137af40", "name": "Stray `console.log` in TS/JS \u2014 apps/obsidian-plugin/build-plugins/fix-dirname-polyfill.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/obsidian-plugin/build-plugins/fix-dirname-polyfill.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-223d548bdad58826", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/obsidian-plugin/src/components/ContextBar.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/obsidian-plugin/src/components/ContextBar.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c63d965a3f4157b4", "name": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:102", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:102"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17cb22dd8d1a18d3", "name": "TODO/FIXME marker in shipping code \u2014 apps/server/src/services/extensions/extension-templates.ts:159", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/server/src/services/extensions/extension-templates.ts:159"}, "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-ae5509d8f85d5a65", "name": "Stray `console.log` in TS/JS \u2014 apps/server/src/services/extensions/__tests__/extension-compiler.test.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/services/extensions/__tests__/extension-compiler.test.ts:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6a111218fe9786a7", "name": "TODO/FIXME marker in shipping code \u2014 apps/server/src/routes/marketplace.ts:424", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/server/src/routes/marketplace.ts:424"}, "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-47c48944977b8af1", "name": "Stray `console.log` in TS/JS \u2014 apps/server/src/routes/__tests__/extensions.test.ts:208", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/routes/__tests__/extensions.test.ts:208"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25a4cb5a3f36f29b", "name": "Stray `console.log` in TS/JS \u2014 apps/client/scripts/generate-notification-sound.ts:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/client/scripts/generate-notification-sound.ts:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1abd98132925a6ff", "name": "Stray `console.log` in TS/JS \u2014 apps/client/src/dev/showcases/ToolShowcases.tsx:226", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/client/src/dev/showcases/ToolShowcases.tsx:226"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-329e14bbcd820cde", "name": "Stray `console.log` in TS/JS \u2014 apps/client/src/dev/showcases/StatusShowcases.tsx:211", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/client/src/dev/showcases/StatusShowcases.tsx:211"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-820d9f2d70bf45aa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/topology-agent-node.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/topology-agent-node.tsx:37"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85441b2f8fccc088", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/TablesAdvancedSections.tsx:422", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/TablesAdvancedSections.tsx:422"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc6a01a4a0b2b3e9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/topology-adapter-node.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/topology-adapter-node.tsx:38"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-67e8d16dd18545d0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/discovery/ui/ExistingAgentCard.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/discovery/ui/ExistingAgentCard.tsx:15"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3bc642a1bc4f3ff", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/discovery/ui/CandidateCard.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/discovery/ui/CandidateCard.tsx:82"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-62a10da481976038", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/session/ui/SessionRowCompact.tsx:12", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/session/ui/SessionRowCompact.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02d0ba83798532d7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/session/ui/SessionRowFull.tsx:342", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/session/ui/SessionRowFull.tsx:342"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2101299a5a368e78", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/activity/ui/ActorBadge.tsx:60", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/activity/ui/ActorBadge.tsx:60"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37e2953d139c734b", "name": "Stray `console.log` in TS/JS \u2014 apps/client/src/layers/features/extensions/model/extension-loader.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/client/src/layers/features/extensions/model/extension-loader.ts:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcc049df43d270e9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/PackageCard.tsx:126", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/PackageCard.tsx:126"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c2fdac54522a6e3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/MarketplaceSourcesVi", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/MarketplaceSourcesView.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-0f0f8de85245f5e5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/PackageDetailSheet.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/PackageDetailSheet.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61f57f5301f5700c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ConfigTab.tsx:227", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ConfigTab.tsx:227"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae0d467088552003", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ToolkitTab.tsx:85", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ToolkitTab.tsx:85"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10f7e6f3d9767e0d", "name": "TODO/FIXME marker in shipping code \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ToolkitTab.tsx:113", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ToolkitTab.tsx:113"}, "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-e3a23f2d7e7aa3ed", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ChannelBindingCar", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ChannelBindingCard.tsx:171"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef8b0a16a0bc7a2d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ChannelPicker.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ChannelPicker.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a267859fa87250a5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ToolsTab.tsx:317", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ToolsTab.tsx:317"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee73838b1ed72dba", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentCard.tsx:33", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentCard.tsx:33"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82f303728d0677da", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/BindingEdge.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/BindingEdge.tsx:105"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c4a6868a17419764", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AdapterNode.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AdapterNode.tsx:83"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7b6ae59effb1cf9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentHealthDetail.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentHealthDetail.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40bb401e1e983d32", "name": "React Flow <MiniMap> without dark background \u2014 apps/client/src/layers/features/mesh/ui/TopologyGraph.tsx:292", "shortDescription": {"text": "React Flow <MiniMap> without dark background \u2014 apps/client/src/layers/features/mesh/ui/TopologyGraph.tsx:292"}, "fullDescription": {"text": "A bare <MiniMap> renders with the vendor's white default in dark themes. Wrap the canvas in a class that overrides `.react-flow__minimap` background, or pass an explicit `style`/`maskColor`/`bgColor`.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.minimap.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-600c3cf54b10f848", "name": "React Flow <Controls> without dark theming \u2014 apps/client/src/layers/features/mesh/ui/TopologyGraph.tsx:306", "shortDescription": {"text": "React Flow <Controls> without dark theming \u2014 apps/client/src/layers/features/mesh/ui/TopologyGraph.tsx:306"}, "fullDescription": {"text": "`<Controls>` ships with white buttons. Override `.react-flow__controls` and `.react-flow__controls-button` in your stylesheet or pass a styled wrapper.\n\nWhy: P1 in CHECKLIST.md \u2014 vendor defaults bleed light through.\nRule id: fq.controls.no-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14baa8d3c5c5ed14", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentNode.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentNode.tsx:79"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2fa8a406ecf1eedd", "name": "Custom React Flow node registered without explicit width/height \u2014 apps/client/src/layers/features/mesh/ui/__tests__/Adap", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 apps/client/src/layers/features/mesh/ui/__tests__/AdapterNode.test.tsx:59"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c20285a35199d167", "name": "Custom React Flow node registered without explicit width/height \u2014 apps/client/src/layers/features/mesh/ui/__tests__/Agen", "shortDescription": {"text": "Custom React Flow node registered without explicit width/height \u2014 apps/client/src/layers/features/mesh/ui/__tests__/AgentNode.reduced-motion.test.tsx:46"}, "fullDescription": {"text": "When you register a custom node type via `nodeTypes`, the RFNode object you build must include `width` and `height` props. Without them, MiniMap renders ZERO mini-nodes for that type and `fitView` underestimates the bounds (cuts off lane labels, etc.). Add `width: \u2026, height: \u2026` to the node object. See P-I.\n\nWhy: P-I in CHECKLIST.md \u2014 RF MiniMap + fitView need explicit dims on custom nodes.\nRule id: fq.rfnode.no-dims"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-110d27f790215b1d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/commands/ui/CommandPalette.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/commands/ui/CommandPalette.tsx:90"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cba2d1b492744053", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/MessageRow.tsx:61", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/MessageRow.tsx:61"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9343c38bcc2faeed", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/RelayHealthBar.tsx:133", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/RelayHealthBar.tsx:133"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a94f5c4fd7c61863", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/DeadLetterSection.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/DeadLetterSection.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3bab84188d300b5e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/ConversationRow.tsx:204", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/ConversationRow.tsx:204"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e81fdaef5f165bf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/wizard/ConfirmStep.tsx:37", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/wizard/ConfirmStep.tsx:37"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bbf9d21075243c8c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/adapter/AdapterBindingRow.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/adapter/AdapterBindingRow.tsx:36"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c48799a6667d654", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/adapter/AdapterCardError.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/adapter/AdapterCardError.tsx:39"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-291580c7e2e8cc26", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/files/ui/FilePalette.tsx:76", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/files/ui/FilePalette.tsx:76"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a149d1a2b70ee6f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/MemoryRecallBlock.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/MemoryRecallBlock.tsx:156"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c9e5d9a0b89ede7", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/SubagentBlock.tsx:6", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/SubagentBlock.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32a1ea33f1942bbb", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/FileAttachmentList.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/FileAttachmentList.tsx:88"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da5a55f75ef9268a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/UserMessageContent.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/UserMessageContent.tsx:17"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e94cbae195e213fc", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tools/QuestionAnswerSummary", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tools/QuestionAnswerSummary.tsx:81"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca53683bc47b998b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskActiveForm.tsx:21", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskActiveForm.tsx:21"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75fb8b04fdff2f73", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskDetailRow.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskDetailRow.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-044439a0c77dd1df", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskRow.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskRow.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e299991db7e426c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/primitives/CompactPendingRo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/primitives/CompactPendingRow.tsx:32"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-193d49530bb7ec32", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/PromptSuggestionChips", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/PromptSuggestionChips.tsx:31"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cfabcb639c0558cf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/AnimatedPlaceholder.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/AnimatedPlaceholder.tsx:36"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cad632266b75950b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/FileChipBar.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/FileChipBar.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25fa5ead67b59042", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/feature-promos/ui/PromoCard.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/feature-promos/ui/PromoCard.tsx:57"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65a76bb8a2b82267", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/SidebarAgentHeader.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/SidebarAgentHeader.tsx:39"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fb90b927cafa523", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/ConnectionsView.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/ConnectionsView.tsx:267"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e0d657fb8be40c3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/TasksView.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/TasksView.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8236eccf56d666d1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/lib/agent-columns.tsx:8", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/lib/agent-columns.tsx:83"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70a06c3f8ad50e61", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/ui/AgentRow.tsx:145", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/ui/AgentRow.tsx:145"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9f6337197d5af1d0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/ui/SessionLaunchPopover", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/ui/SessionLaunchPopover.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc20386d6bc4a42f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/activity-feed-page/ui/ActivityRow.t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/activity-feed-page/ui/ActivityRow.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6165dfbf664a6031", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/ChannelSettingRow.tsx:5", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/ChannelSettingRow.tsx:57"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d73de2d7879800ea", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/TunnelConnected.tsx:68", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/TunnelConnected.tsx:68"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad7ce1e64cbaacf4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/external-mcp/ApiKeySect", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/external-mcp/ApiKeySection.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a296cb686099db2c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/external-mcp/EndpointRo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/external-mcp/EndpointRow.tsx:16"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c20a7b6d78698bb5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/onboarding/ui/SystemRequirementsSte", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/onboarding/ui/SystemRequirementsStep.tsx:320"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0bd509b64cfd6a37", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/onboarding/ui/NoAgentsFound.tsx:75", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/onboarding/ui/NoAgentsFound.tsx:75"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fa67b205aeba30b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentPreviewPane", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentPreviewPanel.tsx:41"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cdc43d390eb080ab", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentCommandItem", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentCommandItem.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0611b43ee91841a3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentSubMenu.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentSubMenu.tsx:71"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-555716a79c8f7aa1", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TimezoneCombobox.tsx:78", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TimezoneCombobox.tsx:78"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3584e65c49c37104", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/AgentPicker.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/AgentPicker.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dce2949589cbb84a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TaskRunHistoryPanel.tsx:20", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TaskRunHistoryPanel.tsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c025359324cf8683", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TaskRow.tsx:277", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TaskRow.tsx:277"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fbcc005b30fdf623", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-creation/ui/ConfigureStep.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-creation/ui/ConfigureStep.tsx:46"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e141bc05da3bc74f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-sidebar/__tests__/RecentA", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-sidebar/__tests__/RecentAgentItem.test.tsx:21"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7aca6fa7f4e43022", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/ContextItem.tsx:56", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/ContextItem.tsx:56"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee148e379d269b4f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/GitStatusItem.tsx:41", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/GitStatusItem.tsx:41"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-380ae1437491b2a3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/ModelConfigPopover.tsx:12", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/ModelConfigPopover.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-588d1e9afcfb1d3d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/canvas/ui/CanvasHeader.tsx:40", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/canvas/ui/CanvasHeader.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a8cae5f7a65a13c9", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-attention/ui/OfflineAgent", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-attention/ui/OfflineAgentDetailSheet.tsx:40"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38d8851b32d6fd55", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-attention/ui/AttentionIte", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-attention/ui/AttentionItem.tsx:38"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b62be98bf28ebf19", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/shared/ui/DirectoryPicker.tsx:320", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/shared/ui/DirectoryPicker.tsx:320"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ec5ace47d7494d2a", "name": "Stray `console.log` in TS/JS \u2014 apps/site/scripts/generate-api-docs.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/site/scripts/generate-api-docs.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-636ad3d32793f644", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/layout.tsx:61", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/layout.tsx:61"}, "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-9b0ae49071358969", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/marketplace/[slug]/page.tsx:119", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/marketplace/[slug]/page.tsx:119"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4016a8b2442f0f64", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/features/[slug]/page.tsx:88", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/features/[slug]/page.tsx:88"}, "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-c74eb0421c3acaea", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/features/category/[category]/page.ts", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/features/category/[category]/page.tsx:108"}, "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-cbf2832543718bb6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/app/(marketing)/test/heroes/variants/h8-device-carous", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/app/(marketing)/test/heroes/variants/h8-device-carousel.tsx:152"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-13fb62b923d1ab70", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/app/(marketing)/test/heroes/variants/h2-split-termina", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/app/(marketing)/test/heroes/variants/h2-split-terminal.tsx:306"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90e6ad4c22073ad4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/blog/[slug]/page.tsx:111", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/blog/[slug]/page.tsx:111"}, "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-1e812f4fbc446657", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/layers/features/marketing/ui/ConsoleMockup.tsx:42", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/layers/features/marketing/ui/ConsoleMockup.tsx:42"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-977e7a56a316c3f6", "name": "TODO/FIXME marker in shipping code \u2014 apps/site/src/layers/shared/ui/index.ts:3", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/site/src/layers/shared/ui/index.ts:3"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e44db87d6c705427", "name": "Stray `console.log` in TS/JS \u2014 .claude/scripts/spec-manifest-ops.ts:279", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 .claude/scripts/spec-manifest-ops.ts:279"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-764b102b9c6f997b", "name": "Stray `console.log` in TS/JS \u2014 .claude/scripts/template-fetch.ts:1398", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 .claude/scripts/template-fetch.ts:1398"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "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-9ab2eab9c8357423", "name": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}-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-81eb6a94fcbfa67b", "name": "Possible secret in packages/test-utils/src/mock-factories.ts", "shortDescription": {"text": "Possible secret in packages/test-utils/src/mock-factories.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-96fe11da16628f87", "name": "Insecure pattern 'node_child_process' in packages/cli/scripts/build.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/cli/scripts/build.ts:2"}, "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-824351771c803bcb", "name": "Insecure pattern 'node_child_process' in packages/cli/src/check-claude.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/cli/src/check-claude.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-9418af670e74238c", "name": "Insecure pattern 'exec_used' in packages/cli/src/cli.ts:586", "shortDescription": {"text": "Insecure pattern 'exec_used' in packages/cli/src/cli.ts:586"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2b37ce266d092e7", "name": "Insecure pattern 'node_child_process' in packages/cli/src/config-commands.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/cli/src/config-commands.ts:3"}, "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-ae853d3641ef69f1", "name": "Insecure pattern 'dangerous_innerhtml' in specs/site-feature-category-pages/03-tasks.json:37", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/site-feature-category-pages/03-tasks.json:37"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2e02cd6b729f1389", "name": "Insecure pattern 'dangerous_innerhtml' in specs/og-seo-ai-readability-overhaul/03-tasks.json:85", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/og-seo-ai-readability-overhaul/03-tasks.json:85"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cd5a7bb99a285171", "name": "Insecure pattern 'new_function_used' in specs/ext-platform-04-agent-extensions/03-tasks.json:121", "shortDescription": {"text": "Insecure pattern 'new_function_used' in specs/ext-platform-04-agent-extensions/03-tasks.json:121"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3010dfeeae42349b", "name": "Insecure pattern 'node_child_process' in specs/marketplace-05-claude-code-format-superset/03-tasks.json:169", "shortDescription": {"text": "Insecure pattern 'node_child_process' in specs/marketplace-05-claude-code-format-superset/03-tasks.json:169"}, "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-7a769698f23656ce", "name": "Insecure pattern 'dangerous_innerhtml' in specs/memory-recall-indicator/03-tasks.json:145", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/memory-recall-indicator/03-tasks.json:145"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e1f8f8e893f9bb4", "name": "Possible secret in specs/external-mcp-access/03-tasks.json", "shortDescription": {"text": "Possible secret in specs/external-mcp-access/03-tasks.json"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-43877aa6dbd6aeb1", "name": "Insecure pattern 'dangerous_innerhtml' in specs/ext-platform-01-agent-ui-control/03-tasks.json:97", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/ext-platform-01-agent-ui-control/03-tasks.json:97"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-288dcfade2657237", "name": "Insecure pattern 'cors_wildcard' in specs/server-client-code-review-fixes/03-tasks.json:37", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in specs/server-client-code-review-fixes/03-tasks.json:37"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-05fac9ebb4e922cd", "name": "Insecure pattern 'node_child_process' in specs/settings-reset-restart/03-tasks.json:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in specs/settings-reset-restart/03-tasks.json:13"}, "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-f51eaafede6ba20d", "name": "Insecure pattern 'dangerous_innerhtml' in specs/site-feature-catalog/03-tasks.json:61", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/site-feature-catalog/03-tasks.json:61"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f29446b7b07d8c0", "name": "Insecure pattern 'node_child_process' in specs/marketplace-04-web-and-registry/03-tasks.json:253", "shortDescription": {"text": "Insecure pattern 'node_child_process' in specs/marketplace-04-web-and-registry/03-tasks.json:253"}, "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-07d7335cfa5e70bc", "name": "Insecure pattern 'node_child_process' in apps/obsidian-plugin/build-plugins/patch-electron-compat.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/obsidian-plugin/build-plugins/patch-electron-compat.ts:14"}, "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-12d22f86e6b96af0", "name": "Possible secret in apps/server/src/middleware/__tests__/mcp-auth.test.ts", "shortDescription": {"text": "Possible secret in apps/server/src/middleware/__tests__/mcp-auth.test.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b945f2ac0b74b6a8", "name": "Insecure pattern 'node_child_process' in apps/server/src/services/runtimes/claude-code/tooling/check-dependency.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/runtimes/claude-code/tooling/check-dependency.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-ac86a6a280e93815", "name": "Insecure pattern 'node_child_process' in apps/server/src/services/runtimes/claude-code/sdk/sdk-utils.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/runtimes/claude-code/sdk/sdk-utils.ts:2"}, "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-a18cb0ce4099e95e", "name": "Insecure pattern 'new_function_used' in apps/server/src/services/extensions/__tests__/extension-manager-server.test.ts:1", "shortDescription": {"text": "Insecure pattern 'new_function_used' in apps/server/src/services/extensions/__tests__/extension-manager-server.test.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (new_function_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-073cc3f69d9f5434", "name": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/package-fetcher.ts:24", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/package-fetcher.ts:24"}, "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-1f78e2306f990544", "name": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/transaction.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/transaction.ts:14"}, "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-9b850a8a5cc69097", "name": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/source-resolvers/git-subdir.ts:28", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/source-resolvers/git-subdir.ts:28"}, "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-fff93964a49d3d9e", "name": "Insecure pattern 'node_child_process' in apps/server/src/services/core/file-lister.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/core/file-lister.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-57f9ed09eaa51f23", "name": "Insecure pattern 'node_child_process' in apps/server/src/services/core/git-status.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/core/git-status.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-325f9e63aa77390f", "name": "Insecure pattern 'node_child_process' in apps/server/src/routes/admin.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/server/src/routes/admin.ts:2"}, "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-5125fceba7b87376", "name": "Possible secret in apps/server/src/routes/__tests__/config-mcp.test.ts", "shortDescription": {"text": "Possible secret in apps/server/src/routes/__tests__/config-mcp.test.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f76a07a4542e0527", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/client/src/layers/shared/model/__tests__/use-interactive-shortcut", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/client/src/layers/shared/model/__tests__/use-interactive-shortcuts.test.ts:30"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-603ee9f55cf31a02", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/client/src/layers/shared/model/__tests__/use-deep-link-scroll.tes", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/client/src/layers/shared/model/__tests__/use-deep-link-scroll.test.tsx:27"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-02422764638f6855", "name": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/layout.tsx:61", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/layout.tsx:61"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9cd576bae29c764a", "name": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/marketplace/[slug]/page.tsx:119", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/marketplace/[slug]/page.tsx:119"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-866b6a32a024b432", "name": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/features/[slug]/page.tsx:88", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/features/[slug]/page.tsx:88"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-754ceacd09c1a6e5", "name": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/features/category/[category]/page.tsx:108", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/features/category/[category]/page.tsx:108"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-20e9eb2f8413e87f", "name": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/blog/[slug]/page.tsx:111", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/blog/[slug]/page.tsx:111"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7dbcffb807d31990", "name": "Insecure pattern 'node_child_process' in apps/desktop/src/main/server-process.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/desktop/src/main/server-process.ts:2"}, "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-ce7576117e5474eb", "name": "Insecure pattern 'node_child_process' in .claude/scripts/spec-manifest-ops.ts:31", "shortDescription": {"text": "Insecure pattern 'node_child_process' in .claude/scripts/spec-manifest-ops.ts:31"}, "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-c7e09126c7516424", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/login-action@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-cab3430e135a46c8", "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-f0dde2c462751784", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-99613dc1ad09765c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@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-c098ebdea4e7053a", "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-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-5054672303399eca", "name": "Very large file: packages/relay/src/adapters/telegram/__tests__/telegram-adapter.test.ts (1489 lines)", "shortDescription": {"text": "Very large file: packages/relay/src/adapters/telegram/__tests__/telegram-adapter.test.ts (1489 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-b5ca2be3149afce6", "name": "Very large file: packages/relay/src/adapters/slack/__tests__/outbound.test.ts (1925 lines)", "shortDescription": {"text": "Very large file: packages/relay/src/adapters/slack/__tests__/outbound.test.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-2f28393e5e2dac62", "name": "Very large file: packages/relay/src/__tests__/relay-core.test.ts (1583 lines)", "shortDescription": {"text": "Very large file: packages/relay/src/__tests__/relay-core.test.ts (1583 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-4bda4ddccca1ee4c", "name": "Very large file: packages/shared/src/schemas.ts (1950 lines)", "shortDescription": {"text": "Very large file: packages/shared/src/schemas.ts (1950 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-0294c888e26d53c5", "name": "Very large file: apps/server/src/services/relay/__tests__/adapter-manager.test.ts (1635 lines)", "shortDescription": {"text": "Very large file: apps/server/src/services/relay/__tests__/adapter-manager.test.ts (1635 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-c6148b2df3cb1d31", "name": "Very large file: .claude/scripts/template-fetch.ts (1726 lines)", "shortDescription": {"text": "Very large file: .claude/scripts/template-fetch.ts (1726 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-63c3ff968f92be2e", "name": "39 TODO/FIXME markers", "shortDescription": {"text": "39 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-3f5eb5a4d7270c68", "name": "Node manifest has dependencies but no lockfile: packages/test-utils/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/test-utils/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-267a151f5b2d2ffa", "name": "Node manifest has dependencies but no lockfile: packages/marketplace/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/marketplace/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-3956a547afaa1c3b", "name": "Node manifest has dependencies but no lockfile: packages/a2a-gateway/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/a2a-gateway/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-0f4f5be174b24ea7", "name": "Node manifest has dependencies but no lockfile: packages/extension-api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/extension-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-ab3060c0a0085c67", "name": "Node manifest has dependencies but no lockfile: packages/mesh/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/mesh/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-40f2be5ea6a74c30", "name": "Node manifest has dependencies but no lockfile: packages/relay/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/relay/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-3f65e1ca9b00183a", "name": "Node manifest has dependencies but no lockfile: packages/eslint-config/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/eslint-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-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-8c2e3196a4ef0cdd", "name": "Node manifest has dependencies but no lockfile: packages/cli/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/cli/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-2699d5f16ae11282", "name": "Node manifest has dependencies but no lockfile: packages/shared/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/shared/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-ec1830d7b7399060", "name": "Node manifest has dependencies but no lockfile: packages/skills/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/skills/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-599516835ead7d6e", "name": "Node manifest has dependencies but no lockfile: packages/icons/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/icons/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-b2fdd93746102235", "name": "Node manifest has dependencies but no lockfile: templates/relay-adapter/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: templates/relay-adapter/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-9fa2ff0aeac2699d", "name": "Node manifest has dependencies but no lockfile: apps/obsidian-plugin/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/obsidian-plugin/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-5f12bbcc60e1f76c", "name": "Node manifest has dependencies but no lockfile: apps/server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/server/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9b8f493dac51a65f", "name": "Node manifest has dependencies but no lockfile: apps/client/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/client/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-482d2261cd0f01ce", "name": "Node manifest has dependencies but no lockfile: apps/site/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/site/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-d57b3f82d2270c5b", "name": "Node manifest has dependencies but no lockfile: apps/desktop/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/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-13c399c461b261dc", "name": "Node manifest has dependencies but no lockfile: apps/e2e/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/e2e/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 249 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 347 placeholder/mock markers across 148 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-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3a0715d490625a11", "name": "Agent authority lacks a verifier contract: .claude/agents/context-isolator.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/context-isolator.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-d48bbe0a998f4640", "name": "Agent instruction/config may expose a secret: .claude/agents/research-expert.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/agents/research-expert.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b61cf3bbbef67b3", "name": "Agent authority lacks a verifier contract: .claude/agents/code-reviewer.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/code-reviewer.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-395dc6ff28b75e36", "name": "Agent instruction/config may expose a secret: .claude/agents/react/react-tanstack-expert.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/agents/react/react-tanstack-expert.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cc6c966ef32fb44", "name": "Agent authority lacks a verifier contract: .claude/agents/typescript/typescript-expert.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/typescript/typescript-expert.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-30e3077aecab2385", "name": "Agent authority lacks a verifier contract: .claude/scripts/README-PACKAGE-MERGE.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/scripts/README-PACKAGE-MERGE.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-90b8350401f87d14", "name": "Agent authority lacks a verifier contract: .claude/commands/browsertest.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/browsertest.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-bf888e55fd3fb166", "name": "Agent authority lacks a verifier contract: .claude/commands/pm.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/pm.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-d4fcd09f24c2583e", "name": "Agent authority lacks a verifier contract: .claude/commands/browsertest:maintain.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/browsertest:maintain.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-58fe6e2f20044dbd", "name": "Agent authority lacks a verifier contract: .claude/commands/debug/logs.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/debug/logs.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-c64b05d15509821b", "name": "Agent authority lacks a verifier contract: .claude/commands/debug/test.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/debug/test.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-e27b9d550d7ac331", "name": "Agent authority lacks a verifier contract: .claude/commands/debug/types.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/debug/types.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-919d4b52bdce5aa9", "name": "Agent authority lacks a verifier contract: .claude/commands/git/push.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/git/push.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-c4506b86c6d431da", "name": "Agent authority lacks a verifier contract: .claude/commands/git/commit.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/git/commit.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-a053d499b9d9001e", "name": "Agent authority lacks a verifier contract: .claude/commands/chat/self-test.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/chat/self-test.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-dca940b40310ed34", "name": "Agent authority lacks a verifier contract: .claude/commands/spec/create.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/spec/create.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-f3c281ecdc701e4b", "name": "Agent instruction contains unpinned remote install: .claude/commands/spec/create.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/spec/create.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-4f64b9d63e1747ae", "name": "Agent authority lacks a verifier contract: .claude/commands/spec/doc-update.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/spec/doc-update.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-c0a2ad2c7ba6e20e", "name": "Agent authority lacks a verifier contract: .claude/commands/spec/execute.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/spec/execute.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-3c67c7e88656a812", "name": "Agent authority lacks a verifier contract: .claude/commands/spec/audit.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/spec/audit.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-a356baf05ed412b5", "name": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/off.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/off.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-df73062ad2de57f9", "name": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/status.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/status.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-a3c32c65d19d3f17", "name": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/on.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/on.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-54c4fdaf780f547b", "name": "Agent authority lacks a verifier contract: .claude/commands/cc/ide/set.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/ide/set.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-1f07aa32c11e4289", "name": "Agent authority lacks a verifier contract: .claude/commands/cc/ide/reset.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/ide/reset.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-354e6d0d48d0288d", "name": "Agent authority lacks a verifier contract: .claude/commands/docs/status.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/docs/status.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-a9b7914a5f176f30", "name": "Agent authority lacks a verifier contract: .claude/commands/worktree/list.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/worktree/list.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-1d376ccb9e2ce5d1", "name": "Agent instruction/config may expose a secret: .claude/commands/system/release.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/commands/system/release.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-780bc22dbd42e99e", "name": "Agent instruction contains unpinned remote install: .claude/commands/system/release.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/commands/system/release.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-8c2d360ebe125eb9", "name": "Agent authority lacks a verifier contract: .claude/commands/adr/create.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/adr/create.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-3abb2fa8654c31f2", "name": "Agent authority lacks a verifier contract: .claude/commands/adr/from-spec.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/adr/from-spec.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-f03243ca42c342d9", "name": "Agent authority lacks a verifier contract: .claude/commands/template/check.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/commands/template/check.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-513cca96346ae1f5", "name": "Agent authority lacks a verifier contract: .claude/rules/fsd-layers.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/fsd-layers.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-153fc3a6c35521f7", "name": "Agent authority lacks a verifier contract: .claude/rules/agent-storage.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/agent-storage.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-3a1d54d4ec110a80", "name": "Agent authority lacks a verifier contract: .claude/rules/server-structure.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/server-structure.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-7fdfc1761e858f2a", "name": "Agent authority lacks a verifier contract: .claude/rules/testing.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/rules/testing.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-90505a5bec482329", "name": "Agent authority lacks a verifier contract: .claude/skills/linear-loop/templates/audit-workspace.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/linear-loop/templates/audit-workspace.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-27e83aa939f65983", "name": "Agent authority lacks a verifier contract: .claude/skills/managing-specs/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/managing-specs/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-fce15dc7bb1e3388", "name": "Agent authority lacks a verifier contract: .claude/skills/test-driven-development/testing-anti-patterns.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/test-driven-development/testing-anti-patterns.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-eefb63da3f3ea736", "name": "Agent authority lacks a verifier contract: .claude/skills/test-driven-development/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/test-driven-development/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-184b10b1dd24a8b6", "name": "Agent authority lacks a verifier contract: .claude/skills/executing-specs/implementation-agent-prompt.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/executing-specs/implementation-agent-prompt.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-bdf6b3f230be9ce1", "name": "Agent authority lacks a verifier contract: .claude/skills/working-in-worktrees/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/working-in-worktrees/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-8f6a908cd6dc1d51", "name": "Commented-code block (5 lines) in packages/test-utils/src/mock-factories.ts:150", "shortDescription": {"text": "Commented-code block (5 lines) in packages/test-utils/src/mock-factories.ts:150"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92ebe6c5573273cc", "name": "Commented-code block (6 lines) in packages/relay/src/adapters/claude-code/claude-code-adapter.ts:264", "shortDescription": {"text": "Commented-code block (6 lines) in packages/relay/src/adapters/claude-code/claude-code-adapter.ts:264"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16a59b3ce309e499", "name": "Commented-code block (7 lines) in packages/relay/src/adapters/claude-code/__tests__/claude-code-adapter.test.ts:100", "shortDescription": {"text": "Commented-code block (7 lines) in packages/relay/src/adapters/claude-code/__tests__/claude-code-adapter.test.ts:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ac05548f852efac", "name": "Commented-code block (6 lines) in packages/relay/src/adapters/telegram/__tests__/telegram-adapter.test.ts:221", "shortDescription": {"text": "Commented-code block (6 lines) in packages/relay/src/adapters/telegram/__tests__/telegram-adapter.test.ts:221"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e2c53b53491a113", "name": "Commented-code block (5 lines) in packages/relay/src/adapters/slack/outbound.ts:174", "shortDescription": {"text": "Commented-code block (5 lines) in packages/relay/src/adapters/slack/outbound.ts:174"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4ac1d326f4f10a64", "name": "Commented-code block (7 lines) in packages/relay/src/__tests__/relay-core.test.ts:1145", "shortDescription": {"text": "Commented-code block (7 lines) in packages/relay/src/__tests__/relay-core.test.ts:1145"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f34068772449f5e3", "name": "Commented-code block (11 lines) in packages/db/src/schema/sessions.ts:3", "shortDescription": {"text": "Commented-code block (11 lines) in packages/db/src/schema/sessions.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-6045a3359cbe066b", "name": "Commented-code block (5 lines) in packages/cli/src/cli.ts:59", "shortDescription": {"text": "Commented-code block (5 lines) in packages/cli/src/cli.ts:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac10de1f58a75b70", "name": "Commented-code block (5 lines) in packages/cli/src/commands/package-validate-remote.ts:148", "shortDescription": {"text": "Commented-code block (5 lines) in packages/cli/src/commands/package-validate-remote.ts:148"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10b34f667e8e76e0", "name": "Commented-code block (6 lines) in packages/cli/src/commands/package-validate-marketplace.ts:142", "shortDescription": {"text": "Commented-code block (6 lines) in packages/cli/src/commands/package-validate-marketplace.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-445ebc0b0a0eb571", "name": "Commented-code block (5 lines) in packages/cli/src/__tests__/cache-commands.test.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/cli/src/__tests__/cache-commands.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-9f67ecf749c5eda3", "name": "Legacy-named symbol `isDeprecated` in packages/shared/src/schemas.ts:1528", "shortDescription": {"text": "Legacy-named symbol `isDeprecated` in packages/shared/src/schemas.ts:1528"}, "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-53f5767d37ead484", "name": "Commented-code block (7 lines) in packages/shared/src/session-stream.ts:232", "shortDescription": {"text": "Commented-code block (7 lines) in packages/shared/src/session-stream.ts:232"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17c8c9750df72e00", "name": "`fetch()` without try/.catch or AbortSignal \u2014 examples/extensions/linear-issues/server.ts:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 examples/extensions/linear-issues/server.ts:101"}, "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-50345f8945adec00", "name": "Commented-code block (6 lines) in apps/server/src/index.ts:151", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/index.ts:151"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46cf7ad4f132d3eb", "name": "Commented-code block (5 lines) in apps/server/src/middleware/error-handler.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/middleware/error-handler.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-d8fe8a669defb5d9", "name": "Commented-code block (10 lines) in apps/server/src/services/runtimes/claude-code/claude-code-runtime.ts:597", "shortDescription": {"text": "Commented-code block (10 lines) in apps/server/src/services/runtimes/claude-code/claude-code-runtime.ts:597"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4dbcaf62a2a7c509", "name": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/messaging/message-sender.ts:312", "shortDescription": {"text": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/messaging/message-sender.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-98dd548120cb3ae1", "name": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/sessions/transcript-parser.ts:217", "shortDescription": {"text": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/sessions/transcript-parser.ts:217"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ac81f778de798d20", "name": "Commented-code block (6 lines) in apps/server/src/services/runtimes/claude-code/__tests__/claude-code-runtime-session-co", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/services/runtimes/claude-code/__tests__/claude-code-runtime-session-contract.test.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-afe7f36ce5a75a74", "name": "Commented-code block (5 lines) in apps/server/src/services/runtimes/claude-code/__tests__/claude-code-runtime.test.ts:66", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/runtimes/claude-code/__tests__/claude-code-runtime.test.ts:668"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e02f52d3f9157bc4", "name": "Commented-code block (5 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/system-event-mapper.ts", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/system-event-mapper.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-cc1dfa9c435b5fac", "name": "Commented-code block (6 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/message-event-mapper.t", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/message-event-mapper.ts:36"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2be919800d774075", "name": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/stream-event-mapper.ts", "shortDescription": {"text": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/stream-event-mapper.ts:26"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4334a645e371a787", "name": "Commented-code block (8 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/result-event-mapper.ts", "shortDescription": {"text": "Commented-code block (8 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/result-event-mapper.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-8f513c8d3a4c24a7", "name": "Commented-code block (6 lines) in apps/server/src/services/runtimes/test-mode/__tests__/test-mode-runtime.test.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/services/runtimes/test-mode/__tests__/test-mode-runtime.test.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-de070647ef02b4dd", "name": "Commented-code block (12 lines) in apps/server/src/services/extensions/extension-templates.ts:120", "shortDescription": {"text": "Commented-code block (12 lines) in apps/server/src/services/extensions/extension-templates.ts:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-faba5752fe9e674a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/extensions/extension-templates.ts:164", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/extensions/extension-templates.ts:164"}, "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-2fe070b58c6de6a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/marketplace/telemetry-reporter.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/marketplace/telemetry-reporter.ts:62"}, "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-c2c4d0419f452032", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/marketplace/package-fetcher.ts:400", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/marketplace/package-fetcher.ts:400"}, "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-881ff4a8dc363253", "name": "Commented-code block (5 lines) in apps/server/src/services/marketplace/source-resolvers/git-subdir.ts:239", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace/source-resolvers/git-subdir.ts:239"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-809a5e82bf8640d1", "name": "Commented-code block (5 lines) in apps/server/src/services/marketplace/flows/install-agent.ts:115", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace/flows/install-agent.ts:115"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca7af64f4e312a92", "name": "Commented-code block (6 lines) in apps/server/src/services/marketplace/__tests__/integration.test.ts:260", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/services/marketplace/__tests__/integration.test.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-525faed5aae7612b", "name": "Commented-code block (5 lines) in apps/server/src/services/marketplace/__tests__/telemetry-privacy.test.ts:147", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace/__tests__/telemetry-privacy.test.ts:147"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c814a658325f551", "name": "Commented-code block (7 lines) in apps/server/src/services/marketplace/__tests__/failure-paths.test.ts:435", "shortDescription": {"text": "Commented-code block (7 lines) in apps/server/src/services/marketplace/__tests__/failure-paths.test.ts:435"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8f9cf9c13b3d1cc6", "name": "Commented-code block (5 lines) in apps/server/src/services/marketplace-mcp/__tests__/integration.test.ts:384", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace-mcp/__tests__/integration.test.ts:384"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41fd8ca6f7e05215", "name": "Commented-code block (5 lines) in apps/server/src/services/marketplace-mcp/__tests__/recommend-engine.test.ts:103", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace-mcp/__tests__/recommend-engine.test.ts:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a6fe3deeb39215b", "name": "Commented-code block (5 lines) in apps/server/src/services/relay/adapter-manager.ts:145", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/relay/adapter-manager.ts:145"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc17b825d8ff5235", "name": "Commented-code block (5 lines) in apps/server/src/services/relay/subject-resolver.ts:43", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/relay/subject-resolver.ts:43"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7bbe2d0da9f43bc", "name": "Commented-code block (6 lines) in apps/server/src/services/relay/__tests__/runtime-neutral-dispatch.test.ts:87", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/services/relay/__tests__/runtime-neutral-dispatch.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-f7235f95e3f20281", "name": "Commented-code block (5 lines) in apps/server/src/services/session/session-list-broadcaster.ts:83", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/session/session-list-broadcaster.ts:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8bdaa6e1eb88c20f", "name": "Commented-code block (5 lines) in apps/server/src/services/session/session-state-projector.ts:603", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/session/session-state-projector.ts:603"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ef4063828eb266d", "name": "Commented-code block (5 lines) in apps/server/src/services/session/trigger-turn.ts:141", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/session/trigger-turn.ts:141"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-511e46e6a44bcb8a", "name": "Commented-code block (5 lines) in apps/server/src/services/session/__tests__/session-state-projector.test.ts:67", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/session/__tests__/session-state-projector.test.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-242a1a35e3b12c08", "name": "Commented-code block (6 lines) in apps/server/src/services/core/config-manager.ts:117", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/services/core/config-manager.ts:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63760638553c98d4", "name": "Commented-code block (6 lines) in apps/server/src/services/core/runtime-registry.ts:176", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/services/core/runtime-registry.ts:176"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d1c54450736040c6", "name": "Commented-code block (5 lines) in apps/server/src/services/__tests__/transcript-parser.test.ts:488", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/services/__tests__/transcript-parser.test.ts:488"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ebbadd0608907a2", "name": "Commented-code block (10 lines) in apps/server/src/routes/mesh.ts:136", "shortDescription": {"text": "Commented-code block (10 lines) in apps/server/src/routes/mesh.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-2bf848e07b61c223", "name": "Commented-code block (7 lines) in apps/server/src/routes/sessions.ts:299", "shortDescription": {"text": "Commented-code block (7 lines) in apps/server/src/routes/sessions.ts:299"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a3b883e6a4bb0e1", "name": "Commented-code block (15 lines) in apps/server/src/routes/session-events-handler.ts:103", "shortDescription": {"text": "Commented-code block (15 lines) in apps/server/src/routes/session-events-handler.ts:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8152e8356bdbd31c", "name": "Commented-code block (8 lines) in apps/server/src/routes/__tests__/sessions-interactive.test.ts:190", "shortDescription": {"text": "Commented-code block (8 lines) in apps/server/src/routes/__tests__/sessions-interactive.test.ts:190"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2c7eeeb0ded4e02", "name": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-trigger.test.ts:269", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-trigger.test.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-06f2a6ba4636de3b", "name": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-cross-client.test.ts:205", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-cross-client.test.ts:205"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bceeffdfbf25654", "name": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions.test.ts:299", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions.test.ts:299"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17cc4018cf45cf73", "name": "Commented-code block (5 lines) in apps/server/src/routes/__tests__/sessions-events.test.ts:257", "shortDescription": {"text": "Commented-code block (5 lines) in apps/server/src/routes/__tests__/sessions-events.test.ts:257"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-25b0ef3d69148af1", "name": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-multi-runtime.test.ts:476", "shortDescription": {"text": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-multi-runtime.test.ts:476"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e57cd226738e6b06", "name": "Commented-code block (5 lines) in apps/client/src/env.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/env.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99213475f3c71b3e", "name": "Commented-code block (5 lines) in apps/client/src/layers/widgets/app-layout/ui/DialogHost.tsx:60", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/widgets/app-layout/ui/DialogHost.tsx:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-869c1e34f2680056", "name": "Commented-code block (9 lines) in apps/client/src/layers/entities/session/model/session-list-store.ts:138", "shortDescription": {"text": "Commented-code block (9 lines) in apps/client/src/layers/entities/session/model/session-list-store.ts:138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae00a20b876338f2", "name": "Commented-code block (6 lines) in apps/client/src/layers/entities/session/model/session-stream-store.ts:352", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/entities/session/model/session-stream-store.ts:352"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f044d1e35897e79", "name": "Commented-code block (7 lines) in apps/client/src/layers/entities/session/model/session-stream-binding.ts:75", "shortDescription": {"text": "Commented-code block (7 lines) in apps/client/src/layers/entities/session/model/session-stream-binding.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-877d394a54530efd", "name": "Commented-code block (5 lines) in apps/client/src/layers/entities/session/model/__tests__/session-stream-store.test.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/entities/session/model/__tests__/session-stream-store.test.ts:157"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-45eb9d9f5f66c6bc", "name": "Commented-code block (6 lines) in apps/client/src/layers/entities/session/model/__tests__/session-stream-binding.test.ts", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/entities/session/model/__tests__/session-stream-binding.test.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d19df2698713250", "name": "Commented-code block (7 lines) in apps/client/src/layers/entities/session/model/__tests__/session-chat-store.test.ts:102", "shortDescription": {"text": "Commented-code block (7 lines) in apps/client/src/layers/entities/session/model/__tests__/session-chat-store.test.ts:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-718475fc1ad2cf3b", "name": "Commented-code block (5 lines) in apps/client/src/layers/entities/session/model/__tests__/use-global-session-stream.test", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/entities/session/model/__tests__/use-global-session-stream.test.tsx: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-363e156e782c50a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/api/queries.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/api/queries.ts:32"}, "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-bf1ee1a3ae71664b", "name": "Commented-code block (6 lines) in apps/client/src/layers/features/extensions/__tests__/extension-loader.test.ts:96", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/extensions/__tests__/extension-loader.test.ts:96"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-74ca7a836152c83d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:104"}, "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-03173dddf8aeb005", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:212"}, "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-e227a473138ddc6a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/model/extension-api-factory.ts:", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/model/extension-api-factory.ts:150"}, "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-b42f9a0b7567f0b2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/model/extension-loader.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/model/extension-loader.ts:19"}, "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-b2f1417d2a8ec61a", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/extensions/model/extension-context.tsx:90", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/extensions/model/extension-context.tsx:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17880bb36a6bcc20", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/marketplace/__tests__/install-flow.integration.test.ts", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/marketplace/__tests__/install-flow.integration.test.tsx:311"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ac9591acd41aa8a", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/agent-hub/__tests__/deep-link-migration.test.tsx:29", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/agent-hub/__tests__/deep-link-migration.test.tsx:29"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2a89e2d43ae91b91", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/__tests__/MessageItem.test.tsx:398", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/__tests__/MessageItem.test.tsx:398"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae19d481256d0fc6", "name": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/ToolApproval.test.tsx:214", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/ToolApproval.test.tsx: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-4474dfb5e1f8866a", "name": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/ChatInputContainer.test.tsx:227", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/ChatInputContainer.test.tsx:227"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cac6f6a4a248ea08", "name": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/use-session-submit.test.tsx:446", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/use-session-submit.test.tsx:446"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ac3522f8dc8b723", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/ui/tools/ToolApproval.tsx:136", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/ui/tools/ToolApproval.tsx: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-8f2a9e82ad73bfb2", "name": "Commented-code block (8 lines) in apps/client/src/layers/features/chat/ui/status/inference-themes.ts:22", "shortDescription": {"text": "Commented-code block (8 lines) in apps/client/src/layers/features/chat/ui/status/inference-themes.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e02b96b7a103e40", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/ui/status/ChatStatusSection.tsx:186", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/ui/status/ChatStatusSection.tsx:186"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e246dd3936a08ad8", "name": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/use-session-submit.ts:169", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/use-session-submit.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-1eec11065f8327df", "name": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/use-message-queue.ts:75", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/use-message-queue.ts:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd165e26f2ada020", "name": "Commented-code block (7 lines) in apps/client/src/layers/features/chat/model/use-turn-end-reconcile.ts:61", "shortDescription": {"text": "Commented-code block (7 lines) in apps/client/src/layers/features/chat/model/use-turn-end-reconcile.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ec6ae8de6fbd6d9", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/model/use-stream-timing.ts:50", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/model/use-stream-timing.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-85d23e6cbe0dfd6e", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/model/use-chat-session.ts:61", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/model/use-chat-session.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d294433d0cd5cd3c", "name": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/stream/__tests__/project-session-turn.test.", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/stream/__tests__/project-session-turn.test.ts:533"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-102b3257f10505c1", "name": "Commented-code block (5 lines) in apps/client/src/layers/features/onboarding/__tests__/magic-transition.test.tsx:121", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/onboarding/__tests__/magic-transition.test.tsx:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca9dd5473f70db8e", "name": "Commented-code block (6 lines) in apps/client/src/layers/features/status/__tests__/ModelConfigPopover.test.tsx:9", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/status/__tests__/ModelConfigPopover.test.tsx:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f94e90aa3d20db83", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/system-methods.ts:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/system-methods.ts:153"}, "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-ca1654e12c99986e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/sse-connection.ts:173", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/sse-connection.ts:173"}, "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-8e86607d863ed7a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/session-stream-methods.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/session-stream-methods.ts:49"}, "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-387eb143ddd192dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/mesh-methods.ts:139", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/mesh-methods.ts:139"}, "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-04af34ca2d3155c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/relay-methods.ts:117", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/relay-methods.ts:117"}, "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-d6f43ba5c0b31b63", "name": "Commented-code block (6 lines) in apps/client/src/layers/shared/lib/transport/__tests__/stream-manager.test.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/shared/lib/transport/__tests__/stream-manager.test.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc243eb1c28db539", "name": "Commented-code block (6 lines) in apps/client/src/layers/shared/lib/direct/system-methods.ts:173", "shortDescription": {"text": "Commented-code block (6 lines) in apps/client/src/layers/shared/lib/direct/system-methods.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-40f1d4760990b174", "name": "Commented-code block (5 lines) in apps/client/src/layers/shared/ui/data-table.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/shared/ui/data-table.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-d26a6358903beb8d", "name": "Commented-code block (5 lines) in apps/client/src/layers/shared/model/event-stream-context.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in apps/client/src/layers/shared/model/event-stream-context.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27929c4b2ca16449", "name": "Commented-code block (6 lines) in apps/site/scripts/generate-api-docs.ts:30", "shortDescription": {"text": "Commented-code block (6 lines) in apps/site/scripts/generate-api-docs.ts:30"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d88b121a75e4cad", "name": "Commented-code block (6 lines) in apps/site/src/app/(marketing)/test/diagrams/variants/v9-dna-helix.tsx:69", "shortDescription": {"text": "Commented-code block (6 lines) in apps/site/src/app/(marketing)/test/diagrams/variants/v9-dna-helix.tsx:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-548e8e4860bbb98a", "name": "Commented-code block (7 lines) in apps/site/src/app/(marketing)/test/logos/variants/l03-isometric.tsx:95", "shortDescription": {"text": "Commented-code block (7 lines) in apps/site/src/app/(marketing)/test/logos/variants/l03-isometric.tsx:95"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-acb4d5096c588259", "name": "Commented-code block (6 lines) in apps/site/src/app/(marketing)/test/logos/variants/l19-monolith.tsx:49", "shortDescription": {"text": "Commented-code block (6 lines) in apps/site/src/app/(marketing)/test/logos/variants/l19-monolith.tsx:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df27aa81da429387", "name": "Commented-code block (7 lines) in apps/site/src/app/(marketing)/test/logos/variants/l20-fragmented.tsx:42", "shortDescription": {"text": "Commented-code block (7 lines) in apps/site/src/app/(marketing)/test/logos/variants/l20-fragmented.tsx:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a128b8fce4ae5869", "name": "Commented-code block (5 lines) in apps/site/src/app/(marketing)/test/logos/variants/l11-dotmatrix.tsx:51", "shortDescription": {"text": "Commented-code block (5 lines) in apps/site/src/app/(marketing)/test/logos/variants/l11-dotmatrix.tsx: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-090c1dd767ddd654", "name": "Commented-code block (5 lines) in apps/site/src/app/(marketing)/test/logos/variants/l08-maze.tsx:65", "shortDescription": {"text": "Commented-code block (5 lines) in apps/site/src/app/(marketing)/test/logos/variants/l08-maze.tsx:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e4b3a26263b89f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/site/src/layers/features/marketplace/lib/fetch.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/site/src/layers/features/marketplace/lib/fetch.ts:56"}, "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-3bf4805a32e03ffb", "name": "Commented-code block (5 lines) in apps/e2e/tests/chat-mock.spec.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in apps/e2e/tests/chat-mock.spec.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc6fe54931979f1a", "name": "Commented-code block (5 lines) in apps/e2e/tests/dialog-deep-link.spec.ts:52", "shortDescription": {"text": "Commented-code block (5 lines) in apps/e2e/tests/dialog-deep-link.spec.ts:52"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-977d63e097899b05", "name": "Legacy-named symbol `nDeprecated` in .claude/scripts/template-fetch.ts:1590", "shortDescription": {"text": "Legacy-named symbol `nDeprecated` in .claude/scripts/template-fetch.ts:1590"}, "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-f57225a26ec6a4b2", "name": "Network/subprocess call without timeout or try/except \u2014 .claude/scripts/changelog_backfill.py:99", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 .claude/scripts/changelog_backfill.py:99"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3cb413b909844051", "name": "Network/subprocess call without timeout or try/except \u2014 .claude/git-hooks/changelog-populator.py:90", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 .claude/git-hooks/changelog-populator.py:90"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-51dbf90b6ad9e4e9", "name": "28 env vars used in code but missing from .env.example", "shortDescription": {"text": "28 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `CI`, `CLIENT_DIST_PATH`, `DEV`, `DORKOS_BOUNDARY`, `DORKOS_CORS_ORIGIN`, `DORKOS_DEFAULT_CWD`, `DORKOS_LOG_LEVEL`, `DORKOS_MOCK_PORT` + 20 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\n.claude/scripts/changelog_backfill.py:get_vault_root, .claude/git-hooks/changelog-populator.py:get_vault_root\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-398b6cf8bb5e8654", "name": "Dangling fetch: GET https://registry.npmjs.org/dorkos/latest (packages/cli/src/update-check.ts:44)", "shortDescription": {"text": "Dangling fetch: GET https://registry.npmjs.org/dorkos/latest (packages/cli/src/update-check.ts:44)"}, "fullDescription": {"text": "`packages/cli/src/update-check.ts:44` calls `GET https://registry.npmjs.org/dorkos/latest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/registry.npmjs.org/dorkos/latest`\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-0053871a60d526de", "name": "Dangling fetch: GET /api/ext/${EXT_ID}/loop (examples/extensions/linear-issues/index.ts:104)", "shortDescription": {"text": "Dangling fetch: GET /api/ext/${EXT_ID}/loop (examples/extensions/linear-issues/index.ts:104)"}, "fullDescription": {"text": "`examples/extensions/linear-issues/index.ts:104` calls `GET /api/ext/${EXT_ID}/loop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ext/<p>/loop`\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-4b775ee0977e4ac5", "name": "Dangling fetch: GET /api/extensions/${EXT_ID}/settings (examples/extensions/linear-issues/index.ts:105)", "shortDescription": {"text": "Dangling fetch: GET /api/extensions/${EXT_ID}/settings (examples/extensions/linear-issues/index.ts:105)"}, "fullDescription": {"text": "`examples/extensions/linear-issues/index.ts:105` calls `GET /api/extensions/${EXT_ID}/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/settings`\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-5d9744fca7cdb9e8", "name": "Dangling fetch: GET https://api.example.com/data (apps/server/src/services/extensions/extension-templates.ts:164)", "shortDescription": {"text": "Dangling fetch: GET https://api.example.com/data (apps/server/src/services/extensions/extension-templates.ts:164)"}, "fullDescription": {"text": "`apps/server/src/services/extensions/extension-templates.ts:164` calls `GET https://api.example.com/data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.example.com/data`\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-70fe9fd1aceffd46", "name": "Dangling fetch: GET https://registry.npmjs.org/dorkos/latest (apps/server/src/services/core/update-checker.ts:37)", "shortDescription": {"text": "Dangling fetch: GET https://registry.npmjs.org/dorkos/latest (apps/server/src/services/core/update-checker.ts:37)"}, "fullDescription": {"text": "`apps/server/src/services/core/update-checker.ts:37` calls `GET https://registry.npmjs.org/dorkos/latest` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/registry.npmjs.org/dorkos/latest`\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-0c38499c7daa49d5", "name": "Dangling fetch: GET /api/extensions (apps/client/src/layers/features/extensions/api/queries.ts:32)", "shortDescription": {"text": "Dangling fetch: GET /api/extensions (apps/client/src/layers/features/extensions/api/queries.ts:32)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/api/queries.ts:32` calls `GET /api/extensions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions`\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-1673477b2af7176f", "name": "Dangling fetch: POST /api/extensions/${id}/enable (apps/client/src/layers/features/extensions/api/queries.ts:53)", "shortDescription": {"text": "Dangling fetch: POST /api/extensions/${id}/enable (apps/client/src/layers/features/extensions/api/queries.ts:53)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/api/queries.ts:53` calls `POST /api/extensions/${id}/enable` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/enable`\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-eba77973f035487b", "name": "Dangling fetch: POST /api/extensions/${id}/disable (apps/client/src/layers/features/extensions/api/queries.ts:74)", "shortDescription": {"text": "Dangling fetch: POST /api/extensions/${id}/disable (apps/client/src/layers/features/extensions/api/queries.ts:74)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/api/queries.ts:74` calls `POST /api/extensions/${id}/disable` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/disable`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bda8d005fa1c451", "name": "Dangling fetch: POST /api/extensions/reload (apps/client/src/layers/features/extensions/api/queries.ts:94)", "shortDescription": {"text": "Dangling fetch: POST /api/extensions/reload (apps/client/src/layers/features/extensions/api/queries.ts:94)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/api/queries.ts:94` calls `POST /api/extensions/reload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/reload`\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-8f5cd3c49e1afbe0", "name": "Dangling fetch: GET /api/extensions/${extensionId}/secrets (apps/client/src/layers/features/extensions/ui/ManifestSettin", "shortDescription": {"text": "Dangling fetch: GET /api/extensions/${extensionId}/secrets (apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:101)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:101` calls `GET /api/extensions/${extensionId}/secrets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/secrets`\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-93f58243219c64cb", "name": "Dangling fetch: GET /api/extensions/${extensionId}/settings (apps/client/src/layers/features/extensions/ui/ManifestSetti", "shortDescription": {"text": "Dangling fetch: GET /api/extensions/${extensionId}/settings (apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:104)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:104` calls `GET /api/extensions/${extensionId}/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/settings`\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-129575c0833fce42", "name": "Dangling fetch: PUT /api/extensions/${extensionId}/secrets/${secret.key} (apps/client/src/layers/features/extensions/ui/", "shortDescription": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/secrets/${secret.key} (apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:261)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:261` calls `PUT /api/extensions/${extensionId}/secrets/${secret.key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/secrets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b9972b4978a28fc", "name": "Dangling fetch: DELETE /api/extensions/${extensionId}/secrets/${secret.key} (apps/client/src/layers/features/extensions/", "shortDescription": {"text": "Dangling fetch: DELETE /api/extensions/${extensionId}/secrets/${secret.key} (apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:280)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:280` calls `DELETE /api/extensions/${extensionId}/secrets/${secret.key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/secrets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9867bab1548d4a73", "name": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui", "shortDescription": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:56)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:56` calls `PUT /api/extensions/${extensionId}/settings/${status.key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/settings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31ef2dae2bd7cef9", "name": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui", "shortDescription": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:110)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:110` calls `PUT /api/extensions/${extensionId}/settings/${status.key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/settings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4b4e437212db11b", "name": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui", "shortDescription": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:167)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:167` calls `PUT /api/extensions/${extensionId}/settings/${status.key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/settings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-836b34ab158feda9", "name": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui", "shortDescription": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:212)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:212` calls `PUT /api/extensions/${extensionId}/settings/${status.key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/settings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87e5d69b927041fa", "name": "Dangling fetch: GET /api/extensions/${extId}/data (apps/client/src/layers/features/extensions/model/extension-api-factor", "shortDescription": {"text": "Dangling fetch: GET /api/extensions/${extId}/data (apps/client/src/layers/features/extensions/model/extension-api-factory.ts:150)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/model/extension-api-factory.ts:150` calls `GET /api/extensions/${extId}/data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/data`\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-3f4beab9e6d7e625", "name": "Dangling fetch: PUT /api/extensions/${extId}/data (apps/client/src/layers/features/extensions/model/extension-api-factor", "shortDescription": {"text": "Dangling fetch: PUT /api/extensions/${extId}/data (apps/client/src/layers/features/extensions/model/extension-api-factory.ts:157)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/model/extension-api-factory.ts:157` calls `PUT /api/extensions/${extId}/data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/data`\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-a83c3cda6aa38d90", "name": "Dangling fetch: GET /api/extensions (apps/client/src/layers/features/extensions/model/extension-loader.ts:19)", "shortDescription": {"text": "Dangling fetch: GET /api/extensions (apps/client/src/layers/features/extensions/model/extension-loader.ts:19)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/model/extension-loader.ts:19` calls `GET /api/extensions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions`\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-5e609ef83eaa67fd", "name": "Dangling fetch: POST /api/extensions/${rec.id}/init-server (apps/client/src/layers/features/extensions/model/extension-l", "shortDescription": {"text": "Dangling fetch: POST /api/extensions/${rec.id}/init-server (apps/client/src/layers/features/extensions/model/extension-loader.ts:51)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/model/extension-loader.ts:51` calls `POST /api/extensions/${rec.id}/init-server` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/<p>/init-server`\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-8e886eeafd96da8c", "name": "Dangling fetch: POST /api/extensions/cwd-changed (apps/client/src/layers/features/extensions/model/use-cwd-extension-syn", "shortDescription": {"text": "Dangling fetch: POST /api/extensions/cwd-changed (apps/client/src/layers/features/extensions/model/use-cwd-extension-sync.ts:33)"}, "fullDescription": {"text": "`apps/client/src/layers/features/extensions/model/use-cwd-extension-sync.ts:33` calls `POST /api/extensions/cwd-changed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/extensions/cwd-changed`\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-e66482daa5e9d6b1", "name": "Dangling fetch: GET http://localhost:${port}/api/health (apps/desktop/src/server-entry.ts:14)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:${port}/api/health (apps/desktop/src/server-entry.ts:14)"}, "fullDescription": {"text": "`apps/desktop/src/server-entry.ts:14` calls `GET http://localhost:${port}/api/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:/localhost:/<p>/api/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-cd4763e6e0fcaa39", "name": "Unused endpoint: GET /issues", "shortDescription": {"text": "Unused endpoint: GET /issues"}, "fullDescription": {"text": "`examples/extensions/linear-issues/server.ts` declares `GET /issues` 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-a480e03ed5d916eb", "name": "Unused endpoint: GET /cached", "shortDescription": {"text": "Unused endpoint: GET /cached"}, "fullDescription": {"text": "`examples/extensions/linear-issues/server.ts` declares `GET /cached` 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-52518313c1803488", "name": "Unused endpoint: GET /loop", "shortDescription": {"text": "Unused endpoint: GET /loop"}, "fullDescription": {"text": "`examples/extensions/linear-issues/server.ts` declares `GET /loop` 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-95e266019920938e", "name": "Unused endpoint: USE /mcp", "shortDescription": {"text": "Unused endpoint: USE /mcp"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /mcp` 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-6330b0c4a0a152d3", "name": "Unused endpoint: USE /api/tasks", "shortDescription": {"text": "Unused endpoint: USE /api/tasks"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/tasks` 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-c7d5e35924ac835f", "name": "Unused endpoint: USE /api/relay", "shortDescription": {"text": "Unused endpoint: USE /api/relay"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/relay` 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-099cda606878d888", "name": "Unused endpoint: USE /api/mesh", "shortDescription": {"text": "Unused endpoint: USE /api/mesh"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/mesh` 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-094608bf688f5d04", "name": "Unused endpoint: USE /api/agents", "shortDescription": {"text": "Unused endpoint: USE /api/agents"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/agents` 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-b4e6f64bf81484dc", "name": "Unused endpoint: USE /api/templates", "shortDescription": {"text": "Unused endpoint: USE /api/templates"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/templates` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70d1dce5c086c6b4", "name": "Unused endpoint: USE /api/activity", "shortDescription": {"text": "Unused endpoint: USE /api/activity"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/activity` 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-6887edca1291d5d4", "name": "Unused endpoint: USE /api/extensions", "shortDescription": {"text": "Unused endpoint: USE /api/extensions"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/extensions` 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-46b689099add2f39", "name": "Unused endpoint: USE /api/ext/:id", "shortDescription": {"text": "Unused endpoint: USE /api/ext/:id"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/ext/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-de91c7cd4badadf1", "name": "Unused endpoint: USE /api/discovery", "shortDescription": {"text": "Unused endpoint: USE /api/discovery"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/discovery` 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-ff8406830de51b6b", "name": "Unused endpoint: USE /a2a", "shortDescription": {"text": "Unused endpoint: USE /a2a"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /a2a` 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-d93a530ce10d47d9", "name": "Unused endpoint: USE /api/admin", "shortDescription": {"text": "Unused endpoint: USE /api/admin"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/admin` 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-e2bbe245c5b92fa2", "name": "Unused endpoint: USE /api/marketplace", "shortDescription": {"text": "Unused endpoint: USE /api/marketplace"}, "fullDescription": {"text": "`apps/server/src/index.ts` declares `USE /api/marketplace` 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-8636dd48e48d1da9", "name": "Unused endpoint: USE /api/sessions", "shortDescription": {"text": "Unused endpoint: USE /api/sessions"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/sessions` 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-cf4523a74d136ba3", "name": "Unused endpoint: USE /api/commands", "shortDescription": {"text": "Unused endpoint: USE /api/commands"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/commands` 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-972b54078ec2581f", "name": "Unused endpoint: USE /api/health", "shortDescription": {"text": "Unused endpoint: USE /api/health"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/health` 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-98dcf9f66ef48060", "name": "Unused endpoint: USE /api/directory", "shortDescription": {"text": "Unused endpoint: USE /api/directory"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/directory` 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-6f63dbe78bf2280a", "name": "Unused endpoint: USE /api/config", "shortDescription": {"text": "Unused endpoint: USE /api/config"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/config` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-15662ab348abba6b", "name": "Unused endpoint: USE /api/files", "shortDescription": {"text": "Unused endpoint: USE /api/files"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/files` 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-61f0530d078de560", "name": "Unused endpoint: USE /api/git", "shortDescription": {"text": "Unused endpoint: USE /api/git"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/git` 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-3bff500515483dc0", "name": "Unused endpoint: USE /api/tunnel", "shortDescription": {"text": "Unused endpoint: USE /api/tunnel"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/tunnel` 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-5b66c53e8f32d566", "name": "Unused endpoint: USE /api/models", "shortDescription": {"text": "Unused endpoint: USE /api/models"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/models` 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-3f3b0f431e114b9f", "name": "Unused endpoint: USE /api/subagents", "shortDescription": {"text": "Unused endpoint: USE /api/subagents"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/subagents` 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-e7e939285cc712e3", "name": "Unused endpoint: USE /api/capabilities", "shortDescription": {"text": "Unused endpoint: USE /api/capabilities"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/capabilities` 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-b7dbcf047b5d4d80", "name": "Unused endpoint: USE /api/system", "shortDescription": {"text": "Unused endpoint: USE /api/system"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/system` 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-84bd4c31da0619b1", "name": "Unused endpoint: USE /api/uploads", "shortDescription": {"text": "Unused endpoint: USE /api/uploads"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/uploads` 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-1bed72b5670827fd", "name": "Unused endpoint: USE /api/mcp-config", "shortDescription": {"text": "Unused endpoint: USE /api/mcp-config"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/mcp-config` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec00984b27c88c15", "name": "Unused endpoint: USE /api/events", "shortDescription": {"text": "Unused endpoint: USE /api/events"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/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-148690a8d35e14f1", "name": "Unused endpoint: USE /api/test", "shortDescription": {"text": "Unused endpoint: USE /api/test"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/test` 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-cf049e5f9a2ed0eb", "name": "Unused endpoint: GET /api/openapi.json", "shortDescription": {"text": "Unused endpoint: GET /api/openapi.json"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `GET /api/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-5d83a39f66cb5706", "name": "Unused endpoint: USE /api/docs", "shortDescription": {"text": "Unused endpoint: USE /api/docs"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api/docs` 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-dde3adb27bf7eebe", "name": "Unused endpoint: USE /api", "shortDescription": {"text": "Unused endpoint: USE /api"}, "fullDescription": {"text": "`apps/server/src/app.ts` declares `USE /api` 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-b186e887b1e3877c", "name": "Unused endpoint: GET /data", "shortDescription": {"text": "Unused endpoint: GET /data"}, "fullDescription": {"text": "`apps/server/src/services/runtimes/claude-code/mcp-tools/extension-tools.ts` declares `GET /data` 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-5f20d66da460daa9", "name": "Unused endpoint: ALL /proxy/*", "shortDescription": {"text": "Unused endpoint: ALL /proxy/*"}, "fullDescription": {"text": "`apps/server/src/services/extensions/extension-proxy.ts` declares `ALL /proxy/*` 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-195fb029bb695346", "name": "Unused endpoint: POST /scan", "shortDescription": {"text": "Unused endpoint: POST /scan"}, "fullDescription": {"text": "`apps/server/src/routes/discovery.ts` declares `POST /scan` 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-3d7e2b166f6d9db1", "name": "Unused endpoint: GET /agents/:id/card", "shortDescription": {"text": "Unused endpoint: GET /agents/:id/card"}, "fullDescription": {"text": "`apps/server/src/routes/a2a.ts` declares `GET /agents/:id/card` 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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`apps/server/src/routes/a2a.ts` declares `POST /` 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-b707af78bb95724c", "name": "Unused endpoint: GET /:filename", "shortDescription": {"text": "Unused endpoint: GET /:filename"}, "fullDescription": {"text": "`apps/server/src/routes/uploads.ts` declares `GET /:filename` 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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`apps/server/src/routes/subagents.ts` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-959e83c0a87139d8", "name": "Unused endpoint: GET /current", "shortDescription": {"text": "Unused endpoint: GET /current"}, "fullDescription": {"text": "`apps/server/src/routes/agents.ts` declares `GET /current` 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-dfa1b57ebf524401", "name": "Unused endpoint: POST /resolve", "shortDescription": {"text": "Unused endpoint: POST /resolve"}, "fullDescription": {"text": "`apps/server/src/routes/agents.ts` declares `POST /resolve` 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-599114e2a4d7d26d", "name": "Unused endpoint: POST /create", "shortDescription": {"text": "Unused endpoint: POST /create"}, "fullDescription": {"text": "`apps/server/src/routes/agents.ts` declares `POST /create` 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-63f89b40f32eddd3", "name": "Unused endpoint: PATCH /current", "shortDescription": {"text": "Unused endpoint: PATCH /current"}, "fullDescription": {"text": "`apps/server/src/routes/agents.ts` declares `PATCH /current` 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-c2ea7096dd2b80eb", "name": "Unused endpoint: POST /current/migrate-persona", "shortDescription": {"text": "Unused endpoint: POST /current/migrate-persona"}, "fullDescription": {"text": "`apps/server/src/routes/agents.ts` declares `POST /current/migrate-persona` 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-31b144bf099e3bd6", "name": "Unused endpoint: GET /default", "shortDescription": {"text": "Unused endpoint: GET /default"}, "fullDescription": {"text": "`apps/server/src/routes/directory.ts` declares `GET /default` 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-3b30f4c0994a30b4", "name": "Unused endpoint: DELETE /", "shortDescription": {"text": "Unused endpoint: DELETE /"}, "fullDescription": {"text": "`apps/server/src/routes/mcp.ts` declares `DELETE /` 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-33c8cf5520e40617", "name": "Unused endpoint: POST /scenario", "shortDescription": {"text": "Unused endpoint: POST /scenario"}, "fullDescription": {"text": "`apps/server/src/routes/test-control.ts` declares `POST /scenario` 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/25489"}, "properties": {"repository": "dork-labs/dorkos", "repoUrl": "https://github.com/dork-labs/dorkos", "branch": "main"}, "results": [{"ruleId": "scanner-3ac6eb652da8f5fd", "level": "note", "message": {"text": "Possibly dead Python function: format_entry_for_display"}, "properties": {"repobilityId": "633f0d5c5551cd82", "scanner": "scanner-primary", "fingerprint": "3ac6eb652da8f5fd", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/scripts/changelog_backfill.py:248"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d78e249c15da7cec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/relay/src/relay-core.ts:97"}, "properties": {"repobilityId": "c83540da0dfb9e8c", "scanner": "scanner-primary", "fingerprint": "d78e249c15da7cec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1509e8a3971fb0a5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/relay/src/signal-emitter.ts:59"}, "properties": {"repobilityId": "d6f5e6c9dd8b537d", "scanner": "scanner-primary", "fingerprint": "1509e8a3971fb0a5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-842efdeb9c2bb43d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/relay/src/access-control.ts:67"}, "properties": {"repobilityId": "35b72c0f19876b77", "scanner": "scanner-primary", "fingerprint": "842efdeb9c2bb43d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d450dd885a8661c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/relay/src/maildir-store.ts:91"}, "properties": {"repobilityId": "bd6ff3f3d8b4a25d", "scanner": "scanner-primary", "fingerprint": "6d450dd885a8661c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c918844be3c32d5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/scripts/build.ts:21"}, "properties": {"repobilityId": "782a10d5352b290d", "scanner": "scanner-primary", "fingerprint": "c918844be3c32d5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50374c9e07a1df72", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/cli.ts:40"}, "properties": {"repobilityId": "98b6d593cdd54b5c", "scanner": "scanner-primary", "fingerprint": "50374c9e07a1df72", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a2877894971e7e4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/config-commands.ts:78"}, "properties": {"repobilityId": "e4892e8859948187", "scanner": "scanner-primary", "fingerprint": "6a2877894971e7e4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38a1e1f91b519169", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/package-validate-command.ts:43"}, "properties": {"repobilityId": "4a13f3e340be5ab8", "scanner": "scanner-primary", "fingerprint": "38a1e1f91b519169", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1417958d1415317", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/cleanup-command.ts:96"}, "properties": {"repobilityId": "e07f4241aead0808", "scanner": "scanner-primary", "fingerprint": "a1417958d1415317", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-365be2f313d21432", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/init-wizard.ts:28"}, "properties": {"repobilityId": "74e164b20a6ddaaa", "scanner": "scanner-primary", "fingerprint": "365be2f313d21432", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-298a4e38f1bfa25b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/package-init-command.ts:131"}, "properties": {"repobilityId": "c0cea613561a9aab", "scanner": "scanner-primary", "fingerprint": "298a4e38f1bfa25b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0bd74336ec17fd0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-remove.ts:66"}, "properties": {"repobilityId": "6b210d450466aafb", "scanner": "scanner-primary", "fingerprint": "0bd74336ec17fd0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-360702e56226d3fb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-list.ts:121"}, "properties": {"repobilityId": "1d9ad7eaee8ee262", "scanner": "scanner-primary", "fingerprint": "360702e56226d3fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bccdd8adf076443e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/cache-commands.ts:229"}, "properties": {"repobilityId": "eadc5e550147cbfa", "scanner": "scanner-primary", "fingerprint": "bccdd8adf076443e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad03b1b8a074f678", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/update.ts:107"}, "properties": {"repobilityId": "41553416bf23b573", "scanner": "scanner-primary", "fingerprint": "ad03b1b8a074f678", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9d999495504f0017", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/install.ts:139"}, "properties": {"repobilityId": "60154c38bf76dbde", "scanner": "scanner-primary", "fingerprint": "9d999495504f0017", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a5aa58b6875cbaa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/uninstall.ts:95"}, "properties": {"repobilityId": "3b0e0fa9a12c7983", "scanner": "scanner-primary", "fingerprint": "8a5aa58b6875cbaa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8acd7a3731a3a6cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-refresh.ts:148"}, "properties": {"repobilityId": "0e50adb1f0f061f1", "scanner": "scanner-primary", "fingerprint": "8acd7a3731a3a6cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c479857ed9609406", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-dispatcher.ts:70"}, "properties": {"repobilityId": "53dab3ae99b1b591", "scanner": "scanner-primary", "fingerprint": "c479857ed9609406", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1622d08ab79ab1f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/marketplace-add.ts:138"}, "properties": {"repobilityId": "ec5121ee36b62a29", "scanner": "scanner-primary", "fingerprint": "1622d08ab79ab1f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84aef65158d9c7c2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/cli/src/commands/cache-dispatcher.ts:52"}, "properties": {"repobilityId": "a37d5ff502e11220", "scanner": "scanner-primary", "fingerprint": "84aef65158d9c7c2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fdba45d980dabd42", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/export-openapi.ts:18"}, "properties": {"repobilityId": "2dc94b2e5acb115f", "scanner": "scanner-primary", "fingerprint": "fdba45d980dabd42", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9048ca9b56073876", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 examples/extensions/hello-world/index.ts:36"}, "properties": {"repobilityId": "9f095bc48d62c6ae", "scanner": "scanner-primary", "fingerprint": "9048ca9b56073876", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37e66b95dc321903", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 templates/relay-adapter/src/my-adapter.ts:27"}, "properties": {"repobilityId": "86a2abc270b76118", "scanner": "scanner-primary", "fingerprint": "37e66b95dc321903", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b280dd872be266f0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/obsidian-plugin/build-plugins/patch-electron-compat.ts:42"}, "properties": {"repobilityId": "98b43eb42516720d", "scanner": "scanner-primary", "fingerprint": "b280dd872be266f0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8347f7e2137af40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/obsidian-plugin/build-plugins/fix-dirname-polyfill.ts:27"}, "properties": {"repobilityId": "7f94bcb8345e34d8", "scanner": "scanner-primary", "fingerprint": "e8347f7e2137af40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-223d548bdad58826", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/obsidian-plugin/src/components/ContextBar.tsx:61"}, "properties": {"repobilityId": "414d319240719c58", "scanner": "scanner-primary", "fingerprint": "223d548bdad58826", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c63d965a3f4157b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/index.ts:102"}, "properties": {"repobilityId": "5c84e404c4eed546", "scanner": "scanner-primary", "fingerprint": "c63d965a3f4157b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-17cb22dd8d1a18d3", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/server/src/services/extensions/extension-templates.ts:159"}, "properties": {"repobilityId": "8c9c98653cb068bb", "scanner": "scanner-primary", "fingerprint": "17cb22dd8d1a18d3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ae5509d8f85d5a65", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/services/extensions/__tests__/extension-compiler.test.ts:64"}, "properties": {"repobilityId": "1583250f42902859", "scanner": "scanner-primary", "fingerprint": "ae5509d8f85d5a65", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a111218fe9786a7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/server/src/routes/marketplace.ts:424"}, "properties": {"repobilityId": "fa337aeb4adc108d", "scanner": "scanner-primary", "fingerprint": "6a111218fe9786a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-47c48944977b8af1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/server/src/routes/__tests__/extensions.test.ts:208"}, "properties": {"repobilityId": "7f14f2b410ba983d", "scanner": "scanner-primary", "fingerprint": "47c48944977b8af1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25a4cb5a3f36f29b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/client/scripts/generate-notification-sound.ts:76"}, "properties": {"repobilityId": "6d6e0a6f4a428e29", "scanner": "scanner-primary", "fingerprint": "25a4cb5a3f36f29b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1abd98132925a6ff", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/client/src/dev/showcases/ToolShowcases.tsx:226"}, "properties": {"repobilityId": "9b06ff37bf15b70a", "scanner": "scanner-primary", "fingerprint": "1abd98132925a6ff", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-329e14bbcd820cde", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/client/src/dev/showcases/StatusShowcases.tsx:211"}, "properties": {"repobilityId": "3cdc495e23acf2c4", "scanner": "scanner-primary", "fingerprint": "329e14bbcd820cde", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-820d9f2d70bf45aa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/topology-agent-node.tsx:37"}, "properties": {"repobilityId": "0a4a9ae8a8044df7", "scanner": "scanner-primary", "fingerprint": "820d9f2d70bf45aa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-85441b2f8fccc088", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/TablesAdvancedSections.tsx:422"}, "properties": {"repobilityId": "f1f96cde46ca25bc", "scanner": "scanner-primary", "fingerprint": "85441b2f8fccc088", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc6a01a4a0b2b3e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/dev/showcases/topology-adapter-node.tsx:38"}, "properties": {"repobilityId": "a6116f732ed3887a", "scanner": "scanner-primary", "fingerprint": "fc6a01a4a0b2b3e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-67e8d16dd18545d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/discovery/ui/ExistingAgentCard.tsx:15"}, "properties": {"repobilityId": "aa2aeeb51095d6f7", "scanner": "scanner-primary", "fingerprint": "67e8d16dd18545d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b3bc642a1bc4f3ff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/discovery/ui/CandidateCard.tsx:82"}, "properties": {"repobilityId": "7c8b749041a96f29", "scanner": "scanner-primary", "fingerprint": "b3bc642a1bc4f3ff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-62a10da481976038", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/session/ui/SessionRowCompact.tsx:127"}, "properties": {"repobilityId": "db2798139925a0f9", "scanner": "scanner-primary", "fingerprint": "62a10da481976038", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02d0ba83798532d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/session/ui/SessionRowFull.tsx:342"}, "properties": {"repobilityId": "19c85d3eea173ccf", "scanner": "scanner-primary", "fingerprint": "02d0ba83798532d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2101299a5a368e78", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/entities/activity/ui/ActorBadge.tsx:60"}, "properties": {"repobilityId": "6b9aaf23a1a1d674", "scanner": "scanner-primary", "fingerprint": "2101299a5a368e78", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37e2953d139c734b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/client/src/layers/features/extensions/model/extension-loader.ts:109"}, "properties": {"repobilityId": "7be99d71472d7a06", "scanner": "scanner-primary", "fingerprint": "37e2953d139c734b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fcc049df43d270e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/PackageCard.tsx:126"}, "properties": {"repobilityId": "602615395b093e59", "scanner": "scanner-primary", "fingerprint": "fcc049df43d270e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c2fdac54522a6e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/MarketplaceSourcesView.tsx:49"}, "properties": {"repobilityId": "b3fe16daa81d6c78", "scanner": "scanner-primary", "fingerprint": "9c2fdac54522a6e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f0f8de85245f5e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/marketplace/ui/PackageDetailSheet.tsx:77"}, "properties": {"repobilityId": "4f6919266edba8de", "scanner": "scanner-primary", "fingerprint": "0f0f8de85245f5e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61f57f5301f5700c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ConfigTab.tsx:227"}, "properties": {"repobilityId": "d0ac8193fafaea23", "scanner": "scanner-primary", "fingerprint": "61f57f5301f5700c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ae0d467088552003", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ToolkitTab.tsx:85"}, "properties": {"repobilityId": "084dd3d735fec647", "scanner": "scanner-primary", "fingerprint": "ae0d467088552003", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-10f7e6f3d9767e0d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/client/src/layers/features/agent-hub/ui/tabs/ToolkitTab.tsx:113"}, "properties": {"repobilityId": "d2dae1b47f219f9b", "scanner": "scanner-primary", "fingerprint": "10f7e6f3d9767e0d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e3a23f2d7e7aa3ed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ChannelBindingCard.tsx:171"}, "properties": {"repobilityId": "d4747297b33dd50e", "scanner": "scanner-primary", "fingerprint": "e3a23f2d7e7aa3ed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef8b0a16a0bc7a2d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ChannelPicker.tsx:134"}, "properties": {"repobilityId": "75b26ecded4870fd", "scanner": "scanner-primary", "fingerprint": "ef8b0a16a0bc7a2d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a267859fa87250a5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-settings/ui/ToolsTab.tsx:317"}, "properties": {"repobilityId": "84ce6a35af25c464", "scanner": "scanner-primary", "fingerprint": "a267859fa87250a5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee73838b1ed72dba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentCard.tsx:33"}, "properties": {"repobilityId": "7aeda8522c2bc591", "scanner": "scanner-primary", "fingerprint": "ee73838b1ed72dba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82f303728d0677da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/BindingEdge.tsx:105"}, "properties": {"repobilityId": "2051e380149cb803", "scanner": "scanner-primary", "fingerprint": "82f303728d0677da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4a6868a17419764", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AdapterNode.tsx:83"}, "properties": {"repobilityId": "458e773dfadf23e8", "scanner": "scanner-primary", "fingerprint": "c4a6868a17419764", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7b6ae59effb1cf9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentHealthDetail.tsx:90"}, "properties": {"repobilityId": "73f4b0a573737141", "scanner": "scanner-primary", "fingerprint": "b7b6ae59effb1cf9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40bb401e1e983d32", "level": "note", "message": {"text": "React Flow <MiniMap> without dark background \u2014 apps/client/src/layers/features/mesh/ui/TopologyGraph.tsx:292"}, "properties": {"repobilityId": "7e32139c1955068d", "scanner": "scanner-primary", "fingerprint": "40bb401e1e983d32", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.minimap.no-bg"]}}, {"ruleId": "scanner-600c3cf54b10f848", "level": "note", "message": {"text": "React Flow <Controls> without dark theming \u2014 apps/client/src/layers/features/mesh/ui/TopologyGraph.tsx:306"}, "properties": {"repobilityId": "c916210f82496c7e", "scanner": "scanner-primary", "fingerprint": "600c3cf54b10f848", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.controls.no-bg"]}}, {"ruleId": "scanner-14baa8d3c5c5ed14", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/mesh/ui/AgentNode.tsx:79"}, "properties": {"repobilityId": "2518cdd561ce3d78", "scanner": "scanner-primary", "fingerprint": "14baa8d3c5c5ed14", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2fa8a406ecf1eedd", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 apps/client/src/layers/features/mesh/ui/__tests__/AdapterNode.test.tsx:59"}, "properties": {"repobilityId": "ace5ad385baf1cb9", "scanner": "scanner-primary", "fingerprint": "2fa8a406ecf1eedd", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-c20285a35199d167", "level": "warning", "message": {"text": "Custom React Flow node registered without explicit width/height \u2014 apps/client/src/layers/features/mesh/ui/__tests__/AgentNode.reduced-motion.test.tsx:46"}, "properties": {"repobilityId": "cee53e9ec4ce751f", "scanner": "scanner-primary", "fingerprint": "c20285a35199d167", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.rfnode.no-dims"]}}, {"ruleId": "scanner-110d27f790215b1d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/commands/ui/CommandPalette.tsx:90"}, "properties": {"repobilityId": "a161945ef6f57a1d", "scanner": "scanner-primary", "fingerprint": "110d27f790215b1d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cba2d1b492744053", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/MessageRow.tsx:61"}, "properties": {"repobilityId": "a570d74ba1c1f53c", "scanner": "scanner-primary", "fingerprint": "cba2d1b492744053", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9343c38bcc2faeed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/RelayHealthBar.tsx:133"}, "properties": {"repobilityId": "68ad32345608431c", "scanner": "scanner-primary", "fingerprint": "9343c38bcc2faeed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a94f5c4fd7c61863", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/DeadLetterSection.tsx:80"}, "properties": {"repobilityId": "6df9b623d28b3f96", "scanner": "scanner-primary", "fingerprint": "a94f5c4fd7c61863", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bab84188d300b5e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/ConversationRow.tsx:204"}, "properties": {"repobilityId": "846173193bd1cf25", "scanner": "scanner-primary", "fingerprint": "3bab84188d300b5e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e81fdaef5f165bf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/wizard/ConfirmStep.tsx:37"}, "properties": {"repobilityId": "738b1b937eef71a2", "scanner": "scanner-primary", "fingerprint": "4e81fdaef5f165bf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bbf9d21075243c8c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/adapter/AdapterBindingRow.tsx:36"}, "properties": {"repobilityId": "d6dfe591400371e9", "scanner": "scanner-primary", "fingerprint": "bbf9d21075243c8c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3c48799a6667d654", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/relay/ui/adapter/AdapterCardError.tsx:39"}, "properties": {"repobilityId": "4c5c4104a31cad58", "scanner": "scanner-primary", "fingerprint": "3c48799a6667d654", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-291580c7e2e8cc26", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/files/ui/FilePalette.tsx:76"}, "properties": {"repobilityId": "fd24a4f7fe822350", "scanner": "scanner-primary", "fingerprint": "291580c7e2e8cc26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a149d1a2b70ee6f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/MemoryRecallBlock.tsx:156"}, "properties": {"repobilityId": "c5bdad2a7a813e1d", "scanner": "scanner-primary", "fingerprint": "6a149d1a2b70ee6f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0c9e5d9a0b89ede7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/SubagentBlock.tsx:63"}, "properties": {"repobilityId": "ee160d3c746b9f4b", "scanner": "scanner-primary", "fingerprint": "0c9e5d9a0b89ede7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32a1ea33f1942bbb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/FileAttachmentList.tsx:88"}, "properties": {"repobilityId": "bb7253a1188140c6", "scanner": "scanner-primary", "fingerprint": "32a1ea33f1942bbb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da5a55f75ef9268a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/message/UserMessageContent.tsx:17"}, "properties": {"repobilityId": "a71cd3610c74836a", "scanner": "scanner-primary", "fingerprint": "da5a55f75ef9268a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e94cbae195e213fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tools/QuestionAnswerSummary.tsx:81"}, "properties": {"repobilityId": "9f7c5c40915ef24a", "scanner": "scanner-primary", "fingerprint": "e94cbae195e213fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ca53683bc47b998b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskActiveForm.tsx:21"}, "properties": {"repobilityId": "8b34e5d86e6f803a", "scanner": "scanner-primary", "fingerprint": "ca53683bc47b998b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75fb8b04fdff2f73", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskDetailRow.tsx:42"}, "properties": {"repobilityId": "5f2344ec26469600", "scanner": "scanner-primary", "fingerprint": "75fb8b04fdff2f73", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-044439a0c77dd1df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/tasks/TaskRow.tsx:102"}, "properties": {"repobilityId": "f317869599c62a3f", "scanner": "scanner-primary", "fingerprint": "044439a0c77dd1df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e299991db7e426c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/primitives/CompactPendingRow.tsx:32"}, "properties": {"repobilityId": "53b816b2153dbc9c", "scanner": "scanner-primary", "fingerprint": "4e299991db7e426c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-193d49530bb7ec32", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/PromptSuggestionChips.tsx:31"}, "properties": {"repobilityId": "5ebf7799e5000af6", "scanner": "scanner-primary", "fingerprint": "193d49530bb7ec32", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cfabcb639c0558cf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/AnimatedPlaceholder.tsx:36"}, "properties": {"repobilityId": "2d1f567260a7eb91", "scanner": "scanner-primary", "fingerprint": "cfabcb639c0558cf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cad632266b75950b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/chat/ui/input/FileChipBar.tsx:63"}, "properties": {"repobilityId": "1fa647dc695637d3", "scanner": "scanner-primary", "fingerprint": "cad632266b75950b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25fa5ead67b59042", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/feature-promos/ui/PromoCard.tsx:57"}, "properties": {"repobilityId": "42c7bc964f73985f", "scanner": "scanner-primary", "fingerprint": "25fa5ead67b59042", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65a76bb8a2b82267", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/SidebarAgentHeader.tsx:39"}, "properties": {"repobilityId": "af13dc64e9010e5d", "scanner": "scanner-primary", "fingerprint": "65a76bb8a2b82267", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fb90b927cafa523", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/ConnectionsView.tsx:267"}, "properties": {"repobilityId": "8f6851eae3cb0957", "scanner": "scanner-primary", "fingerprint": "0fb90b927cafa523", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9e0d657fb8be40c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/session-list/ui/TasksView.tsx:77"}, "properties": {"repobilityId": "bcea71ef59a0684c", "scanner": "scanner-primary", "fingerprint": "9e0d657fb8be40c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8236eccf56d666d1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/lib/agent-columns.tsx:83"}, "properties": {"repobilityId": "ede613d987975d46", "scanner": "scanner-primary", "fingerprint": "8236eccf56d666d1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70a06c3f8ad50e61", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/ui/AgentRow.tsx:145"}, "properties": {"repobilityId": "1dc0044ff113c6e6", "scanner": "scanner-primary", "fingerprint": "70a06c3f8ad50e61", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9f6337197d5af1d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agents-list/ui/SessionLaunchPopover.tsx:63"}, "properties": {"repobilityId": "4f7590923e7d62c7", "scanner": "scanner-primary", "fingerprint": "9f6337197d5af1d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc20386d6bc4a42f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/activity-feed-page/ui/ActivityRow.tsx:102"}, "properties": {"repobilityId": "eabf33b61ff5fbf0", "scanner": "scanner-primary", "fingerprint": "dc20386d6bc4a42f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6165dfbf664a6031", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/ChannelSettingRow.tsx:57"}, "properties": {"repobilityId": "f4083183ac40ae60", "scanner": "scanner-primary", "fingerprint": "6165dfbf664a6031", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d73de2d7879800ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/TunnelConnected.tsx:68"}, "properties": {"repobilityId": "67fc1b206de8af35", "scanner": "scanner-primary", "fingerprint": "d73de2d7879800ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ad7ce1e64cbaacf4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/external-mcp/ApiKeySection.tsx:72"}, "properties": {"repobilityId": "fa8ce5a37041fede", "scanner": "scanner-primary", "fingerprint": "ad7ce1e64cbaacf4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a296cb686099db2c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/settings/ui/external-mcp/EndpointRow.tsx:16"}, "properties": {"repobilityId": "c42b01acd95c5095", "scanner": "scanner-primary", "fingerprint": "a296cb686099db2c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c20a7b6d78698bb5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/onboarding/ui/SystemRequirementsStep.tsx:320"}, "properties": {"repobilityId": "7a898bf098f2ac26", "scanner": "scanner-primary", "fingerprint": "c20a7b6d78698bb5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0bd509b64cfd6a37", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/onboarding/ui/NoAgentsFound.tsx:75"}, "properties": {"repobilityId": "e79cfa4880f9f92a", "scanner": "scanner-primary", "fingerprint": "0bd509b64cfd6a37", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3fa67b205aeba30b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentPreviewPanel.tsx:41"}, "properties": {"repobilityId": "fd7493729da184c5", "scanner": "scanner-primary", "fingerprint": "3fa67b205aeba30b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cdc43d390eb080ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentCommandItem.tsx:80"}, "properties": {"repobilityId": "7540b116865b8691", "scanner": "scanner-primary", "fingerprint": "cdc43d390eb080ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0611b43ee91841a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/command-palette/ui/AgentSubMenu.tsx:71"}, "properties": {"repobilityId": "d61e38858e083184", "scanner": "scanner-primary", "fingerprint": "0611b43ee91841a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-555716a79c8f7aa1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TimezoneCombobox.tsx:78"}, "properties": {"repobilityId": "d19fa570ef0eea90", "scanner": "scanner-primary", "fingerprint": "555716a79c8f7aa1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3584e65c49c37104", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/AgentPicker.tsx:54"}, "properties": {"repobilityId": "e3afa14a599d2fef", "scanner": "scanner-primary", "fingerprint": "3584e65c49c37104", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dce2949589cbb84a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TaskRunHistoryPanel.tsx:200"}, "properties": {"repobilityId": "63e4acb78c6088c0", "scanner": "scanner-primary", "fingerprint": "dce2949589cbb84a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c025359324cf8683", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/tasks/ui/TaskRow.tsx:277"}, "properties": {"repobilityId": "54d86e97809c8744", "scanner": "scanner-primary", "fingerprint": "c025359324cf8683", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fbcc005b30fdf623", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/agent-creation/ui/ConfigureStep.tsx:46"}, "properties": {"repobilityId": "bd3eb5c80444029a", "scanner": "scanner-primary", "fingerprint": "fbcc005b30fdf623", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e141bc05da3bc74f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-sidebar/__tests__/RecentAgentItem.test.tsx:21"}, "properties": {"repobilityId": "70992de5d458b724", "scanner": "scanner-primary", "fingerprint": "e141bc05da3bc74f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7aca6fa7f4e43022", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/ContextItem.tsx:56"}, "properties": {"repobilityId": "3ae243f975b9894d", "scanner": "scanner-primary", "fingerprint": "7aca6fa7f4e43022", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee148e379d269b4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/GitStatusItem.tsx:41"}, "properties": {"repobilityId": "ab7c1a05064451dd", "scanner": "scanner-primary", "fingerprint": "ee148e379d269b4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-380ae1437491b2a3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/status/ui/ModelConfigPopover.tsx:120"}, "properties": {"repobilityId": "2c63ea5ea69b6066", "scanner": "scanner-primary", "fingerprint": "380ae1437491b2a3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-588d1e9afcfb1d3d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/canvas/ui/CanvasHeader.tsx:40"}, "properties": {"repobilityId": "accb1fecd5555864", "scanner": "scanner-primary", "fingerprint": "588d1e9afcfb1d3d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a8cae5f7a65a13c9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-attention/ui/OfflineAgentDetailSheet.tsx:40"}, "properties": {"repobilityId": "f9502370f45e9aaa", "scanner": "scanner-primary", "fingerprint": "a8cae5f7a65a13c9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-38d8851b32d6fd55", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/features/dashboard-attention/ui/AttentionItem.tsx:38"}, "properties": {"repobilityId": "ea7190e4ae9377cf", "scanner": "scanner-primary", "fingerprint": "38d8851b32d6fd55", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b62be98bf28ebf19", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/client/src/layers/shared/ui/DirectoryPicker.tsx:320"}, "properties": {"repobilityId": "e68355c048996497", "scanner": "scanner-primary", "fingerprint": "b62be98bf28ebf19", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec5ace47d7494d2a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/site/scripts/generate-api-docs.ts:26"}, "properties": {"repobilityId": "28e93fa163f3819a", "scanner": "scanner-primary", "fingerprint": "ec5ace47d7494d2a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-636ad3d32793f644", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/layout.tsx:61"}, "properties": {"repobilityId": "09530c3ec8cf997f", "scanner": "scanner-primary", "fingerprint": "636ad3d32793f644", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9b0ae49071358969", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/marketplace/[slug]/page.tsx:119"}, "properties": {"repobilityId": "88c3d38e6c29389b", "scanner": "scanner-primary", "fingerprint": "9b0ae49071358969", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4016a8b2442f0f64", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/features/[slug]/page.tsx:88"}, "properties": {"repobilityId": "c58dcfe5f26921d7", "scanner": "scanner-primary", "fingerprint": "4016a8b2442f0f64", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c74eb0421c3acaea", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/features/category/[category]/page.tsx:108"}, "properties": {"repobilityId": "7dfa7b9227af0c05", "scanner": "scanner-primary", "fingerprint": "c74eb0421c3acaea", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-cbf2832543718bb6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/app/(marketing)/test/heroes/variants/h8-device-carousel.tsx:152"}, "properties": {"repobilityId": "e5d8690ef27dee81", "scanner": "scanner-primary", "fingerprint": "cbf2832543718bb6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-13fb62b923d1ab70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/app/(marketing)/test/heroes/variants/h2-split-terminal.tsx:306"}, "properties": {"repobilityId": "04b6de390344dcb8", "scanner": "scanner-primary", "fingerprint": "13fb62b923d1ab70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-90e6ad4c22073ad4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/site/src/app/(marketing)/blog/[slug]/page.tsx:111"}, "properties": {"repobilityId": "f3a0eb6677190106", "scanner": "scanner-primary", "fingerprint": "90e6ad4c22073ad4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1e812f4fbc446657", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/site/src/layers/features/marketing/ui/ConsoleMockup.tsx:42"}, "properties": {"repobilityId": "40a4b7368cdcde47", "scanner": "scanner-primary", "fingerprint": "1e812f4fbc446657", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-977e7a56a316c3f6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/site/src/layers/shared/ui/index.ts:3"}, "properties": {"repobilityId": "6d0757f77c55f31c", "scanner": "scanner-primary", "fingerprint": "977e7a56a316c3f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-e44db87d6c705427", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 .claude/scripts/spec-manifest-ops.ts:279"}, "properties": {"repobilityId": "ea123ede226de24a", "scanner": "scanner-primary", "fingerprint": "e44db87d6c705427", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-764b102b9c6f997b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 .claude/scripts/template-fetch.ts:1398"}, "properties": {"repobilityId": "19e3a0f0b4b4a103", "scanner": "scanner-primary", "fingerprint": "764b102b9c6f997b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"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-9ab2eab9c8357423", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}-slim"}, "properties": {"repobilityId": "10f3fd69710b141f", "scanner": "scanner-primary", "fingerprint": "9ab2eab9c8357423", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-81eb6a94fcbfa67b", "level": "error", "message": {"text": "Possible secret in packages/test-utils/src/mock-factories.ts"}, "properties": {"repobilityId": "acf1910fcce5098b", "scanner": "scanner-primary", "fingerprint": "81eb6a94fcbfa67b", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/test-utils/src/mock-factories.ts"}, "region": {"startLine": 323}}}]}, {"ruleId": "scanner-96fe11da16628f87", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/cli/scripts/build.ts:2"}, "properties": {"repobilityId": "d34015c04b859129", "scanner": "scanner-primary", "fingerprint": "96fe11da16628f87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cli/scripts/build.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-824351771c803bcb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/cli/src/check-claude.ts:1"}, "properties": {"repobilityId": "56193bc8c423d05a", "scanner": "scanner-primary", "fingerprint": "824351771c803bcb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cli/src/check-claude.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9418af670e74238c", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in packages/cli/src/cli.ts:586"}, "properties": {"repobilityId": "1c52227f3ca9f08f", "scanner": "scanner-primary", "fingerprint": "9418af670e74238c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cli/src/cli.ts"}, "region": {"startLine": 586}}}]}, {"ruleId": "scanner-e2b37ce266d092e7", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/cli/src/config-commands.ts:3"}, "properties": {"repobilityId": "079dc0d814bf21c8", "scanner": "scanner-primary", "fingerprint": "e2b37ce266d092e7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cli/src/config-commands.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-ae853d3641ef69f1", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/site-feature-category-pages/03-tasks.json:37"}, "properties": {"repobilityId": "94ae0b7fdeda417f", "scanner": "scanner-primary", "fingerprint": "ae853d3641ef69f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/site-feature-category-pages/03-tasks.json"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-2e02cd6b729f1389", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/og-seo-ai-readability-overhaul/03-tasks.json:85"}, "properties": {"repobilityId": "adcc14f952f7d5e7", "scanner": "scanner-primary", "fingerprint": "2e02cd6b729f1389", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/og-seo-ai-readability-overhaul/03-tasks.json"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-cd5a7bb99a285171", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in specs/ext-platform-04-agent-extensions/03-tasks.json:121"}, "properties": {"repobilityId": "043a422d19b39d15", "scanner": "scanner-primary", "fingerprint": "cd5a7bb99a285171", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/ext-platform-04-agent-extensions/03-tasks.json"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-3010dfeeae42349b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in specs/marketplace-05-claude-code-format-superset/03-tasks.json:169"}, "properties": {"repobilityId": "0250720e0b68b64e", "scanner": "scanner-primary", "fingerprint": "3010dfeeae42349b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/marketplace-05-claude-code-format-superset/03-tasks.json"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-7a769698f23656ce", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/memory-recall-indicator/03-tasks.json:145"}, "properties": {"repobilityId": "33e853349b92944b", "scanner": "scanner-primary", "fingerprint": "7a769698f23656ce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/memory-recall-indicator/03-tasks.json"}, "region": {"startLine": 145}}}]}, {"ruleId": "scanner-5e1f8f8e893f9bb4", "level": "error", "message": {"text": "Possible secret in specs/external-mcp-access/03-tasks.json"}, "properties": {"repobilityId": "394557a568394c00", "scanner": "scanner-primary", "fingerprint": "5e1f8f8e893f9bb4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/external-mcp-access/03-tasks.json"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-5e1f8f8e893f9bb4", "level": "error", "message": {"text": "Possible secret in specs/external-mcp-access/03-tasks.json"}, "properties": {"repobilityId": "394557a568394c00", "scanner": "scanner-primary", "fingerprint": "5e1f8f8e893f9bb4", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/external-mcp-access/03-tasks.json"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-43877aa6dbd6aeb1", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/ext-platform-01-agent-ui-control/03-tasks.json:97"}, "properties": {"repobilityId": "0bc82796eb59b325", "scanner": "scanner-primary", "fingerprint": "43877aa6dbd6aeb1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/ext-platform-01-agent-ui-control/03-tasks.json"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-288dcfade2657237", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in specs/server-client-code-review-fixes/03-tasks.json:37"}, "properties": {"repobilityId": "6e4f581ce2430117", "scanner": "scanner-primary", "fingerprint": "288dcfade2657237", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/server-client-code-review-fixes/03-tasks.json"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-05fac9ebb4e922cd", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in specs/settings-reset-restart/03-tasks.json:13"}, "properties": {"repobilityId": "ad784ffddf9ec5b0", "scanner": "scanner-primary", "fingerprint": "05fac9ebb4e922cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/settings-reset-restart/03-tasks.json"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-f51eaafede6ba20d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in specs/site-feature-catalog/03-tasks.json:61"}, "properties": {"repobilityId": "1705da30867900a0", "scanner": "scanner-primary", "fingerprint": "f51eaafede6ba20d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/site-feature-catalog/03-tasks.json"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-3f29446b7b07d8c0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in specs/marketplace-04-web-and-registry/03-tasks.json:253"}, "properties": {"repobilityId": "8861932ebe9fec84", "scanner": "scanner-primary", "fingerprint": "3f29446b7b07d8c0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "specs/marketplace-04-web-and-registry/03-tasks.json"}, "region": {"startLine": 253}}}]}, {"ruleId": "scanner-07d7335cfa5e70bc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/obsidian-plugin/build-plugins/patch-electron-compat.ts:14"}, "properties": {"repobilityId": "edf0a6ea3d45747d", "scanner": "scanner-primary", "fingerprint": "07d7335cfa5e70bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/obsidian-plugin/build-plugins/patch-electron-compat.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-12d22f86e6b96af0", "level": "error", "message": {"text": "Possible secret in apps/server/src/middleware/__tests__/mcp-auth.test.ts"}, "properties": {"repobilityId": "b0267844e6584abe", "scanner": "scanner-primary", "fingerprint": "12d22f86e6b96af0", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/middleware/__tests__/mcp-auth.test.ts"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-12d22f86e6b96af0", "level": "error", "message": {"text": "Possible secret in apps/server/src/middleware/__tests__/mcp-auth.test.ts"}, "properties": {"repobilityId": "b0267844e6584abe", "scanner": "scanner-primary", "fingerprint": "12d22f86e6b96af0", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/middleware/__tests__/mcp-auth.test.ts"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-b945f2ac0b74b6a8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/runtimes/claude-code/tooling/check-dependency.ts:1"}, "properties": {"repobilityId": "12ea2737f92a8996", "scanner": "scanner-primary", "fingerprint": "b945f2ac0b74b6a8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/services/runtimes/claude-code/tooling/check-dependency.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac86a6a280e93815", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/runtimes/claude-code/sdk/sdk-utils.ts:2"}, "properties": {"repobilityId": "38f2e9b962e1b663", "scanner": "scanner-primary", "fingerprint": "ac86a6a280e93815", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/services/runtimes/claude-code/sdk/sdk-utils.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-a18cb0ce4099e95e", "level": "error", "message": {"text": "Insecure pattern 'new_function_used' in apps/server/src/services/extensions/__tests__/extension-manager-server.test.ts:14"}, "properties": {"repobilityId": "7318bb8b549b4060", "scanner": "scanner-primary", "fingerprint": "a18cb0ce4099e95e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "new_function_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/services/extensions/__tests__/extension-manager-server.test.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-073cc3f69d9f5434", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/package-fetcher.ts:24"}, "properties": {"repobilityId": "4d22efa01eeb381f", "scanner": "scanner-primary", "fingerprint": "073cc3f69d9f5434", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/services/marketplace/package-fetcher.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-1f78e2306f990544", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/transaction.ts:14"}, "properties": {"repobilityId": "052685e9c424f466", "scanner": "scanner-primary", "fingerprint": "1f78e2306f990544", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/services/marketplace/transaction.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-9b850a8a5cc69097", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/marketplace/source-resolvers/git-subdir.ts:28"}, "properties": {"repobilityId": "f34e0671c97fec8a", "scanner": "scanner-primary", "fingerprint": "9b850a8a5cc69097", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/services/marketplace/source-resolvers/git-subdir.ts"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-fff93964a49d3d9e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/core/file-lister.ts:1"}, "properties": {"repobilityId": "8cd024b67e206a73", "scanner": "scanner-primary", "fingerprint": "fff93964a49d3d9e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/services/core/file-lister.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-57f9ed09eaa51f23", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/services/core/git-status.ts:1"}, "properties": {"repobilityId": "cf5f3f649ec790e5", "scanner": "scanner-primary", "fingerprint": "57f9ed09eaa51f23", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/services/core/git-status.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-325f9e63aa77390f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/server/src/routes/admin.ts:2"}, "properties": {"repobilityId": "5ee9596af323868d", "scanner": "scanner-primary", "fingerprint": "325f9e63aa77390f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/routes/admin.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-5125fceba7b87376", "level": "error", "message": {"text": "Possible secret in apps/server/src/routes/__tests__/config-mcp.test.ts"}, "properties": {"repobilityId": "064020a88042c127", "scanner": "scanner-primary", "fingerprint": "5125fceba7b87376", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/src/routes/__tests__/config-mcp.test.ts"}, "region": {"startLine": 130}}}]}, {"ruleId": "scanner-f76a07a4542e0527", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/client/src/layers/shared/model/__tests__/use-interactive-shortcuts.test.ts:30"}, "properties": {"repobilityId": "9b9e4a68039aa2ec", "scanner": "scanner-primary", "fingerprint": "f76a07a4542e0527", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/client/src/layers/shared/model/__tests__/use-interactive-shortcuts.test.ts"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-603ee9f55cf31a02", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/client/src/layers/shared/model/__tests__/use-deep-link-scroll.test.tsx:27"}, "properties": {"repobilityId": "4d1b966eeabaebe1", "scanner": "scanner-primary", "fingerprint": "603ee9f55cf31a02", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/client/src/layers/shared/model/__tests__/use-deep-link-scroll.test.tsx"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-02422764638f6855", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/layout.tsx:61"}, "properties": {"repobilityId": "8de280750a580456", "scanner": "scanner-primary", "fingerprint": "02422764638f6855", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/site/src/app/(marketing)/layout.tsx"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-9cd576bae29c764a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/marketplace/[slug]/page.tsx:119"}, "properties": {"repobilityId": "3492bcdf2e7b8f49", "scanner": "scanner-primary", "fingerprint": "9cd576bae29c764a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/site/src/app/(marketing)/marketplace/[slug]/page.tsx"}, "region": {"startLine": 119}}}]}, {"ruleId": "scanner-866b6a32a024b432", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/features/[slug]/page.tsx:88"}, "properties": {"repobilityId": "734bf5bc680b9d26", "scanner": "scanner-primary", "fingerprint": "866b6a32a024b432", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/site/src/app/(marketing)/features/[slug]/page.tsx"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-754ceacd09c1a6e5", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/features/category/[category]/page.tsx:108"}, "properties": {"repobilityId": "3ce8d1b5f91fefed", "scanner": "scanner-primary", "fingerprint": "754ceacd09c1a6e5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/site/src/app/(marketing)/features/category/[category]/page.tsx"}, "region": {"startLine": 108}}}]}, {"ruleId": "scanner-20e9eb2f8413e87f", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/site/src/app/(marketing)/blog/[slug]/page.tsx:111"}, "properties": {"repobilityId": "2201359d1414678c", "scanner": "scanner-primary", "fingerprint": "20e9eb2f8413e87f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/site/src/app/(marketing)/blog/[slug]/page.tsx"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-7dbcffb807d31990", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/desktop/src/main/server-process.ts:2"}, "properties": {"repobilityId": "41a3ee2cb466b7a1", "scanner": "scanner-primary", "fingerprint": "7dbcffb807d31990", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/src/main/server-process.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-ce7576117e5474eb", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in .claude/scripts/spec-manifest-ops.ts:31"}, "properties": {"repobilityId": "ea5682af41c93036", "scanner": "scanner-primary", "fingerprint": "ce7576117e5474eb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/scripts/spec-manifest-ops.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-c7e09126c7516424", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fed3acf2d0dc18dc", "scanner": "scanner-primary", "fingerprint": "c7e09126c7516424", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-docker.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-c7e09126c7516424", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9d6ae957cead127f", "scanner": "scanner-primary", "fingerprint": "c7e09126c7516424", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-docker.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-c7e09126c7516424", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "f399a272ea6c5005", "scanner": "scanner-primary", "fingerprint": "c7e09126c7516424", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-docker.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-c7e09126c7516424", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7bb04e3ac00691d6", "scanner": "scanner-primary", "fingerprint": "c7e09126c7516424", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-docker.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-c7e09126c7516424", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9e097bbc2f121184", "scanner": "scanner-primary", "fingerprint": "c7e09126c7516424", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-docker.yml"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-c7e09126c7516424", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ea8dd7b967a43e9d", "scanner": "scanner-primary", "fingerprint": "c7e09126c7516424", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-docker.yml"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-cab3430e135a46c8", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "d3863b98ed2da728", "scanner": "scanner-primary", "fingerprint": "cab3430e135a46c8", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-docker.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f0dde2c462751784", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3ca034a67bf53a26", "scanner": "scanner-primary", "fingerprint": "f0dde2c462751784", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/update-homebrew.yml"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-99613dc1ad09765c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9ca0e0b4040bf3af", "scanner": "scanner-primary", "fingerprint": "99613dc1ad09765c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/desktop-release.yml"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-99613dc1ad09765c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3c65f144b6b6e901", "scanner": "scanner-primary", "fingerprint": "99613dc1ad09765c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/desktop-release.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-c098ebdea4e7053a", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "ecbb68810a135b54", "scanner": "scanner-primary", "fingerprint": "c098ebdea4e7053a", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/desktop-release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "c53c79a36f63d0d8", "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-5054672303399eca", "level": "note", "message": {"text": "Very large file: packages/relay/src/adapters/telegram/__tests__/telegram-adapter.test.ts (1489 lines)"}, "properties": {"repobilityId": "c9ebf3c7da78d157", "scanner": "scanner-primary", "fingerprint": "5054672303399eca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b5ca2be3149afce6", "level": "note", "message": {"text": "Very large file: packages/relay/src/adapters/slack/__tests__/outbound.test.ts (1925 lines)"}, "properties": {"repobilityId": "ba5685d0ffef7540", "scanner": "scanner-primary", "fingerprint": "b5ca2be3149afce6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2f28393e5e2dac62", "level": "note", "message": {"text": "Very large file: packages/relay/src/__tests__/relay-core.test.ts (1583 lines)"}, "properties": {"repobilityId": "5f31ab0094025f0e", "scanner": "scanner-primary", "fingerprint": "2f28393e5e2dac62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4bda4ddccca1ee4c", "level": "note", "message": {"text": "Very large file: packages/shared/src/schemas.ts (1950 lines)"}, "properties": {"repobilityId": "e3dae492f662d6bf", "scanner": "scanner-primary", "fingerprint": "4bda4ddccca1ee4c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0294c888e26d53c5", "level": "note", "message": {"text": "Very large file: apps/server/src/services/relay/__tests__/adapter-manager.test.ts (1635 lines)"}, "properties": {"repobilityId": "3128df82c8997b3c", "scanner": "scanner-primary", "fingerprint": "0294c888e26d53c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c6148b2df3cb1d31", "level": "note", "message": {"text": "Very large file: .claude/scripts/template-fetch.ts (1726 lines)"}, "properties": {"repobilityId": "c6b463de7dd8ad21", "scanner": "scanner-primary", "fingerprint": "c6148b2df3cb1d31", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-63c3ff968f92be2e", "level": "note", "message": {"text": "39 TODO/FIXME markers"}, "properties": {"repobilityId": "4b38c118003e07d2", "scanner": "scanner-primary", "fingerprint": "63c3ff968f92be2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["maintenance"]}}, {"ruleId": "scanner-3f5eb5a4d7270c68", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/test-utils/package.json"}, "properties": {"repobilityId": "a98a442226b59b68", "scanner": "scanner-primary", "fingerprint": "3f5eb5a4d7270c68", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/test-utils/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-267a151f5b2d2ffa", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/marketplace/package.json"}, "properties": {"repobilityId": "160f531509b79f04", "scanner": "scanner-primary", "fingerprint": "267a151f5b2d2ffa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/marketplace/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3956a547afaa1c3b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/a2a-gateway/package.json"}, "properties": {"repobilityId": "c87b3780f0fdf98a", "scanner": "scanner-primary", "fingerprint": "3956a547afaa1c3b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/a2a-gateway/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0f4f5be174b24ea7", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/extension-api/package.json"}, "properties": {"repobilityId": "a88c4052d24f0bd3", "scanner": "scanner-primary", "fingerprint": "0f4f5be174b24ea7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/extension-api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ab3060c0a0085c67", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/mesh/package.json"}, "properties": {"repobilityId": "17e022feb413f333", "scanner": "scanner-primary", "fingerprint": "ab3060c0a0085c67", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/mesh/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-40f2be5ea6a74c30", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/relay/package.json"}, "properties": {"repobilityId": "22d7e98f7073cd31", "scanner": "scanner-primary", "fingerprint": "40f2be5ea6a74c30", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/relay/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3f65e1ca9b00183a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/eslint-config/package.json"}, "properties": {"repobilityId": "7374bbf66cd702ed", "scanner": "scanner-primary", "fingerprint": "3f65e1ca9b00183a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/eslint-config/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-8c2e3196a4ef0cdd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/cli/package.json"}, "properties": {"repobilityId": "2faf23490612d7a6", "scanner": "scanner-primary", "fingerprint": "8c2e3196a4ef0cdd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/cli/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2699d5f16ae11282", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/shared/package.json"}, "properties": {"repobilityId": "37ac218a4ef9b430", "scanner": "scanner-primary", "fingerprint": "2699d5f16ae11282", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec1830d7b7399060", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/skills/package.json"}, "properties": {"repobilityId": "b52f5e2f2add1668", "scanner": "scanner-primary", "fingerprint": "ec1830d7b7399060", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/skills/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-599516835ead7d6e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/icons/package.json"}, "properties": {"repobilityId": "282ce8c0fc711465", "scanner": "scanner-primary", "fingerprint": "599516835ead7d6e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/icons/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b2fdd93746102235", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: templates/relay-adapter/package.json"}, "properties": {"repobilityId": "d36d4e2c38e9ec1d", "scanner": "scanner-primary", "fingerprint": "b2fdd93746102235", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "templates/relay-adapter/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9fa2ff0aeac2699d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/obsidian-plugin/package.json"}, "properties": {"repobilityId": "4aa15daf4a5c5ee7", "scanner": "scanner-primary", "fingerprint": "9fa2ff0aeac2699d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/obsidian-plugin/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5f12bbcc60e1f76c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/server/package.json"}, "properties": {"repobilityId": "16bf11fe30b0b8cc", "scanner": "scanner-primary", "fingerprint": "5f12bbcc60e1f76c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9b8f493dac51a65f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/client/package.json"}, "properties": {"repobilityId": "692800b1999a42ba", "scanner": "scanner-primary", "fingerprint": "9b8f493dac51a65f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/client/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-482d2261cd0f01ce", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/site/package.json"}, "properties": {"repobilityId": "c3d7a4cdb0728e9e", "scanner": "scanner-primary", "fingerprint": "482d2261cd0f01ce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/site/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d57b3f82d2270c5b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/package.json"}, "properties": {"repobilityId": "a5d1a254ecc349f8", "scanner": "scanner-primary", "fingerprint": "d57b3f82d2270c5b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-13c399c461b261dc", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/e2e/package.json"}, "properties": {"repobilityId": "da0ddd3191e16f9a", "scanner": "scanner-primary", "fingerprint": "13c399c461b261dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/e2e/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "9f346fde965b6cc6", "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": "c0065ec85eb6b813", "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": "eaf98610091a2194", "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": "e2e0bc1c09032d03", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3a0715d490625a11", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/context-isolator.md"}, "properties": {"repobilityId": "a79ea1ae91612246", "scanner": "scanner-primary", "fingerprint": "3a0715d490625a11", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/context-isolator.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d48bbe0a998f4640", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/agents/research-expert.md"}, "properties": {"repobilityId": "283a8841fbc3d161", "scanner": "scanner-primary", "fingerprint": "d48bbe0a998f4640", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/research-expert.md"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-8b61cf3bbbef67b3", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/code-reviewer.md"}, "properties": {"repobilityId": "5bdbcbe505ae9cd6", "scanner": "scanner-primary", "fingerprint": "8b61cf3bbbef67b3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/code-reviewer.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-395dc6ff28b75e36", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/agents/react/react-tanstack-expert.md"}, "properties": {"repobilityId": "bd58614152940353", "scanner": "scanner-primary", "fingerprint": "395dc6ff28b75e36", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/react/react-tanstack-expert.md"}, "region": {"startLine": 338}}}]}, {"ruleId": "scanner-6cc6c966ef32fb44", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/typescript/typescript-expert.md"}, "properties": {"repobilityId": "651751234e3601bc", "scanner": "scanner-primary", "fingerprint": "6cc6c966ef32fb44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/typescript/typescript-expert.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30e3077aecab2385", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/scripts/README-PACKAGE-MERGE.md"}, "properties": {"repobilityId": "95983323aaa6d3ae", "scanner": "scanner-primary", "fingerprint": "30e3077aecab2385", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/scripts/README-PACKAGE-MERGE.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90b8350401f87d14", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/browsertest.md"}, "properties": {"repobilityId": "b89a837220fdbdbd", "scanner": "scanner-primary", "fingerprint": "90b8350401f87d14", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/browsertest.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bf888e55fd3fb166", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/pm.md"}, "properties": {"repobilityId": "08e5e097e376390a", "scanner": "scanner-primary", "fingerprint": "bf888e55fd3fb166", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/pm.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d4fcd09f24c2583e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/browsertest:maintain.md"}, "properties": {"repobilityId": "5338cdba6e900d6b", "scanner": "scanner-primary", "fingerprint": "d4fcd09f24c2583e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/browsertest:maintain.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-58fe6e2f20044dbd", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/debug/logs.md"}, "properties": {"repobilityId": "80dbaa678380ee50", "scanner": "scanner-primary", "fingerprint": "58fe6e2f20044dbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/debug/logs.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c64b05d15509821b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/debug/test.md"}, "properties": {"repobilityId": "76312861275b7d0c", "scanner": "scanner-primary", "fingerprint": "c64b05d15509821b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/debug/test.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e27b9d550d7ac331", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/debug/types.md"}, "properties": {"repobilityId": "900fa06203292858", "scanner": "scanner-primary", "fingerprint": "e27b9d550d7ac331", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/debug/types.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-919d4b52bdce5aa9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/git/push.md"}, "properties": {"repobilityId": "b0b4f356fadf0f8d", "scanner": "scanner-primary", "fingerprint": "919d4b52bdce5aa9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/git/push.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c4506b86c6d431da", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/git/commit.md"}, "properties": {"repobilityId": "b539665d787540cd", "scanner": "scanner-primary", "fingerprint": "c4506b86c6d431da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/git/commit.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a053d499b9d9001e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/chat/self-test.md"}, "properties": {"repobilityId": "15229ce6ef442de4", "scanner": "scanner-primary", "fingerprint": "a053d499b9d9001e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/chat/self-test.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dca940b40310ed34", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/spec/create.md"}, "properties": {"repobilityId": "027701709c9f779b", "scanner": "scanner-primary", "fingerprint": "dca940b40310ed34", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/spec/create.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f3c281ecdc701e4b", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/spec/create.md"}, "properties": {"repobilityId": "a372c6e6952e4ad2", "scanner": "scanner-primary", "fingerprint": "f3c281ecdc701e4b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/spec/create.md"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-4f64b9d63e1747ae", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/spec/doc-update.md"}, "properties": {"repobilityId": "2406d00eabe6fb14", "scanner": "scanner-primary", "fingerprint": "4f64b9d63e1747ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/spec/doc-update.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c0a2ad2c7ba6e20e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/spec/execute.md"}, "properties": {"repobilityId": "255eefe5e2f0ff20", "scanner": "scanner-primary", "fingerprint": "c0a2ad2c7ba6e20e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/spec/execute.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3c67c7e88656a812", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/spec/audit.md"}, "properties": {"repobilityId": "ec47ab8471fac320", "scanner": "scanner-primary", "fingerprint": "3c67c7e88656a812", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/spec/audit.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a356baf05ed412b5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/off.md"}, "properties": {"repobilityId": "afaf48299c1d70a5", "scanner": "scanner-primary", "fingerprint": "a356baf05ed412b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/cc/notify/off.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-df73062ad2de57f9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/status.md"}, "properties": {"repobilityId": "b70a421ac7b7d061", "scanner": "scanner-primary", "fingerprint": "df73062ad2de57f9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/cc/notify/status.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a3c32c65d19d3f17", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/notify/on.md"}, "properties": {"repobilityId": "2bd6b6365829b5d5", "scanner": "scanner-primary", "fingerprint": "a3c32c65d19d3f17", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/cc/notify/on.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-54c4fdaf780f547b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/ide/set.md"}, "properties": {"repobilityId": "c581a74b77990c8e", "scanner": "scanner-primary", "fingerprint": "54c4fdaf780f547b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/cc/ide/set.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1f07aa32c11e4289", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/cc/ide/reset.md"}, "properties": {"repobilityId": "07c2744bad5b9587", "scanner": "scanner-primary", "fingerprint": "1f07aa32c11e4289", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/cc/ide/reset.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-354e6d0d48d0288d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/docs/status.md"}, "properties": {"repobilityId": "a7fb4a17a5c5c935", "scanner": "scanner-primary", "fingerprint": "354e6d0d48d0288d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/docs/status.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a9b7914a5f176f30", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/worktree/list.md"}, "properties": {"repobilityId": "5e7b8125c03ae1f0", "scanner": "scanner-primary", "fingerprint": "a9b7914a5f176f30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/worktree/list.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1d376ccb9e2ce5d1", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/commands/system/release.md"}, "properties": {"repobilityId": "1396e855a6e0e173", "scanner": "scanner-primary", "fingerprint": "1d376ccb9e2ce5d1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/system/release.md"}, "region": {"startLine": 754}}}]}, {"ruleId": "scanner-780bc22dbd42e99e", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/commands/system/release.md"}, "properties": {"repobilityId": "5ee1c1f338ad24ef", "scanner": "scanner-primary", "fingerprint": "780bc22dbd42e99e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/system/release.md"}, "region": {"startLine": 689}}}]}, {"ruleId": "scanner-8c2d360ebe125eb9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/adr/create.md"}, "properties": {"repobilityId": "f50bd072172b9be3", "scanner": "scanner-primary", "fingerprint": "8c2d360ebe125eb9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/adr/create.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3abb2fa8654c31f2", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/adr/from-spec.md"}, "properties": {"repobilityId": "7bcaa9b152a43717", "scanner": "scanner-primary", "fingerprint": "3abb2fa8654c31f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/adr/from-spec.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f03243ca42c342d9", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/commands/template/check.md"}, "properties": {"repobilityId": "eab89023b5a8dc42", "scanner": "scanner-primary", "fingerprint": "f03243ca42c342d9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/commands/template/check.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-513cca96346ae1f5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/fsd-layers.md"}, "properties": {"repobilityId": "92a9029f0ef9228d", "scanner": "scanner-primary", "fingerprint": "513cca96346ae1f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/fsd-layers.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-153fc3a6c35521f7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/agent-storage.md"}, "properties": {"repobilityId": "79e63bc857a7cb7d", "scanner": "scanner-primary", "fingerprint": "153fc3a6c35521f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/agent-storage.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3a1d54d4ec110a80", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/server-structure.md"}, "properties": {"repobilityId": "d6fd5447d7af1f44", "scanner": "scanner-primary", "fingerprint": "3a1d54d4ec110a80", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/server-structure.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7fdfc1761e858f2a", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/rules/testing.md"}, "properties": {"repobilityId": "ed90632c4894c7dc", "scanner": "scanner-primary", "fingerprint": "7fdfc1761e858f2a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/rules/testing.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90505a5bec482329", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/linear-loop/templates/audit-workspace.md"}, "properties": {"repobilityId": "632e324b3197218f", "scanner": "scanner-primary", "fingerprint": "90505a5bec482329", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/linear-loop/templates/audit-workspace.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27e83aa939f65983", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/managing-specs/SKILL.md"}, "properties": {"repobilityId": "fc967ba5e6dbe513", "scanner": "scanner-primary", "fingerprint": "27e83aa939f65983", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/managing-specs/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fce15dc7bb1e3388", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/test-driven-development/testing-anti-patterns.md"}, "properties": {"repobilityId": "c4d1e946e8fa2ef0", "scanner": "scanner-primary", "fingerprint": "fce15dc7bb1e3388", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/test-driven-development/testing-anti-patterns.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eefb63da3f3ea736", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/test-driven-development/SKILL.md"}, "properties": {"repobilityId": "2c07d0e515d7a8b2", "scanner": "scanner-primary", "fingerprint": "eefb63da3f3ea736", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/test-driven-development/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-184b10b1dd24a8b6", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/executing-specs/implementation-agent-prompt.md"}, "properties": {"repobilityId": "231d338630ad29f1", "scanner": "scanner-primary", "fingerprint": "184b10b1dd24a8b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/executing-specs/implementation-agent-prompt.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bdf6b3f230be9ce1", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/working-in-worktrees/SKILL.md"}, "properties": {"repobilityId": "1d83e17cc289d09c", "scanner": "scanner-primary", "fingerprint": "bdf6b3f230be9ce1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/working-in-worktrees/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8f6a908cd6dc1d51", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/test-utils/src/mock-factories.ts:150"}, "properties": {"repobilityId": "625198c5cba037d6", "scanner": "scanner-primary", "fingerprint": "8f6a908cd6dc1d51", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92ebe6c5573273cc", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/relay/src/adapters/claude-code/claude-code-adapter.ts:264"}, "properties": {"repobilityId": "9c5de710ee47339d", "scanner": "scanner-primary", "fingerprint": "92ebe6c5573273cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16a59b3ce309e499", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/relay/src/adapters/claude-code/__tests__/claude-code-adapter.test.ts:100"}, "properties": {"repobilityId": "80634dcd301be79b", "scanner": "scanner-primary", "fingerprint": "16a59b3ce309e499", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ac05548f852efac", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/relay/src/adapters/telegram/__tests__/telegram-adapter.test.ts:221"}, "properties": {"repobilityId": "b08b3cd7079cf2f1", "scanner": "scanner-primary", "fingerprint": "3ac05548f852efac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e2c53b53491a113", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/relay/src/adapters/slack/outbound.ts:174"}, "properties": {"repobilityId": "60b7daccd613d7dd", "scanner": "scanner-primary", "fingerprint": "8e2c53b53491a113", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4ac1d326f4f10a64", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/relay/src/__tests__/relay-core.test.ts:1145"}, "properties": {"repobilityId": "6f79829a61497eac", "scanner": "scanner-primary", "fingerprint": "4ac1d326f4f10a64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f34068772449f5e3", "level": "none", "message": {"text": "Commented-code block (11 lines) in packages/db/src/schema/sessions.ts:3"}, "properties": {"repobilityId": "7d606916e36d348f", "scanner": "scanner-primary", "fingerprint": "f34068772449f5e3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6045a3359cbe066b", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/cli/src/cli.ts:59"}, "properties": {"repobilityId": "3f5c2725d4cd9c57", "scanner": "scanner-primary", "fingerprint": "6045a3359cbe066b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac10de1f58a75b70", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/cli/src/commands/package-validate-remote.ts:148"}, "properties": {"repobilityId": "a9fdf80c3301b6a7", "scanner": "scanner-primary", "fingerprint": "ac10de1f58a75b70", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10b34f667e8e76e0", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/cli/src/commands/package-validate-marketplace.ts:142"}, "properties": {"repobilityId": "a20b900c59226986", "scanner": "scanner-primary", "fingerprint": "10b34f667e8e76e0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-445ebc0b0a0eb571", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/cli/src/__tests__/cache-commands.test.ts:3"}, "properties": {"repobilityId": "c1105273084b8bd8", "scanner": "scanner-primary", "fingerprint": "445ebc0b0a0eb571", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9f67ecf749c5eda3", "level": "note", "message": {"text": "Legacy-named symbol `isDeprecated` in packages/shared/src/schemas.ts:1528"}, "properties": {"repobilityId": "d754ebc29ec31ba2", "scanner": "scanner-primary", "fingerprint": "9f67ecf749c5eda3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-53f5767d37ead484", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/shared/src/session-stream.ts:232"}, "properties": {"repobilityId": "170d002b9932c065", "scanner": "scanner-primary", "fingerprint": "53f5767d37ead484", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17c8c9750df72e00", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 examples/extensions/linear-issues/server.ts:101"}, "properties": {"repobilityId": "67d41b90959ed557", "scanner": "scanner-primary", "fingerprint": "17c8c9750df72e00", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50345f8945adec00", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/index.ts:151"}, "properties": {"repobilityId": "43bde34a3ebd7118", "scanner": "scanner-primary", "fingerprint": "50345f8945adec00", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46cf7ad4f132d3eb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/middleware/error-handler.ts:10"}, "properties": {"repobilityId": "d1866ecaa12cdc96", "scanner": "scanner-primary", "fingerprint": "46cf7ad4f132d3eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8fe8a669defb5d9", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/server/src/services/runtimes/claude-code/claude-code-runtime.ts:597"}, "properties": {"repobilityId": "e28c1697b2d38fe6", "scanner": "scanner-primary", "fingerprint": "d8fe8a669defb5d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4dbcaf62a2a7c509", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/messaging/message-sender.ts:312"}, "properties": {"repobilityId": "f73292930c1b1a1b", "scanner": "scanner-primary", "fingerprint": "4dbcaf62a2a7c509", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98dd548120cb3ae1", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/sessions/transcript-parser.ts:217"}, "properties": {"repobilityId": "d2c9a27636b41591", "scanner": "scanner-primary", "fingerprint": "98dd548120cb3ae1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ac81f778de798d20", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/services/runtimes/claude-code/__tests__/claude-code-runtime-session-contract.test.ts:70"}, "properties": {"repobilityId": "ef944f462a508a11", "scanner": "scanner-primary", "fingerprint": "ac81f778de798d20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-afe7f36ce5a75a74", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/runtimes/claude-code/__tests__/claude-code-runtime.test.ts:668"}, "properties": {"repobilityId": "2e91f89cd2ea0afa", "scanner": "scanner-primary", "fingerprint": "afe7f36ce5a75a74", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e02f52d3f9157bc4", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/system-event-mapper.ts:173"}, "properties": {"repobilityId": "788fbf76ad7f10d5", "scanner": "scanner-primary", "fingerprint": "e02f52d3f9157bc4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc1dfa9c435b5fac", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/message-event-mapper.ts:36"}, "properties": {"repobilityId": "d64519ab02b75167", "scanner": "scanner-primary", "fingerprint": "cc1dfa9c435b5fac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2be919800d774075", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/stream-event-mapper.ts:26"}, "properties": {"repobilityId": "8bba5abe7a43fba2", "scanner": "scanner-primary", "fingerprint": "2be919800d774075", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4334a645e371a787", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/server/src/services/runtimes/claude-code/sdk/event-mappers/result-event-mapper.ts:73"}, "properties": {"repobilityId": "a547a10693c05052", "scanner": "scanner-primary", "fingerprint": "4334a645e371a787", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f513c8d3a4c24a7", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/services/runtimes/test-mode/__tests__/test-mode-runtime.test.ts:11"}, "properties": {"repobilityId": "bb86348cd8854448", "scanner": "scanner-primary", "fingerprint": "8f513c8d3a4c24a7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de070647ef02b4dd", "level": "none", "message": {"text": "Commented-code block (12 lines) in apps/server/src/services/extensions/extension-templates.ts:120"}, "properties": {"repobilityId": "4dfc8c1ee4cf801f", "scanner": "scanner-primary", "fingerprint": "de070647ef02b4dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-faba5752fe9e674a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/extensions/extension-templates.ts:164"}, "properties": {"repobilityId": "948ec62d6df5441a", "scanner": "scanner-primary", "fingerprint": "faba5752fe9e674a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fe070b58c6de6a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/marketplace/telemetry-reporter.ts:62"}, "properties": {"repobilityId": "7ac08e8ecdf70db3", "scanner": "scanner-primary", "fingerprint": "2fe070b58c6de6a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c2c4d0419f452032", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/server/src/services/marketplace/package-fetcher.ts:400"}, "properties": {"repobilityId": "f7c5c27d222530d5", "scanner": "scanner-primary", "fingerprint": "c2c4d0419f452032", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-881ff4a8dc363253", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace/source-resolvers/git-subdir.ts:239"}, "properties": {"repobilityId": "8a3dd0ce725b8eb4", "scanner": "scanner-primary", "fingerprint": "881ff4a8dc363253", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-809a5e82bf8640d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace/flows/install-agent.ts:115"}, "properties": {"repobilityId": "efc69d8c8348e4c9", "scanner": "scanner-primary", "fingerprint": "809a5e82bf8640d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca7af64f4e312a92", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/services/marketplace/__tests__/integration.test.ts:260"}, "properties": {"repobilityId": "1504fa28f7b9e2ca", "scanner": "scanner-primary", "fingerprint": "ca7af64f4e312a92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-525faed5aae7612b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace/__tests__/telemetry-privacy.test.ts:147"}, "properties": {"repobilityId": "01171966d14222b5", "scanner": "scanner-primary", "fingerprint": "525faed5aae7612b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c814a658325f551", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/server/src/services/marketplace/__tests__/failure-paths.test.ts:435"}, "properties": {"repobilityId": "9931c1bdd2d860bf", "scanner": "scanner-primary", "fingerprint": "9c814a658325f551", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f9cf9c13b3d1cc6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace-mcp/__tests__/integration.test.ts:384"}, "properties": {"repobilityId": "36b18407fbea5fdb", "scanner": "scanner-primary", "fingerprint": "8f9cf9c13b3d1cc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41fd8ca6f7e05215", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/marketplace-mcp/__tests__/recommend-engine.test.ts:103"}, "properties": {"repobilityId": "c23dd18c96c1bdc7", "scanner": "scanner-primary", "fingerprint": "41fd8ca6f7e05215", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a6fe3deeb39215b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/relay/adapter-manager.ts:145"}, "properties": {"repobilityId": "38232463345d5059", "scanner": "scanner-primary", "fingerprint": "7a6fe3deeb39215b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc17b825d8ff5235", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/relay/subject-resolver.ts:43"}, "properties": {"repobilityId": "00fa2adf41e04384", "scanner": "scanner-primary", "fingerprint": "fc17b825d8ff5235", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7bbe2d0da9f43bc", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/services/relay/__tests__/runtime-neutral-dispatch.test.ts:87"}, "properties": {"repobilityId": "060b42568cbbb2ed", "scanner": "scanner-primary", "fingerprint": "e7bbe2d0da9f43bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7235f95e3f20281", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/session/session-list-broadcaster.ts:83"}, "properties": {"repobilityId": "a0f6a517fef1802a", "scanner": "scanner-primary", "fingerprint": "f7235f95e3f20281", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8bdaa6e1eb88c20f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/session/session-state-projector.ts:603"}, "properties": {"repobilityId": "16e417b5fe51a399", "scanner": "scanner-primary", "fingerprint": "8bdaa6e1eb88c20f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ef4063828eb266d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/session/trigger-turn.ts:141"}, "properties": {"repobilityId": "1885061f0ddf311b", "scanner": "scanner-primary", "fingerprint": "0ef4063828eb266d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-511e46e6a44bcb8a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/session/__tests__/session-state-projector.test.ts:67"}, "properties": {"repobilityId": "f1adab385b049ca2", "scanner": "scanner-primary", "fingerprint": "511e46e6a44bcb8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-242a1a35e3b12c08", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/services/core/config-manager.ts:117"}, "properties": {"repobilityId": "661a5260a782ad59", "scanner": "scanner-primary", "fingerprint": "242a1a35e3b12c08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63760638553c98d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/services/core/runtime-registry.ts:176"}, "properties": {"repobilityId": "15849cef736ec28d", "scanner": "scanner-primary", "fingerprint": "63760638553c98d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1c54450736040c6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/services/__tests__/transcript-parser.test.ts:488"}, "properties": {"repobilityId": "9a0eeff693fe6f3f", "scanner": "scanner-primary", "fingerprint": "d1c54450736040c6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ebbadd0608907a2", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/server/src/routes/mesh.ts:136"}, "properties": {"repobilityId": "154031e95a3d367c", "scanner": "scanner-primary", "fingerprint": "5ebbadd0608907a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bf848e07b61c223", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/server/src/routes/sessions.ts:299"}, "properties": {"repobilityId": "854aa64ef8ae3309", "scanner": "scanner-primary", "fingerprint": "2bf848e07b61c223", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a3b883e6a4bb0e1", "level": "none", "message": {"text": "Commented-code block (15 lines) in apps/server/src/routes/session-events-handler.ts:103"}, "properties": {"repobilityId": "744e1b2153b3d8e5", "scanner": "scanner-primary", "fingerprint": "7a3b883e6a4bb0e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8152e8356bdbd31c", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/server/src/routes/__tests__/sessions-interactive.test.ts:190"}, "properties": {"repobilityId": "5d449734380fe352", "scanner": "scanner-primary", "fingerprint": "8152e8356bdbd31c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2c7eeeb0ded4e02", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-trigger.test.ts:269"}, "properties": {"repobilityId": "4f3841ccd58d49ea", "scanner": "scanner-primary", "fingerprint": "e2c7eeeb0ded4e02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-06f2a6ba4636de3b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-cross-client.test.ts:205"}, "properties": {"repobilityId": "a500827654e3482f", "scanner": "scanner-primary", "fingerprint": "06f2a6ba4636de3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6bceeffdfbf25654", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions.test.ts:299"}, "properties": {"repobilityId": "21f7dd096976ef28", "scanner": "scanner-primary", "fingerprint": "6bceeffdfbf25654", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17cc4018cf45cf73", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/server/src/routes/__tests__/sessions-events.test.ts:257"}, "properties": {"repobilityId": "bf499dd97337e97f", "scanner": "scanner-primary", "fingerprint": "17cc4018cf45cf73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25b0ef3d69148af1", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/server/src/routes/__tests__/sessions-multi-runtime.test.ts:476"}, "properties": {"repobilityId": "012d4ef7cddb075c", "scanner": "scanner-primary", "fingerprint": "25b0ef3d69148af1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e57cd226738e6b06", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/env.ts:6"}, "properties": {"repobilityId": "b700d85c0966909a", "scanner": "scanner-primary", "fingerprint": "e57cd226738e6b06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99213475f3c71b3e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/widgets/app-layout/ui/DialogHost.tsx:60"}, "properties": {"repobilityId": "2e2ae4a70fba2e5d", "scanner": "scanner-primary", "fingerprint": "99213475f3c71b3e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-869c1e34f2680056", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/client/src/layers/entities/session/model/session-list-store.ts:138"}, "properties": {"repobilityId": "3bb2413afa3b6bb5", "scanner": "scanner-primary", "fingerprint": "869c1e34f2680056", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae00a20b876338f2", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/entities/session/model/session-stream-store.ts:352"}, "properties": {"repobilityId": "dde79d48d133ad5d", "scanner": "scanner-primary", "fingerprint": "ae00a20b876338f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f044d1e35897e79", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/client/src/layers/entities/session/model/session-stream-binding.ts:75"}, "properties": {"repobilityId": "fe9abea1662d2764", "scanner": "scanner-primary", "fingerprint": "3f044d1e35897e79", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-877d394a54530efd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/entities/session/model/__tests__/session-stream-store.test.ts:157"}, "properties": {"repobilityId": "d25cde5f191b5dd5", "scanner": "scanner-primary", "fingerprint": "877d394a54530efd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-45eb9d9f5f66c6bc", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/entities/session/model/__tests__/session-stream-binding.test.ts:16"}, "properties": {"repobilityId": "5e3c4d2ceed67b85", "scanner": "scanner-primary", "fingerprint": "45eb9d9f5f66c6bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d19df2698713250", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/client/src/layers/entities/session/model/__tests__/session-chat-store.test.ts:102"}, "properties": {"repobilityId": "43bc588a97246464", "scanner": "scanner-primary", "fingerprint": "3d19df2698713250", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-718475fc1ad2cf3b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/entities/session/model/__tests__/use-global-session-stream.test.tsx:109"}, "properties": {"repobilityId": "dae061b5c286a3f7", "scanner": "scanner-primary", "fingerprint": "718475fc1ad2cf3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-363e156e782c50a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/api/queries.ts:32"}, "properties": {"repobilityId": "4bd099ce3168f00e", "scanner": "scanner-primary", "fingerprint": "363e156e782c50a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf1ee1a3ae71664b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/extensions/__tests__/extension-loader.test.ts:96"}, "properties": {"repobilityId": "61745d549a2d6224", "scanner": "scanner-primary", "fingerprint": "bf1ee1a3ae71664b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74ca7a836152c83d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:104"}, "properties": {"repobilityId": "c63926bb8a8ac869", "scanner": "scanner-primary", "fingerprint": "74ca7a836152c83d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-03173dddf8aeb005", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:212"}, "properties": {"repobilityId": "0f113e4342537360", "scanner": "scanner-primary", "fingerprint": "03173dddf8aeb005", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e227a473138ddc6a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/model/extension-api-factory.ts:150"}, "properties": {"repobilityId": "8b07fa9f7940d7c3", "scanner": "scanner-primary", "fingerprint": "e227a473138ddc6a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b42f9a0b7567f0b2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/features/extensions/model/extension-loader.ts:19"}, "properties": {"repobilityId": "466c440ad0e7c957", "scanner": "scanner-primary", "fingerprint": "b42f9a0b7567f0b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2f1417d2a8ec61a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/extensions/model/extension-context.tsx:90"}, "properties": {"repobilityId": "c358bd0dbb106511", "scanner": "scanner-primary", "fingerprint": "b2f1417d2a8ec61a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17880bb36a6bcc20", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/marketplace/__tests__/install-flow.integration.test.tsx:311"}, "properties": {"repobilityId": "999fd774f8248848", "scanner": "scanner-primary", "fingerprint": "17880bb36a6bcc20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ac9591acd41aa8a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/agent-hub/__tests__/deep-link-migration.test.tsx:29"}, "properties": {"repobilityId": "c0465174d88b974f", "scanner": "scanner-primary", "fingerprint": "6ac9591acd41aa8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2a89e2d43ae91b91", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/__tests__/MessageItem.test.tsx:398"}, "properties": {"repobilityId": "edf01a57a6b8dbda", "scanner": "scanner-primary", "fingerprint": "2a89e2d43ae91b91", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae19d481256d0fc6", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/ToolApproval.test.tsx:214"}, "properties": {"repobilityId": "e640f808f14b3572", "scanner": "scanner-primary", "fingerprint": "ae19d481256d0fc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4474dfb5e1f8866a", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/ChatInputContainer.test.tsx:227"}, "properties": {"repobilityId": "bdb1c8817eb1709e", "scanner": "scanner-primary", "fingerprint": "4474dfb5e1f8866a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cac6f6a4a248ea08", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/__tests__/use-session-submit.test.tsx:446"}, "properties": {"repobilityId": "73c900e8e50141bd", "scanner": "scanner-primary", "fingerprint": "cac6f6a4a248ea08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ac3522f8dc8b723", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/ui/tools/ToolApproval.tsx:136"}, "properties": {"repobilityId": "0123329f2a7493df", "scanner": "scanner-primary", "fingerprint": "8ac3522f8dc8b723", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8f2a9e82ad73bfb2", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/client/src/layers/features/chat/ui/status/inference-themes.ts:22"}, "properties": {"repobilityId": "5c1c38745e79f5e5", "scanner": "scanner-primary", "fingerprint": "8f2a9e82ad73bfb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e02b96b7a103e40", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/ui/status/ChatStatusSection.tsx:186"}, "properties": {"repobilityId": "9c7cf5e2053f33a0", "scanner": "scanner-primary", "fingerprint": "3e02b96b7a103e40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e246dd3936a08ad8", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/use-session-submit.ts:169"}, "properties": {"repobilityId": "94c936491060917b", "scanner": "scanner-primary", "fingerprint": "e246dd3936a08ad8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1eec11065f8327df", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/use-message-queue.ts:75"}, "properties": {"repobilityId": "63a33ce9555cb35d", "scanner": "scanner-primary", "fingerprint": "1eec11065f8327df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd165e26f2ada020", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/client/src/layers/features/chat/model/use-turn-end-reconcile.ts:61"}, "properties": {"repobilityId": "aa42dd15fc41dc34", "scanner": "scanner-primary", "fingerprint": "fd165e26f2ada020", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ec6ae8de6fbd6d9", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/model/use-stream-timing.ts:50"}, "properties": {"repobilityId": "f903fcc9813ee34c", "scanner": "scanner-primary", "fingerprint": "3ec6ae8de6fbd6d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85d23e6cbe0dfd6e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/chat/model/use-chat-session.ts:61"}, "properties": {"repobilityId": "7796bf875d550b5e", "scanner": "scanner-primary", "fingerprint": "85d23e6cbe0dfd6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d294433d0cd5cd3c", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/chat/model/stream/__tests__/project-session-turn.test.ts:533"}, "properties": {"repobilityId": "df9bf8a13af26738", "scanner": "scanner-primary", "fingerprint": "d294433d0cd5cd3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-102b3257f10505c1", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/features/onboarding/__tests__/magic-transition.test.tsx:121"}, "properties": {"repobilityId": "e2d64b0e653fe22c", "scanner": "scanner-primary", "fingerprint": "102b3257f10505c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca9dd5473f70db8e", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/features/status/__tests__/ModelConfigPopover.test.tsx:9"}, "properties": {"repobilityId": "f46ef788cae53dd9", "scanner": "scanner-primary", "fingerprint": "ca9dd5473f70db8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f94e90aa3d20db83", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/system-methods.ts:153"}, "properties": {"repobilityId": "dc4a90d8b0cad5d2", "scanner": "scanner-primary", "fingerprint": "f94e90aa3d20db83", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca1654e12c99986e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/sse-connection.ts:173"}, "properties": {"repobilityId": "3a102a3c0fcb1c50", "scanner": "scanner-primary", "fingerprint": "ca1654e12c99986e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e86607d863ed7a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/session-stream-methods.ts:49"}, "properties": {"repobilityId": "972b6ec83ac803de", "scanner": "scanner-primary", "fingerprint": "8e86607d863ed7a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-387eb143ddd192dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/mesh-methods.ts:139"}, "properties": {"repobilityId": "c76b38ae8116ac0b", "scanner": "scanner-primary", "fingerprint": "387eb143ddd192dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-04af34ca2d3155c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/client/src/layers/shared/lib/transport/relay-methods.ts:117"}, "properties": {"repobilityId": "d727a56020778006", "scanner": "scanner-primary", "fingerprint": "04af34ca2d3155c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6f43ba5c0b31b63", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/shared/lib/transport/__tests__/stream-manager.test.ts:13"}, "properties": {"repobilityId": "6d500142692f2a2c", "scanner": "scanner-primary", "fingerprint": "d6f43ba5c0b31b63", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc243eb1c28db539", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/client/src/layers/shared/lib/direct/system-methods.ts:173"}, "properties": {"repobilityId": "cf7e0f87d5081357", "scanner": "scanner-primary", "fingerprint": "cc243eb1c28db539", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40f1d4760990b174", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/shared/ui/data-table.tsx:14"}, "properties": {"repobilityId": "2594a11c5f8880cf", "scanner": "scanner-primary", "fingerprint": "40f1d4760990b174", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d26a6358903beb8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/client/src/layers/shared/model/event-stream-context.tsx:47"}, "properties": {"repobilityId": "06135e211819218e", "scanner": "scanner-primary", "fingerprint": "d26a6358903beb8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27929c4b2ca16449", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/site/scripts/generate-api-docs.ts:30"}, "properties": {"repobilityId": "82b4589b7714bad2", "scanner": "scanner-primary", "fingerprint": "27929c4b2ca16449", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d88b121a75e4cad", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/site/src/app/(marketing)/test/diagrams/variants/v9-dna-helix.tsx:69"}, "properties": {"repobilityId": "13d3f062549995d2", "scanner": "scanner-primary", "fingerprint": "9d88b121a75e4cad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-548e8e4860bbb98a", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/site/src/app/(marketing)/test/logos/variants/l03-isometric.tsx:95"}, "properties": {"repobilityId": "db569f2add1385a1", "scanner": "scanner-primary", "fingerprint": "548e8e4860bbb98a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-acb4d5096c588259", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/site/src/app/(marketing)/test/logos/variants/l19-monolith.tsx:49"}, "properties": {"repobilityId": "d37f7e1923f03eb2", "scanner": "scanner-primary", "fingerprint": "acb4d5096c588259", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df27aa81da429387", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/site/src/app/(marketing)/test/logos/variants/l20-fragmented.tsx:42"}, "properties": {"repobilityId": "afcf03f93f723435", "scanner": "scanner-primary", "fingerprint": "df27aa81da429387", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a128b8fce4ae5869", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/site/src/app/(marketing)/test/logos/variants/l11-dotmatrix.tsx:51"}, "properties": {"repobilityId": "146fa9f1b91963d4", "scanner": "scanner-primary", "fingerprint": "a128b8fce4ae5869", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-090c1dd767ddd654", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/site/src/app/(marketing)/test/logos/variants/l08-maze.tsx:65"}, "properties": {"repobilityId": "5debb98706f1e0f7", "scanner": "scanner-primary", "fingerprint": "090c1dd767ddd654", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e4b3a26263b89f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/site/src/layers/features/marketplace/lib/fetch.ts:56"}, "properties": {"repobilityId": "5d8c63add43fbedd", "scanner": "scanner-primary", "fingerprint": "4e4b3a26263b89f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3bf4805a32e03ffb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/e2e/tests/chat-mock.spec.ts:22"}, "properties": {"repobilityId": "4d281585d6344b62", "scanner": "scanner-primary", "fingerprint": "3bf4805a32e03ffb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fc6fe54931979f1a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/e2e/tests/dialog-deep-link.spec.ts:52"}, "properties": {"repobilityId": "70c90c84202e3979", "scanner": "scanner-primary", "fingerprint": "fc6fe54931979f1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-977d63e097899b05", "level": "note", "message": {"text": "Legacy-named symbol `nDeprecated` in .claude/scripts/template-fetch.ts:1590"}, "properties": {"repobilityId": "5000235ea59b3b49", "scanner": "scanner-primary", "fingerprint": "977d63e097899b05", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f57225a26ec6a4b2", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 .claude/scripts/changelog_backfill.py:99"}, "properties": {"repobilityId": "6f603666f8106252", "scanner": "scanner-primary", "fingerprint": "f57225a26ec6a4b2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3cb413b909844051", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 .claude/git-hooks/changelog-populator.py:90"}, "properties": {"repobilityId": "67ec99a01133660c", "scanner": "scanner-primary", "fingerprint": "3cb413b909844051", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-51dbf90b6ad9e4e9", "level": "note", "message": {"text": "28 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "b01aa43f6ad2a3c8", "scanner": "scanner-primary", "fingerprint": "51dbf90b6ad9e4e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "27b33b32d1274b0d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-398b6cf8bb5e8654", "level": "error", "message": {"text": "Dangling fetch: GET https://registry.npmjs.org/dorkos/latest (packages/cli/src/update-check.ts:44)"}, "properties": {"repobilityId": "05a3fbddf36cef10", "scanner": "scanner-primary", "fingerprint": "398b6cf8bb5e8654", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0053871a60d526de", "level": "error", "message": {"text": "Dangling fetch: GET /api/ext/${EXT_ID}/loop (examples/extensions/linear-issues/index.ts:104)"}, "properties": {"repobilityId": "a7aeeb8fbb38508c", "scanner": "scanner-primary", "fingerprint": "0053871a60d526de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4b775ee0977e4ac5", "level": "error", "message": {"text": "Dangling fetch: GET /api/extensions/${EXT_ID}/settings (examples/extensions/linear-issues/index.ts:105)"}, "properties": {"repobilityId": "3566a0c4c3fbcdb4", "scanner": "scanner-primary", "fingerprint": "4b775ee0977e4ac5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5d9744fca7cdb9e8", "level": "error", "message": {"text": "Dangling fetch: GET https://api.example.com/data (apps/server/src/services/extensions/extension-templates.ts:164)"}, "properties": {"repobilityId": "9e467af807d16f09", "scanner": "scanner-primary", "fingerprint": "5d9744fca7cdb9e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70fe9fd1aceffd46", "level": "error", "message": {"text": "Dangling fetch: GET https://registry.npmjs.org/dorkos/latest (apps/server/src/services/core/update-checker.ts:37)"}, "properties": {"repobilityId": "c8690322908764a2", "scanner": "scanner-primary", "fingerprint": "70fe9fd1aceffd46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c38499c7daa49d5", "level": "error", "message": {"text": "Dangling fetch: GET /api/extensions (apps/client/src/layers/features/extensions/api/queries.ts:32)"}, "properties": {"repobilityId": "9e78fca9c54d60f1", "scanner": "scanner-primary", "fingerprint": "0c38499c7daa49d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1673477b2af7176f", "level": "error", "message": {"text": "Dangling fetch: POST /api/extensions/${id}/enable (apps/client/src/layers/features/extensions/api/queries.ts:53)"}, "properties": {"repobilityId": "0b39f616e6291673", "scanner": "scanner-primary", "fingerprint": "1673477b2af7176f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eba77973f035487b", "level": "error", "message": {"text": "Dangling fetch: POST /api/extensions/${id}/disable (apps/client/src/layers/features/extensions/api/queries.ts:74)"}, "properties": {"repobilityId": "38a80b42baa7e96a", "scanner": "scanner-primary", "fingerprint": "eba77973f035487b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1bda8d005fa1c451", "level": "error", "message": {"text": "Dangling fetch: POST /api/extensions/reload (apps/client/src/layers/features/extensions/api/queries.ts:94)"}, "properties": {"repobilityId": "cb47bcc31c998421", "scanner": "scanner-primary", "fingerprint": "1bda8d005fa1c451", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f5cd3c49e1afbe0", "level": "error", "message": {"text": "Dangling fetch: GET /api/extensions/${extensionId}/secrets (apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:101)"}, "properties": {"repobilityId": "3807a14d7e2b6d25", "scanner": "scanner-primary", "fingerprint": "8f5cd3c49e1afbe0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93f58243219c64cb", "level": "error", "message": {"text": "Dangling fetch: GET /api/extensions/${extensionId}/settings (apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:104)"}, "properties": {"repobilityId": "66f1516d12d1da8a", "scanner": "scanner-primary", "fingerprint": "93f58243219c64cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-129575c0833fce42", "level": "error", "message": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/secrets/${secret.key} (apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:261)"}, "properties": {"repobilityId": "1d1979887a923726", "scanner": "scanner-primary", "fingerprint": "129575c0833fce42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b9972b4978a28fc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/extensions/${extensionId}/secrets/${secret.key} (apps/client/src/layers/features/extensions/ui/ManifestSettingsPanel.tsx:280)"}, "properties": {"repobilityId": "d05bb5ad4ba2700b", "scanner": "scanner-primary", "fingerprint": "9b9972b4978a28fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9867bab1548d4a73", "level": "error", "message": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:56)"}, "properties": {"repobilityId": "0e18bd7760346935", "scanner": "scanner-primary", "fingerprint": "9867bab1548d4a73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31ef2dae2bd7cef9", "level": "error", "message": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:110)"}, "properties": {"repobilityId": "6e113fab43f948e5", "scanner": "scanner-primary", "fingerprint": "31ef2dae2bd7cef9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4b4e437212db11b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:167)"}, "properties": {"repobilityId": "bc9ff1e1b33a31c9", "scanner": "scanner-primary", "fingerprint": "c4b4e437212db11b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-836b34ab158feda9", "level": "error", "message": {"text": "Dangling fetch: PUT /api/extensions/${extensionId}/settings/${status.key} (apps/client/src/layers/features/extensions/ui/SettingFieldRenderers.tsx:212)"}, "properties": {"repobilityId": "b27914a7f5340515", "scanner": "scanner-primary", "fingerprint": "836b34ab158feda9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87e5d69b927041fa", "level": "error", "message": {"text": "Dangling fetch: GET /api/extensions/${extId}/data (apps/client/src/layers/features/extensions/model/extension-api-factory.ts:150)"}, "properties": {"repobilityId": "62cf1e220d416c87", "scanner": "scanner-primary", "fingerprint": "87e5d69b927041fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f4beab9e6d7e625", "level": "error", "message": {"text": "Dangling fetch: PUT /api/extensions/${extId}/data (apps/client/src/layers/features/extensions/model/extension-api-factory.ts:157)"}, "properties": {"repobilityId": "d9d71d3603dccfa3", "scanner": "scanner-primary", "fingerprint": "3f4beab9e6d7e625", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a83c3cda6aa38d90", "level": "error", "message": {"text": "Dangling fetch: GET /api/extensions (apps/client/src/layers/features/extensions/model/extension-loader.ts:19)"}, "properties": {"repobilityId": "090589d15adc7151", "scanner": "scanner-primary", "fingerprint": "a83c3cda6aa38d90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e609ef83eaa67fd", "level": "error", "message": {"text": "Dangling fetch: POST /api/extensions/${rec.id}/init-server (apps/client/src/layers/features/extensions/model/extension-loader.ts:51)"}, "properties": {"repobilityId": "b2af364b9433f2f2", "scanner": "scanner-primary", "fingerprint": "5e609ef83eaa67fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e886eeafd96da8c", "level": "error", "message": {"text": "Dangling fetch: POST /api/extensions/cwd-changed (apps/client/src/layers/features/extensions/model/use-cwd-extension-sync.ts:33)"}, "properties": {"repobilityId": "2fee56ac85879bac", "scanner": "scanner-primary", "fingerprint": "8e886eeafd96da8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e66482daa5e9d6b1", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:${port}/api/health (apps/desktop/src/server-entry.ts:14)"}, "properties": {"repobilityId": "bbabcf583f244f58", "scanner": "scanner-primary", "fingerprint": "e66482daa5e9d6b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd4763e6e0fcaa39", "level": "note", "message": {"text": "Unused endpoint: GET /issues"}, "properties": {"repobilityId": "73cbb141092a053a", "scanner": "scanner-primary", "fingerprint": "cd4763e6e0fcaa39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a480e03ed5d916eb", "level": "note", "message": {"text": "Unused endpoint: GET /cached"}, "properties": {"repobilityId": "a960b4eb7a034886", "scanner": "scanner-primary", "fingerprint": "a480e03ed5d916eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-52518313c1803488", "level": "note", "message": {"text": "Unused endpoint: GET /loop"}, "properties": {"repobilityId": "446d1323afdfd4c4", "scanner": "scanner-primary", "fingerprint": "52518313c1803488", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-95e266019920938e", "level": "note", "message": {"text": "Unused endpoint: USE /mcp"}, "properties": {"repobilityId": "9dba34ff8abd5109", "scanner": "scanner-primary", "fingerprint": "95e266019920938e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6330b0c4a0a152d3", "level": "note", "message": {"text": "Unused endpoint: USE /api/tasks"}, "properties": {"repobilityId": "b0343a2bb7e15006", "scanner": "scanner-primary", "fingerprint": "6330b0c4a0a152d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7d5e35924ac835f", "level": "note", "message": {"text": "Unused endpoint: USE /api/relay"}, "properties": {"repobilityId": "e130990d2d01b05f", "scanner": "scanner-primary", "fingerprint": "c7d5e35924ac835f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-099cda606878d888", "level": "note", "message": {"text": "Unused endpoint: USE /api/mesh"}, "properties": {"repobilityId": "6e1b94af354b1f05", "scanner": "scanner-primary", "fingerprint": "099cda606878d888", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-094608bf688f5d04", "level": "note", "message": {"text": "Unused endpoint: USE /api/agents"}, "properties": {"repobilityId": "daa4346cee8b60a4", "scanner": "scanner-primary", "fingerprint": "094608bf688f5d04", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b4e6f64bf81484dc", "level": "note", "message": {"text": "Unused endpoint: USE /api/templates"}, "properties": {"repobilityId": "3c62c847bbbd0478", "scanner": "scanner-primary", "fingerprint": "b4e6f64bf81484dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-70d1dce5c086c6b4", "level": "note", "message": {"text": "Unused endpoint: USE /api/activity"}, "properties": {"repobilityId": "875d1d4bc0aa9dac", "scanner": "scanner-primary", "fingerprint": "70d1dce5c086c6b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6887edca1291d5d4", "level": "note", "message": {"text": "Unused endpoint: USE /api/extensions"}, "properties": {"repobilityId": "842b34424d00fd28", "scanner": "scanner-primary", "fingerprint": "6887edca1291d5d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-46b689099add2f39", "level": "note", "message": {"text": "Unused endpoint: USE /api/ext/:id"}, "properties": {"repobilityId": "ec67dfe3ca61c863", "scanner": "scanner-primary", "fingerprint": "46b689099add2f39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-de91c7cd4badadf1", "level": "note", "message": {"text": "Unused endpoint: USE /api/discovery"}, "properties": {"repobilityId": "d929a7162898a420", "scanner": "scanner-primary", "fingerprint": "de91c7cd4badadf1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ff8406830de51b6b", "level": "note", "message": {"text": "Unused endpoint: USE /a2a"}, "properties": {"repobilityId": "1372528ab00a0ff8", "scanner": "scanner-primary", "fingerprint": "ff8406830de51b6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d93a530ce10d47d9", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin"}, "properties": {"repobilityId": "faaf1dc8a3158090", "scanner": "scanner-primary", "fingerprint": "d93a530ce10d47d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e2bbe245c5b92fa2", "level": "note", "message": {"text": "Unused endpoint: USE /api/marketplace"}, "properties": {"repobilityId": "c84ed27af93e176e", "scanner": "scanner-primary", "fingerprint": "e2bbe245c5b92fa2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8636dd48e48d1da9", "level": "note", "message": {"text": "Unused endpoint: USE /api/sessions"}, "properties": {"repobilityId": "5b2f6f0ec62ff89e", "scanner": "scanner-primary", "fingerprint": "8636dd48e48d1da9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf4523a74d136ba3", "level": "note", "message": {"text": "Unused endpoint: USE /api/commands"}, "properties": {"repobilityId": "8bf9321834f36d14", "scanner": "scanner-primary", "fingerprint": "cf4523a74d136ba3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-972b54078ec2581f", "level": "note", "message": {"text": "Unused endpoint: USE /api/health"}, "properties": {"repobilityId": "b54afb24bb3a5d23", "scanner": "scanner-primary", "fingerprint": "972b54078ec2581f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98dcf9f66ef48060", "level": "note", "message": {"text": "Unused endpoint: USE /api/directory"}, "properties": {"repobilityId": "f28f84270f9cb1c3", "scanner": "scanner-primary", "fingerprint": "98dcf9f66ef48060", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f63dbe78bf2280a", "level": "note", "message": {"text": "Unused endpoint: USE /api/config"}, "properties": {"repobilityId": "f77c82f5272ab659", "scanner": "scanner-primary", "fingerprint": "6f63dbe78bf2280a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15662ab348abba6b", "level": "note", "message": {"text": "Unused endpoint: USE /api/files"}, "properties": {"repobilityId": "6803194f804e47f8", "scanner": "scanner-primary", "fingerprint": "15662ab348abba6b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-61f0530d078de560", "level": "note", "message": {"text": "Unused endpoint: USE /api/git"}, "properties": {"repobilityId": "dc8bc0d77c9d0163", "scanner": "scanner-primary", "fingerprint": "61f0530d078de560", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3bff500515483dc0", "level": "note", "message": {"text": "Unused endpoint: USE /api/tunnel"}, "properties": {"repobilityId": "db5b4831e3ef5a2d", "scanner": "scanner-primary", "fingerprint": "3bff500515483dc0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5b66c53e8f32d566", "level": "note", "message": {"text": "Unused endpoint: USE /api/models"}, "properties": {"repobilityId": "835a2d9c3c70be03", "scanner": "scanner-primary", "fingerprint": "5b66c53e8f32d566", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f3b0f431e114b9f", "level": "note", "message": {"text": "Unused endpoint: USE /api/subagents"}, "properties": {"repobilityId": "bc93e0147fbe7162", "scanner": "scanner-primary", "fingerprint": "3f3b0f431e114b9f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e7e939285cc712e3", "level": "note", "message": {"text": "Unused endpoint: USE /api/capabilities"}, "properties": {"repobilityId": "b3b4395c08c4c61f", "scanner": "scanner-primary", "fingerprint": "e7e939285cc712e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b7dbcf047b5d4d80", "level": "note", "message": {"text": "Unused endpoint: USE /api/system"}, "properties": {"repobilityId": "6360e77acbd4203e", "scanner": "scanner-primary", "fingerprint": "b7dbcf047b5d4d80", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84bd4c31da0619b1", "level": "note", "message": {"text": "Unused endpoint: USE /api/uploads"}, "properties": {"repobilityId": "bf9a489a0058c030", "scanner": "scanner-primary", "fingerprint": "84bd4c31da0619b1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bed72b5670827fd", "level": "note", "message": {"text": "Unused endpoint: USE /api/mcp-config"}, "properties": {"repobilityId": "7c12bc28004e45a8", "scanner": "scanner-primary", "fingerprint": "1bed72b5670827fd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ec00984b27c88c15", "level": "note", "message": {"text": "Unused endpoint: USE /api/events"}, "properties": {"repobilityId": "76b02c039fee817a", "scanner": "scanner-primary", "fingerprint": "ec00984b27c88c15", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-148690a8d35e14f1", "level": "note", "message": {"text": "Unused endpoint: USE /api/test"}, "properties": {"repobilityId": "db7791e691232624", "scanner": "scanner-primary", "fingerprint": "148690a8d35e14f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf049e5f9a2ed0eb", "level": "note", "message": {"text": "Unused endpoint: GET /api/openapi.json"}, "properties": {"repobilityId": "0f6ff6e66a803c92", "scanner": "scanner-primary", "fingerprint": "cf049e5f9a2ed0eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d83a39f66cb5706", "level": "note", "message": {"text": "Unused endpoint: USE /api/docs"}, "properties": {"repobilityId": "20a34dc5f73e334d", "scanner": "scanner-primary", "fingerprint": "5d83a39f66cb5706", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dde3adb27bf7eebe", "level": "note", "message": {"text": "Unused endpoint: USE /api"}, "properties": {"repobilityId": "5dd5c9566d17a08e", "scanner": "scanner-primary", "fingerprint": "dde3adb27bf7eebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b186e887b1e3877c", "level": "note", "message": {"text": "Unused endpoint: GET /data"}, "properties": {"repobilityId": "fff8f6c2961e4813", "scanner": "scanner-primary", "fingerprint": "b186e887b1e3877c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5f20d66da460daa9", "level": "note", "message": {"text": "Unused endpoint: ALL /proxy/*"}, "properties": {"repobilityId": "1fdd69ee4ec1970c", "scanner": "scanner-primary", "fingerprint": "5f20d66da460daa9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-195fb029bb695346", "level": "note", "message": {"text": "Unused endpoint: POST /scan"}, "properties": {"repobilityId": "012b572137f9073d", "scanner": "scanner-primary", "fingerprint": "195fb029bb695346", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d7e2b166f6d9db1", "level": "note", "message": {"text": "Unused endpoint: GET /agents/:id/card"}, "properties": {"repobilityId": "eef1f0901f8b102a", "scanner": "scanner-primary", "fingerprint": "3d7e2b166f6d9db1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "421a3147cd591141", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b707af78bb95724c", "level": "note", "message": {"text": "Unused endpoint: GET /:filename"}, "properties": {"repobilityId": "7361afee895c4ac6", "scanner": "scanner-primary", "fingerprint": "b707af78bb95724c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "919cc898c860d261", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-959e83c0a87139d8", "level": "note", "message": {"text": "Unused endpoint: GET /current"}, "properties": {"repobilityId": "b33787030f477474", "scanner": "scanner-primary", "fingerprint": "959e83c0a87139d8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dfa1b57ebf524401", "level": "note", "message": {"text": "Unused endpoint: POST /resolve"}, "properties": {"repobilityId": "8d75b88c74f168a9", "scanner": "scanner-primary", "fingerprint": "dfa1b57ebf524401", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-599114e2a4d7d26d", "level": "note", "message": {"text": "Unused endpoint: POST /create"}, "properties": {"repobilityId": "588418102c274e08", "scanner": "scanner-primary", "fingerprint": "599114e2a4d7d26d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-63f89b40f32eddd3", "level": "note", "message": {"text": "Unused endpoint: PATCH /current"}, "properties": {"repobilityId": "dd9803e4e1e8f168", "scanner": "scanner-primary", "fingerprint": "63f89b40f32eddd3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c2ea7096dd2b80eb", "level": "note", "message": {"text": "Unused endpoint: POST /current/migrate-persona"}, "properties": {"repobilityId": "7de510f274e2b386", "scanner": "scanner-primary", "fingerprint": "c2ea7096dd2b80eb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-31b144bf099e3bd6", "level": "note", "message": {"text": "Unused endpoint: GET /default"}, "properties": {"repobilityId": "5f7ef889fa00b242", "scanner": "scanner-primary", "fingerprint": "31b144bf099e3bd6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b30f4c0994a30b4", "level": "note", "message": {"text": "Unused endpoint: DELETE /"}, "properties": {"repobilityId": "8f8b4ac8de6e9d2c", "scanner": "scanner-primary", "fingerprint": "3b30f4c0994a30b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33c8cf5520e40617", "level": "note", "message": {"text": "Unused endpoint: POST /scenario"}, "properties": {"repobilityId": "7dbf1478b3ce9d44", "scanner": "scanner-primary", "fingerprint": "33c8cf5520e40617", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}