{"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-c12dfebd16c8552c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/OgCard.tsx:71", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/OgCard.tsx:71"}, "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-74c122c724a253f7", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/PresentationLayout.tsx:78", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/PresentationLayout.tsx:78"}, "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-321ea4ca0abf266e", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/ProseContent.tsx:43", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/ProseContent.tsx:43"}, "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-0be8bfc1b6d14a7d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/NewsletterSignup.tsx:169", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/NewsletterSignup.tsx:169"}, "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-f257706e7514e9ca", "name": "`truncate` class without `title=` for hover reveal \u2014 shared/ui-library/src/widgets/PipelineWidget.tsx:142", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 shared/ui-library/src/widgets/PipelineWidget.tsx:142"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c20e796c128806b", "name": "Stray `console.log` in TS/JS \u2014 shared/deploy-support/src/scaffold.ts:219", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shared/deploy-support/src/scaffold.ts:219"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd1e745010ad7b9a", "name": "Stray `console.log` in TS/JS \u2014 shared/deploy-support/src/deploy-scripts/provision-server.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shared/deploy-support/src/deploy-scripts/provision-server.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-5ecc3ee758d2cd40", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-versions.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-versions.ts:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1478ab20075b2e0", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-markdown-links.ts:144", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-markdown-links.ts:144"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5bd7b6f5f8f9504c", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-docs-manifest.ts:151", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-docs-manifest.ts:151"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-930ab2e9f6f0559a", "name": "Stray `console.log` in TS/JS \u2014 scripts/sync-docs-content.ts:344", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-docs-content.ts:344"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b77190a32cf3819b", "name": "Stray `console.log` in TS/JS \u2014 deploy/scripts/deploy.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 deploy/scripts/deploy.ts:46"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c380cd46ec962859", "name": "Stray `console.log` in TS/JS \u2014 interfaces/mcp/src/transports/types.ts:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 interfaces/mcp/src/transports/types.ts:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae0a5220cbfc6c8c", "name": "Stray `console.log` in TS/JS \u2014 interfaces/web-chat/scripts/build-ui.ts:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 interfaces/web-chat/scripts/build-ui.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-927c38d3e837b1ee", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/test/init.test.ts:707", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/test/init.test.ts:707"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0ae337b063e56e5c", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/entrypoint.ts:143", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/entrypoint.ts:143"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffe588b1e90bd92b", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/build.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/build.ts:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ae332615f1a9fce", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/generate-bundled-model-env-schemas.ts:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/generate-bundled-model-env-schemas.ts:60"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-65a9322a2f3481ba", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/templates/deploy/scripts/provision-server.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/templates/deploy/scripts/provision-server.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-aa92df696a535c7e", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/index.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/index.ts:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55d52fa08ccdfe92", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/run-command.ts:274", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/run-command.ts:274"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-81be489635fc82f7", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/commands/operate-remote.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/commands/operate-remote.ts:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-beefd28bcb650b3d", "name": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/commands/operate.ts:106", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/commands/operate.ts:106"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6811c89bbe9b3361", "name": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/test/package-metadata.test.ts:145", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/test/package-metadata.test.ts:145"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8938d8b6bc7ee5b2", "name": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/scripts/build.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/scripts/build.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ecf35ce3a5e2fb7", "name": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/provision-server.ts:97", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/provision-server.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-8971af397a327c97", "name": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/src/content-repo.ts:219", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/src/content-repo.ts:219"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2679e41fcaea46d4", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/multi-model-runner.ts:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/multi-model-runner.ts:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8e36cec6eb71221", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/eval-config-loader.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/eval-config-loader.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-069f5a94cbc0e312", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/eval-db-builder.ts:48", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/eval-db-builder.ts:48"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-71fd5b214e09abda", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/single-model-runner.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/single-model-runner.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-39ba42565ac0867d", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/cli-help.ts:2", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/cli-help.ts:2"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e7969a52444250d", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/evaluation-runner.ts:122", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/evaluation-runner.ts:122"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74a0393ccccfe42e", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/console-reporter.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/console-reporter.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9285aad18f2a43a", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/json-reporter.ts:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/json-reporter.ts:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ffb11322488e9d37", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/comparison-reporter.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/comparison-reporter.ts:34"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8a98dd3fb76277f", "name": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/markdown-reporter.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/markdown-reporter.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-bb18e4790050dcd9", "name": "Stray `console.log` in TS/JS \u2014 shell/app/scripts/build-model.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/app/scripts/build-model.ts:71"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-95ec609e7c709f2c", "name": "Stray `console.log` in TS/JS \u2014 shell/app/scripts/build.ts:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/app/scripts/build.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-ea6e84ba76b4d596", "name": "Stray `console.log` in TS/JS \u2014 shell/app/src/cli.ts:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/app/src/cli.ts:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d71f0c8f7cfc1fea", "name": "TODO/FIXME marker in shipping code \u2014 shell/app/src/runner.ts:92", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 shell/app/src/runner.ts:92"}, "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-23ad586c39fd2360", "name": "Stray `console.log` in TS/JS \u2014 shell/plugins/src/utils/channels.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 shell/plugins/src/utils/channels.ts:29"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5e95af139a27620", "name": "`truncate` class without `title=` for hover reveal \u2014 entities/blog/src/templates/PostNavigation.tsx:29", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/blog/src/templates/PostNavigation.tsx:29"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ecd1ef49073d5940", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/blog/src/templates/homepage.tsx:56", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/blog/src/templates/homepage.tsx:56"}, "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-c18f0af67f43acb1", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/blog/src/attachments/printable-template.tsx:51", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/blog/src/attachments/printable-template.tsx:51"}, "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-cfd70b3f1400864d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/decks/src/attachments/carousel-template.tsx:44", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/decks/src/attachments/carousel-template.tsx:44"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c5115eabd748bf7a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/topics/src/templates/topic-detail/layout.tsx:16", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/topics/src/templates/topic-detail/layout.tsx:16"}, "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-5fb84f9bdde540cc", "name": "`truncate` class without `title=` for hover reveal \u2014 entities/link/src/templates/link-detail/layout.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/link/src/templates/link-detail/layout.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-d98d322b1b765667", "name": "`truncate` class without `title=` for hover reveal \u2014 entities/link/src/templates/link-list/layout.tsx:33", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/link/src/templates/link-list/layout.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-98c8532050295078", "name": "`truncate` class without `title=` for hover reveal \u2014 entities/portfolio/src/templates/project-detail.tsx:31", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/portfolio/src/templates/project-detail.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-7a5ef05bc71317a0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/portfolio/src/attachments/printable-template.tsx:42", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/portfolio/src/attachments/printable-template.tsx:42"}, "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-e56ca47f66894dc6", "name": "`truncate` class without `title=` for hover reveal \u2014 entities/newsletter/src/templates/newsletter-detail.tsx:139", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/newsletter/src/templates/newsletter-detail.tsx:139"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad9281ed4b3bfb7a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/products/src/attachments/printable-template.tsx:37", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/products/src/attachments/printable-template.tsx:37"}, "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-d614f5644e8e6d82", "name": "Stray `console.log` in TS/JS \u2014 plugins/atproto/scripts/smoke-discovery.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/atproto/scripts/smoke-discovery.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc13b0f2c42c1c8f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 plugins/dashboard/src/dashboard-page.tsx:166", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 plugins/dashboard/src/dashboard-page.tsx:166"}, "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-8bb95ddd8d48bbca", "name": "Privileged port 10 in use", "shortDescription": {"text": "Privileged port 10 in use"}, "fullDescription": {"text": "Port 10 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2cf9781063186267", "name": "Privileged port 18 in use", "shortDescription": {"text": "Privileged port 18 in use"}, "fullDescription": {"text": "Port 18 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf6f86c239800367", "name": "Privileged port 15 in use", "shortDescription": {"text": "Privileged port 15 in use"}, "fullDescription": {"text": "Port 15 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-913bdcafdae7de34", "name": "Privileged port 16 in use", "shortDescription": {"text": "Privileged port 16 in use"}, "fullDescription": {"text": "Port 16 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ec27607aeb275cd4", "name": "Privileged port 20 in use", "shortDescription": {"text": "Privileged port 20 in use"}, "fullDescription": {"text": "Port 20 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-034fa05fdf355df8", "name": "Privileged port 11 in use", "shortDescription": {"text": "Privileged port 11 in use"}, "fullDescription": {"text": "Port 11 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-067ad5ac0771fcba", "name": "Privileged port 12 in use", "shortDescription": {"text": "Privileged port 12 in use"}, "fullDescription": {"text": "Port 12 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6f6c480b055309de", "name": "Privileged port 13 in use", "shortDescription": {"text": "Privileged port 13 in use"}, "fullDescription": {"text": "Port 13 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fa445eb48c6cc689", "name": "Privileged port 17 in use", "shortDescription": {"text": "Privileged port 17 in use"}, "fullDescription": {"text": "Port 17 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1563776269dadfb5", "name": "Privileged port 21 in use", "shortDescription": {"text": "Privileged port 21 in use"}, "fullDescription": {"text": "Port 21 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-316c31b3150176d4", "name": "Privileged port 30 in use", "shortDescription": {"text": "Privileged port 30 in use"}, "fullDescription": {"text": "Port 30 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-037102ad2bc4aa79", "name": "Privileged port 19 in use", "shortDescription": {"text": "Privileged port 19 in use"}, "fullDescription": {"text": "Port 19 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-901260321568dd27", "name": "Privileged port 14 in use", "shortDescription": {"text": "Privileged port 14 in use"}, "fullDescription": {"text": "Port 14 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-025a8c2394b3c7ee", "name": "Dockerfile runs as root: shared/deploy-support/src/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: shared/deploy-support/src/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-9b1657190fc1508a", "name": "Docker base image is tag-pinned but not digest-pinned: oven/bun:${BUN_VERSION}-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: oven/bun:${BUN_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-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d77fd73eb219c9b", "name": "Runtime dotenv file present in repo: brains/relay/.env.schema", "shortDescription": {"text": "Runtime dotenv file present in repo: brains/relay/.env.schema"}, "fullDescription": {"text": "`brains/relay/.env.schema` looks like a runtime dotenv file. No high-confidence secret value was matched, but runtime dotenv files often drift into live credentials. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-49f956c088f93e24", "name": "Runtime dotenv file present in repo: brains/ranger/.env.schema", "shortDescription": {"text": "Runtime dotenv file present in repo: brains/ranger/.env.schema"}, "fullDescription": {"text": "`brains/ranger/.env.schema` looks like a runtime dotenv file. It contains secret-looking assignments for CLOUDFLARE_API_TOKEN. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-116a2160127a4f01", "name": "Runtime dotenv file present in repo: brains/rover/.env.schema", "shortDescription": {"text": "Runtime dotenv file present in repo: brains/rover/.env.schema"}, "fullDescription": {"text": "`brains/rover/.env.schema` looks like a runtime dotenv file. It contains secret-looking assignments for CLOUDFLARE_API_TOKEN. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f8a71cc00fe87fb9", "name": "Insecure pattern 'node_child_process' in brains/relay/scripts/build-eval-db.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in brains/relay/scripts/build-eval-db.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-07c6f1d67b88bb65", "name": "Insecure pattern 'node_child_process' in brains/rover/scripts/build-eval-db.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in brains/rover/scripts/build-eval-db.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-15ddf3183e4d767f", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/roadmap-visual.html:862", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/roadmap-visual.html:862"}, "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-41a7bbe7b6c601c6", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/codebase-map.html:338", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/codebase-map.html:338"}, "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-9d98fff93e6fac8a", "name": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/OgCard.tsx:71", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/OgCard.tsx:71"}, "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-2c8e28de7330974b", "name": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/PresentationLayout.tsx:78", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/PresentationLayout.tsx:78"}, "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-227674b91b5d7940", "name": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/ProseContent.tsx:43", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/ProseContent.tsx:43"}, "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-c5a06f3e1c62ded0", "name": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/NewsletterSignup.tsx:169", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/NewsletterSignup.tsx:169"}, "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-9e4151e983b6bdc1", "name": "Insecure pattern 'direct_innerhtml_assignment' in shared/ui-library/src/NewsletterSignup.tsx:109", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in shared/ui-library/src/NewsletterSignup.tsx:109"}, "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-cd480819efde80b0", "name": "Insecure pattern 'node_child_process' in scripts/check-markdown-links.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/check-markdown-links.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-07faef19e73b7d97", "name": "Insecure pattern 'cors_wildcard' in interfaces/mcp/src/transports/http-server.ts:33", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in interfaces/mcp/src/transports/http-server.ts:33"}, "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-80a5f99a27c6827f", "name": "Insecure pattern 'cors_wildcard' in interfaces/a2a/src/a2a-interface.ts:25", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in interfaces/a2a/src/a2a-interface.ts:25"}, "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-3c6f44a0b983c052", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/scripts/entrypoint.ts:102", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/scripts/entrypoint.ts:102"}, "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-605494510f83102e", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/src/index.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/index.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-aae04cf427afc868", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/src/run-command.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/run-command.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-80192bdd7ba56118", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/operate.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/operate.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-1eaaa3c8da5c70d4", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/pin.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/pin.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-c63b5fc01c66fa42", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/ssh-key-bootstrap.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/ssh-key-bootstrap.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-69747a077cf4db8f", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/bitwarden-secrets.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/bitwarden-secrets.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-70661b8e85f92083", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/spawn-bun-runner.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/spawn-bun-runner.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-0abd8812622d66b2", "name": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/run-subprocess.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/run-subprocess.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-dfeab46a9b11be50", "name": "Insecure pattern 'node_child_process' in packages/brains-ops/src/ssh-key-bootstrap.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brains-ops/src/ssh-key-bootstrap.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-a2babfa2b66f13fe", "name": "Insecure pattern 'node_child_process' in packages/brains-ops/src/run-subprocess.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/brains-ops/src/run-subprocess.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-4d3564f758fd1d13", "name": "Insecure pattern 'node_child_process' in shell/ai-evaluation/src/eval-environment.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in shell/ai-evaluation/src/eval-environment.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-14d3bc6847327d4c", "name": "Insecure pattern 'cors_wildcard' in shell/auth-service/src/http-responses.ts:37", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in shell/auth-service/src/http-responses.ts: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-4a34e79aeecf9b6f", "name": "Insecure pattern 'node_child_process' in plugins/directory-sync/src/lib/content-remote-bootstrap.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in plugins/directory-sync/src/lib/content-remote-bootstrap.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-3e0e4dd247666d90", "name": "Insecure pattern 'dangerous_innerhtml' in plugins/dashboard/src/dashboard-page.tsx:166", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in plugins/dashboard/src/dashboard-page.tsx:166"}, "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-277b72bd9deb393d", "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@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3994ddcf22fa1a57", "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-0d6433646160be4e", "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-32a7a43ca00c94b4", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/setup-buildx-action@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ea1bf67c98a5823", "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-5e70c0bb994125bc", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/setup-qemu-action@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b5352e214808b403", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v5 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-1838a141491ce38c", "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-ccdb474d2bc7b674", "name": "Very large file: interfaces/web-chat/test/web-chat-interface.test.ts (2705 lines)", "shortDescription": {"text": "Very large file: interfaces/web-chat/test/web-chat-interface.test.ts (2705 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-0ee011259bb87bbe", "name": "Very large file: interfaces/web-chat/src/chat-page.ts (2156 lines)", "shortDescription": {"text": "Very large file: interfaces/web-chat/src/chat-page.ts (2156 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-d4072d9b1d59f8c6", "name": "Very large file: shell/app/test/instance-overrides.test.ts (2679 lines)", "shortDescription": {"text": "Very large file: shell/app/test/instance-overrides.test.ts (2679 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-16957e96c05b99f4", "name": "Very large file: shell/auth-service/test/auth-service.test.ts (1555 lines)", "shortDescription": {"text": "Very large file: shell/auth-service/test/auth-service.test.ts (1555 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc6a95253b32c289", "name": "Very large file: shell/ai-service/test/agent-service.test.ts (2767 lines)", "shortDescription": {"text": "Very large file: shell/ai-service/test/agent-service.test.ts (2767 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-1e9616e57a02aa6e", "name": "Node manifest has dependencies but no lockfile: brains/relay/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: brains/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-d74ffca8d13526d1", "name": "Node manifest has dependencies but no lockfile: brains/ranger/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: brains/ranger/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-dfd93b984c32d0a3", "name": "Node manifest has dependencies but no lockfile: brains/rover/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: brains/rover/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-6d0083e98af2a3ea", "name": "Node manifest has dependencies but no lockfile: shared/media-page-composer/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/media-page-composer/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-b51b4ad4c217a08c", "name": "Node manifest has dependencies but no lockfile: shared/eslint-config/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/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-dc7b44dd31da83af", "name": "Node manifest has dependencies but no lockfile: shared/document/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/document/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-27d1aa3660a04576", "name": "Node manifest has dependencies but no lockfile: shared/theme-base/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/theme-base/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-1ac2812039747780", "name": "Node manifest has dependencies but no lockfile: shared/theme-default/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/theme-default/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-027cc2504245c3de", "name": "Node manifest has dependencies but no lockfile: shared/image/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/image/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-dd5b9c1a7fb6aa0f", "name": "Node manifest has dependencies but no lockfile: shared/media-renderer/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/media-renderer/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-ca88ee8984e92f12", "name": "Node manifest has dependencies but no lockfile: shared/cms-config/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/cms-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-9b5063c13314cdf2", "name": "Node manifest has dependencies but no lockfile: shared/utils/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/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-7a74b7791e2c82d8", "name": "Node manifest has dependencies but no lockfile: shared/atproto-contracts/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/atproto-contracts/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-773f02badb0d8dc6", "name": "Node manifest has dependencies but no lockfile: shared/site-engine/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/site-engine/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-03dfa4b9fdff8709", "name": "Node manifest has dependencies but no lockfile: shared/site-composition/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/site-composition/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-a958fc658602e1d0", "name": "Node manifest has dependencies but no lockfile: shared/theme-rizom/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/theme-rizom/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-349e65cbacd7ea93", "name": "Node manifest has dependencies but no lockfile: shared/ui-library/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/ui-library/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-76ee637084139e40", "name": "Node manifest has dependencies but no lockfile: shared/email-contracts/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/email-contracts/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a6ce70b74498ae79", "name": "Node manifest has dependencies but no lockfile: shared/test-utils/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/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-a4f1d3791f77ee3e", "name": "Node manifest has dependencies but no lockfile: shared/product-site-content/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/product-site-content/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-a3c4b48708ebb4dd", "name": "Node manifest has dependencies but no lockfile: shared/content-formatters/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/content-formatters/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-ffe4f241a28d767f", "name": "Node manifest has dependencies but no lockfile: shared/contracts/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/contracts/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-479f4b699067d2f6", "name": "Node manifest has dependencies but no lockfile: shared/deploy-support/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/deploy-support/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-0cfab5cd80abdccb", "name": "Node manifest has dependencies but no lockfile: shared/mcp-bridge/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/mcp-bridge/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-721d5350719afb5a", "name": "Node manifest has dependencies but no lockfile: shared/rizom-ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shared/rizom-ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c66413096254e1ef", "name": "Node manifest has dependencies but no lockfile: interfaces/mcp/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: interfaces/mcp/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-e27fa3671a7c8b43", "name": "Node manifest has dependencies but no lockfile: interfaces/a2a/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: interfaces/a2a/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-66a0dd33fd8ed163", "name": "Node manifest has dependencies but no lockfile: interfaces/discord/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: interfaces/discord/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-5d95c11d488a00c1", "name": "Node manifest has dependencies but no lockfile: interfaces/web-chat/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: interfaces/web-chat/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-67cd2774c745cf03", "name": "Node manifest has dependencies but no lockfile: interfaces/webserver/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: interfaces/webserver/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-d5e2e3a314338147", "name": "Node manifest has dependencies but no lockfile: interfaces/chat-repl/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: interfaces/chat-repl/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-835288f4159f5751", "name": "Node manifest has dependencies but no lockfile: packages/brain-cli/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/brain-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-cfe0d88643ef45cd", "name": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/site-author/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/site-author/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-fa56decfef42ea75", "name": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/brain-definition/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/brain-definition/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-29aa3c7b894b3315", "name": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/external-plugin/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/external-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-96baac823e64a59d", "name": "Node manifest has dependencies but no lockfile: packages/brains-ops/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/brains-ops/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-dee476e1ee7e391d", "name": "Node manifest has dependencies but no lockfile: packages/brains-ops/templates/rover-pilot/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/brains-ops/templates/rover-pilot/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-80bb86cc4d852a96", "name": "Node manifest has dependencies but no lockfile: shell/conversation-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/conversation-service/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-bbae57d69873f533", "name": "Node manifest has dependencies but no lockfile: shell/ai-evaluation/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/ai-evaluation/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-d7b38906a3eb912f", "name": "Node manifest has dependencies but no lockfile: shell/identity-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/identity-service/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-45de98c847467e7d", "name": "Node manifest has dependencies but no lockfile: shell/messaging-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/messaging-service/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-84f55460f29ca83f", "name": "Node manifest has dependencies but no lockfile: shell/job-queue/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/job-queue/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-5ad291d28bed9520", "name": "Node manifest has dependencies but no lockfile: shell/app/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/app/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-e8d92e7adef9fada", "name": "Node manifest has dependencies but no lockfile: shell/auth-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/auth-service/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-fea1ff8c01c5c6dd", "name": "Node manifest has dependencies but no lockfile: shell/templates/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/templates/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-7b4c5d4211c65fa3", "name": "Node manifest has dependencies but no lockfile: shell/core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/core/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-362ef863320821de", "name": "Node manifest has dependencies but no lockfile: shell/entity-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/entity-service/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-b2c715b1410ba163", "name": "Node manifest has dependencies but no lockfile: shell/content-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/content-service/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-fd7cb76e646ec91e", "name": "Node manifest has dependencies but no lockfile: shell/ai-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/ai-service/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-97e485e80f1e18fe", "name": "Node manifest has dependencies but no lockfile: shell/mcp-service/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/mcp-service/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-fdbb2e882eab3feb", "name": "Node manifest has dependencies but no lockfile: shell/plugins/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: shell/plugins/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-224460ae84ac92fe", "name": "Node manifest has dependencies but no lockfile: entities/assessment/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/assessment/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-1b1b7e1acf7e6881", "name": "Node manifest has dependencies but no lockfile: entities/blog/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/blog/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-b8b03623a645d530", "name": "Node manifest has dependencies but no lockfile: entities/prompt/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/prompt/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-f4e00b89ffc7518d", "name": "Node manifest has dependencies but no lockfile: entities/document/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/document/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-bdbd528bf87828ef", "name": "Node manifest has dependencies but no lockfile: entities/decks/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/decks/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-45a2c66f4cab9207", "name": "Node manifest has dependencies but no lockfile: entities/image/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/image/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-20c1145b2b7f837d", "name": "Node manifest has dependencies but no lockfile: entities/agent-discovery/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/agent-discovery/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-c5887899056ac9b5", "name": "Node manifest has dependencies but no lockfile: entities/topics/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/topics/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-3a86149e7699b7e4", "name": "Node manifest has dependencies but no lockfile: entities/conversation-memory/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/conversation-memory/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-808103d75dbac6df", "name": "Node manifest has dependencies but no lockfile: entities/series/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/series/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-3c1d2e41a97ee3ca", "name": "Node manifest has dependencies but no lockfile: entities/link/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/link/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-1b0ca181266b0596", "name": "Node manifest has dependencies but no lockfile: entities/doc/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/doc/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-4302464d30d2d48e", "name": "Node manifest has dependencies but no lockfile: entities/rizom-ecosystem/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/rizom-ecosystem/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-429ea8784781db17", "name": "Node manifest has dependencies but no lockfile: entities/wishlist/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/wishlist/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-9a1e014d592d74b1", "name": "Node manifest has dependencies but no lockfile: entities/portfolio/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/portfolio/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-52663a42742f7c59", "name": "Node manifest has dependencies but no lockfile: entities/site-info/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/site-info/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-401e4c8a99a1172d", "name": "Node manifest has dependencies but no lockfile: entities/note/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/note/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-617220156297a5a0", "name": "Node manifest has dependencies but no lockfile: entities/newsletter/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/newsletter/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-c20938698881ae68", "name": "Node manifest has dependencies but no lockfile: entities/products/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/products/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-797f8cd82e38a8e0", "name": "Node manifest has dependencies but no lockfile: entities/social-media/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: entities/social-media/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-ca64a7fdf75c15ee", "name": "Node manifest has dependencies but no lockfile: sites/default/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: sites/default/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-108a19983cd5d532", "name": "Node manifest has dependencies but no lockfile: sites/professional/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: sites/professional/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-d1632ab399862ec0", "name": "Node manifest has dependencies but no lockfile: sites/personal/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: sites/personal/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-aed8f388a2d72c8b", "name": "Node manifest has dependencies but no lockfile: sites/rizom/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: sites/rizom/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-f5cee5086bd5b7ea", "name": "Node manifest has dependencies but no lockfile: plugins/hackmd/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/hackmd/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-902d5ccad474aefa", "name": "Node manifest has dependencies but no lockfile: plugins/notifications/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/notifications/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-3510d0e189a4716e", "name": "Node manifest has dependencies but no lockfile: plugins/stock-photo/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/stock-photo/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-a651e59835cd3228", "name": "Node manifest has dependencies but no lockfile: plugins/analytics/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/analytics/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07147a8a33276348", "name": "Node manifest has dependencies but no lockfile: plugins/directory-sync/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/directory-sync/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-bc868452182dfbd3", "name": "Node manifest has dependencies but no lockfile: plugins/atproto/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/atproto/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-3bd72030a0b9ca95", "name": "Node manifest has dependencies but no lockfile: plugins/notion/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/notion/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-34925b6d14a4c3e5", "name": "Node manifest has dependencies but no lockfile: plugins/dashboard/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/dashboard/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-e8e7baefb646d823", "name": "Node manifest has dependencies but no lockfile: plugins/email-resend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/email-resend/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-70f317bbb0db5afc", "name": "Node manifest has dependencies but no lockfile: plugins/site-builder/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/site-builder/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-5c1c02e4e9b87249", "name": "Node manifest has dependencies but no lockfile: plugins/cms/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/cms/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-984d6915a1c0c80e", "name": "Node manifest has dependencies but no lockfile: plugins/examples/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/examples/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-90332be24f5893ce", "name": "Node manifest has dependencies but no lockfile: plugins/site-content/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/site-content/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-e5cf037885ef2f54", "name": "Node manifest has dependencies but no lockfile: plugins/atproto-registry/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/atproto-registry/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-1e8678e717b16df3", "name": "Node manifest has dependencies but no lockfile: plugins/content-pipeline/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/content-pipeline/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-21f3b0e6a9107308", "name": "Node manifest has dependencies but no lockfile: plugins/newsletter/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/newsletter/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-d8ccbefad9690403", "name": "Node manifest has dependencies but no lockfile: plugins/obsidian-vault/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/obsidian-vault/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-b0cb452084595d8f", "name": "Node manifest has dependencies but no lockfile: plugins/buttondown/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: plugins/buttondown/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 165 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 306 placeholder/mock markers across 42 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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc824533a96c48e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 brains/relay/test/home-counts-datasource.test.ts:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 brains/relay/test/home-counts-datasource.test.ts:53"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-657d08fed628f04c", "name": "Commented-code block (7 lines) in brains/relay/src/index.ts:198", "shortDescription": {"text": "Commented-code block (7 lines) in brains/relay/src/index.ts:198"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f211f586b6ac0fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shared/media-page-composer/test/og-image.test.ts:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/media-page-composer/test/og-image.test.ts:45"}, "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-bcbd0435dadc62e3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shared/utils/src/http-utils.ts:22", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/utils/src/http-utils.ts:22"}, "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-1a0fe32b34b3a926", "name": "Commented-code block (12 lines) in shared/site-engine/test/route-registry.test.ts:213", "shortDescription": {"text": "Commented-code block (12 lines) in shared/site-engine/test/route-registry.test.ts:213"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a9f3674a9bcae392", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shared/ui-library/src/markdown-html.test.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/ui-library/src/markdown-html.test.ts:7"}, "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-c3dcd8492b49c228", "name": "Commented-code block (5 lines) in shared/ui-library/src/OgCard.tsx:8", "shortDescription": {"text": "Commented-code block (5 lines) in shared/ui-library/src/OgCard.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e0bf701c2f37de3", "name": "Commented-code block (6 lines) in shared/ui-library/src/markdown-html.ts:85", "shortDescription": {"text": "Commented-code block (6 lines) in shared/ui-library/src/markdown-html.ts:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cedba87af43c0ce8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shared/ui-library/src/NewsletterSignup.tsx:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/ui-library/src/NewsletterSignup.tsx:98"}, "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-87aa66c96da2df2f", "name": "Commented-code block (7 lines) in shared/deploy-support/src/index.ts:209", "shortDescription": {"text": "Commented-code block (7 lines) in shared/deploy-support/src/index.ts:209"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-470666b23ab2c8fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shared/deploy-support/src/deploy-scripts/update-dns.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/deploy-support/src/deploy-scripts/update-dns.ts:24"}, "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-867d6e03544eb96d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shared/deploy-support/src/deploy-scripts/provision-server.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/deploy-support/src/deploy-scripts/provision-server.ts:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b50d351cb4fe1fe5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/mcp/test/transports/http-server.test.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/mcp/test/transports/http-server.test.ts:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d59c84e35f1bea3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/a2a/src/a2a-interface.ts:312", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/a2a/src/a2a-interface.ts:312"}, "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-8b7bc5637a369efe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/discord/src/discord-interface.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/discord/src/discord-interface.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-13c9bc065ab0c5c1", "name": "Commented-code block (6 lines) in interfaces/webserver/test/server-manager.test.ts:421", "shortDescription": {"text": "Commented-code block (6 lines) in interfaces/webserver/test/server-manager.test.ts:421"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61726fcc05cc7d63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/webserver/test/server-manager.test.ts:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/webserver/test/server-manager.test.ts:64"}, "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-71a25c1bbf1707bc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/webserver/src/server-manager.ts:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/webserver/src/server-manager.ts:132"}, "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-aa5f3dc7199dd3de", "name": "Commented-code block (5 lines) in interfaces/webserver/src/webserver-interface.ts:35", "shortDescription": {"text": "Commented-code block (5 lines) in interfaces/webserver/src/webserver-interface.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-521b1021c1213d09", "name": "Commented-code block (5 lines) in packages/brain-cli/scripts/entrypoint.ts:71", "shortDescription": {"text": "Commented-code block (5 lines) in packages/brain-cli/scripts/entrypoint.ts:71"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24719c48b7c71210", "name": "Commented-code block (5 lines) in packages/brain-cli/scripts/build.ts:120", "shortDescription": {"text": "Commented-code block (5 lines) in packages/brain-cli/scripts/build.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-22285f8dda6f7df5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brain-cli/templates/deploy/scripts/update-dns.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brain-cli/templates/deploy/scripts/update-dns.ts:24"}, "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-5d5fac31f645ac94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brain-cli/templates/deploy/scripts/provision-server.ts:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brain-cli/templates/deploy/scripts/provision-server.ts:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2daae95a562e6a71", "name": "Commented-code block (9 lines) in packages/brain-cli/src/lib/env-schema.ts:11", "shortDescription": {"text": "Commented-code block (9 lines) in packages/brain-cli/src/lib/env-schema.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-f1ee2f513c28d0e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/update-dns.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/update-dns.ts:24"}, "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-bf8a8fd24ec60632", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/sync-content-repo", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/sync-content-repo.ts:80"}, "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-41b3fe632a125284", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/provision-server.", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/provision-server.ts:35"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0d592e6b0557faa3", "name": "Commented-code block (5 lines) in shell/ai-evaluation/test/per-model-git-remote.test.ts:136", "shortDescription": {"text": "Commented-code block (5 lines) in shell/ai-evaluation/test/per-model-git-remote.test.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-88f344989bc27c58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shell/ai-evaluation/src/remote-agent-service.ts:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shell/ai-evaluation/src/remote-agent-service.ts:106"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf9f2e2965edf792", "name": "Commented-code block (6 lines) in shell/job-queue/src/job-queue-repository.ts:273", "shortDescription": {"text": "Commented-code block (6 lines) in shell/job-queue/src/job-queue-repository.ts:273"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edec458aa3c12278", "name": "Commented-code block (5 lines) in shell/app/test/instance-overrides.test.ts:1172", "shortDescription": {"text": "Commented-code block (5 lines) in shell/app/test/instance-overrides.test.ts:1172"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b233184e40b8088", "name": "Legacy-named symbol `setup_old` in shell/auth-service/test/auth-service.test.ts:705", "shortDescription": {"text": "Legacy-named symbol `setup_old` in shell/auth-service/test/auth-service.test.ts:705"}, "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-c498fabd41ba0c43", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shell/core/test/entity-datasource.test.ts:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shell/core/test/entity-datasource.test.ts:73"}, "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-5533d0f0df6e5496", "name": "Commented-code block (6 lines) in shell/content-service/src/content-service.ts:293", "shortDescription": {"text": "Commented-code block (6 lines) in shell/content-service/src/content-service.ts:293"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8522e7968dd54c44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shell/content-service/src/content-service.ts:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shell/content-service/src/content-service.ts:151"}, "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-75265f429c89a561", "name": "`fetch()` without try/.catch or AbortSignal \u2014 shell/plugins/src/service/base-entity-datasource.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shell/plugins/src/service/base-entity-datasource.ts:91"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4b4d2c6afcdff181", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/rss-datasource.test.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/rss-datasource.test.ts:91"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-59041ea961b2fffb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/datasource.test.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/datasource.test.ts:74"}, "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-3dc48c13b7e5a2d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/attachments/printable-provider.test.ts:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/attachments/printable-provider.test.ts:73"}, "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-d6acdd7ef2a225e1", "name": "Commented-code block (5 lines) in entities/document/src/handlers/documentGenerationHandler.ts:411", "shortDescription": {"text": "Commented-code block (5 lines) in entities/document/src/handlers/documentGenerationHandler.ts:411"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b141141042667bb9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/datasource.test.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/datasource.test.ts:75"}, "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-701a216d4a01e9f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/attachments/carousel-provider.test.ts:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/attachments/carousel-provider.test.ts:98"}, "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-041ae2518393e1f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/attachments/og-image-provider.test.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/attachments/og-image-provider.test.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-f2f8cbb8e2f0f363", "name": "Legacy-named symbol `changedOld` in entities/agent-discovery/test/skill-deriver.test.ts:119", "shortDescription": {"text": "Legacy-named symbol `changedOld` in entities/agent-discovery/test/skill-deriver.test.ts:119"}, "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-9f47200c4d449e3e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/agent-discovery/test/datasource.test.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/agent-discovery/test/datasource.test.ts:67"}, "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-fa5e330541e06075", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/agent-discovery/src/datasources/agent-datasource.ts:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/agent-discovery/src/datasources/agent-datasource.ts:145"}, "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-91e8e798bc11f256", "name": "Legacy-named symbol `nLegacy` in entities/topics/test/atproto-projection.test.ts:12", "shortDescription": {"text": "Legacy-named symbol `nLegacy` in entities/topics/test/atproto-projection.test.ts:12"}, "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-ed387748123794cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/topics/test/datasources/topics-datasource.test.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/topics/test/datasources/topics-datasource.test.ts:40"}, "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-a5101d63b42d95d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/topics/src/datasources/topics-datasource.ts:82", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/topics/src/datasources/topics-datasource.ts:82"}, "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-a4f1909f643d32e2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/conversation-memory/test/datasources/summary-datasource.test.ts:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/conversation-memory/test/datasources/summary-datasource.test.ts:57"}, "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-c0cefbb3e91863ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/test/datasource.test.ts:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/test/datasource.test.ts:87"}, "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-ea70123e82a4721b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/plugin.ts:255", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/plugin.ts:255"}, "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-f12d7730d269bed5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/lib/link-service.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/lib/link-service.ts:123"}, "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-1f1ce732f793420d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/lib/url-fetcher.ts:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/lib/url-fetcher.ts:50"}, "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-53d240880a16efc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/handlers/capture-handler.ts:128", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/handlers/capture-handler.ts:128"}, "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-7a791bba343d8513", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/datasource.test.ts:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/datasource.test.ts:98"}, "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-0e849a61f7926b43", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/attachments/printable-provider.test.ts:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/attachments/printable-provider.test.ts:65"}, "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-f3bb9bcd1e108b09", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/attachments/og-image-provider.test.ts:56", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/attachments/og-image-provider.test.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-62c98ce0d264505b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/site-info/test/datasource.test.ts:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/site-info/test/datasource.test.ts:20"}, "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-3efeb6232ca4e834", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/newsletter/test/newsletter-datasource.test.ts:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/newsletter/test/newsletter-datasource.test.ts:77"}, "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-81187fd4048b92b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/products/test/attachments/printable-provider.test.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/products/test/attachments/printable-provider.test.ts:79"}, "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-fe063d02b47c32af", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/products/test/attachments/og-image-provider.test.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/products/test/attachments/og-image-provider.test.ts:55"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-84d43d1f3de3fba5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/test/datasource.test.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/test/datasource.test.ts:75"}, "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-8be66e1ab9b9366e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/test/datasources/social-post-datasource.test.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/test/datasources/social-post-datasource.test.ts:42"}, "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-edb5f780f8bef043", "name": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/src/lib/linkedin-client.ts:206", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/src/lib/linkedin-client.ts:206"}, "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-cec53d0f54cf9d40", "name": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/analytics/src/lib/cloudflare-client.ts:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/analytics/src/lib/cloudflare-client.ts:140"}, "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-7e463b2fb4797d63", "name": "Legacy-named symbol `nOld` in plugins/directory-sync/test/file-operations.test.ts:681", "shortDescription": {"text": "Legacy-named symbol `nOld` in plugins/directory-sync/test/file-operations.test.ts:681"}, "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-aa1c0cce271d272f", "name": "Commented-code block (6 lines) in plugins/directory-sync/test/startup-order-source-of-truth.test.ts:366", "shortDescription": {"text": "Commented-code block (6 lines) in plugins/directory-sync/test/startup-order-source-of-truth.test.ts:366"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e85ba2c25f229410", "name": "Commented-code block (6 lines) in plugins/directory-sync/src/plugin.ts:93", "shortDescription": {"text": "Commented-code block (6 lines) in plugins/directory-sync/src/plugin.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a46c19f66b492758", "name": "Commented-code block (5 lines) in plugins/directory-sync/src/lib/git-branch.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in plugins/directory-sync/src/lib/git-branch.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-6cf7af551089c41c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/atproto/src/plugin.ts:498", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/atproto/src/plugin.ts:498"}, "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-d02cd1cca5ce190a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/atproto/src/pds-client.ts:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/atproto/src/pds-client.ts:70"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9530b2e2e47ee691", "name": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/site-builder/test/unit/navigation-datasource.test.ts:63", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/site-builder/test/unit/navigation-datasource.test.ts:63"}, "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-d28c72ad9c60db19", "name": "Commented-code block (5 lines) in plugins/examples/src/service-plugin-example.ts:184", "shortDescription": {"text": "Commented-code block (5 lines) in plugins/examples/src/service-plugin-example.ts:184"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c8db77a7bbc1381", "name": "Commented-code block (5 lines) in plugins/content-pipeline/src/publish-executor.ts:128", "shortDescription": {"text": "Commented-code block (5 lines) in plugins/content-pipeline/src/publish-executor.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fa5af25316da646", "name": "16 env vars used in code but missing from .env.example", "shortDescription": {"text": "16 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AI_API_KEY`, `ATPROTO_APP_PASSWORD`, `ATPROTO_IDENTIFIER`, `ATPROTO_PDS_ENDPOINT`, `CONVERSATION_DATABASE_AUTH_TOKEN`, `CONVERSATION_DATABASE_URL`, `DATABASE_AUTH_TOKEN`, `DATABASE_URL` + 8 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-f8124033a340624d", "name": "Dangling fetch: GET http://attacker.example (shared/ui-library/src/markdown-html.test.ts:7)", "shortDescription": {"text": "Dangling fetch: GET http://attacker.example (shared/ui-library/src/markdown-html.test.ts:7)"}, "fullDescription": {"text": "`shared/ui-library/src/markdown-html.test.ts:7` calls `GET http://attacker.example` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/attacker.example`\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-c835ba7ecd05b51f", "name": "Dangling fetch: GET /api/chat/sessions (interfaces/web-chat/ui-react/src/App.tsx:520)", "shortDescription": {"text": "Dangling fetch: GET /api/chat/sessions (interfaces/web-chat/ui-react/src/App.tsx:520)"}, "fullDescription": {"text": "`interfaces/web-chat/ui-react/src/App.tsx:520` calls `GET /api/chat/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/sessions`\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-b759882edfa21d01", "name": "Dangling fetch: GET /api/chat/messages?id=${encodeURIComponent(nextConversationId)} (interfaces/web-chat/ui-react/src/Ap", "shortDescription": {"text": "Dangling fetch: GET /api/chat/messages?id=${encodeURIComponent(nextConversationId)} (interfaces/web-chat/ui-react/src/App.tsx:570)"}, "fullDescription": {"text": "`interfaces/web-chat/ui-react/src/App.tsx:570` calls `GET /api/chat/messages?id=${encodeURIComponent(nextConversationId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/messages`\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-cb4d6497ea7b0f0f", "name": "Dangling fetch: PUT /api/chat/sessions?id=${encodeURIComponent(session.id)} (interfaces/web-chat/ui-react/src/App.tsx:71", "shortDescription": {"text": "Dangling fetch: PUT /api/chat/sessions?id=${encodeURIComponent(session.id)} (interfaces/web-chat/ui-react/src/App.tsx:711)"}, "fullDescription": {"text": "`interfaces/web-chat/ui-react/src/App.tsx:711` calls `PUT /api/chat/sessions?id=${encodeURIComponent(session.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/sessions`\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-25d9197198faf7ae", "name": "Dangling fetch: PUT /api/chat/sessions/archive?id=${encodeURIComponent(session.id)} (interfaces/web-chat/ui-react/src/Ap", "shortDescription": {"text": "Dangling fetch: PUT /api/chat/sessions/archive?id=${encodeURIComponent(session.id)} (interfaces/web-chat/ui-react/src/App.tsx:751)"}, "fullDescription": {"text": "`interfaces/web-chat/ui-react/src/App.tsx:751` calls `PUT /api/chat/sessions/archive?id=${encodeURIComponent(session.id)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/sessions/archive`\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-67502daf66555d81", "name": "Dangling fetch: GET /api/chat/jobs/status?id=${encodeURIComponent(pollingJobId)} (interfaces/web-chat/ui-react/src/ai-el", "shortDescription": {"text": "Dangling fetch: GET /api/chat/jobs/status?id=${encodeURIComponent(pollingJobId)} (interfaces/web-chat/ui-react/src/ai-elements/data-parts.tsx:377)"}, "fullDescription": {"text": "`interfaces/web-chat/ui-react/src/ai-elements/data-parts.tsx:377` calls `GET /api/chat/jobs/status?id=${encodeURIComponent(pollingJobId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/chat/jobs/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-004271730fdd2fff", "name": "Dangling fetch: POST https://api.github.com/orgs/${options.owner}/repos (packages/brains-ops/templates/rover-pilot/deplo", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/orgs/${options.owner}/repos (packages/brains-ops/templates/rover-pilot/deploy/scripts/sync-content-repo.ts:92)"}, "fullDescription": {"text": "`packages/brains-ops/templates/rover-pilot/deploy/scripts/sync-content-repo.ts:92` calls `POST https://api.github.com/orgs/${options.owner}/repos` 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.github.com/orgs/<p>/repos`\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-550e4eea05619bd0", "name": "Dangling fetch: POST https://github.com/login/oauth/access_token (plugins/cms/src/plugin.ts:437)", "shortDescription": {"text": "Dangling fetch: POST https://github.com/login/oauth/access_token (plugins/cms/src/plugin.ts:437)"}, "fullDescription": {"text": "`plugins/cms/src/plugin.ts:437` calls `POST https://github.com/login/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/github.com/login/oauth/access_token`\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-d629914ba067c61c", "name": "Dangling fetch: POST /auth/cms-token (plugins/cms/src/plugin.ts:671)", "shortDescription": {"text": "Dangling fetch: POST /auth/cms-token (plugins/cms/src/plugin.ts:671)"}, "fullDescription": {"text": "`plugins/cms/src/plugin.ts:671` calls `POST /auth/cms-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/cms-token`\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-af1035abcb5e977b", "name": "Dangling fetch: POST /subscribers (plugins/buttondown/src/lib/buttondown-client.ts:163)", "shortDescription": {"text": "Dangling fetch: POST /subscribers (plugins/buttondown/src/lib/buttondown-client.ts:163)"}, "fullDescription": {"text": "`plugins/buttondown/src/lib/buttondown-client.ts:163` calls `POST /subscribers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/subscribers`\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-6b230bffed599479", "name": "Dangling fetch: DELETE /subscribers/${encodeURIComponent(email)} (plugins/buttondown/src/lib/buttondown-client.ts:191)", "shortDescription": {"text": "Dangling fetch: DELETE /subscribers/${encodeURIComponent(email)} (plugins/buttondown/src/lib/buttondown-client.ts:191)"}, "fullDescription": {"text": "`plugins/buttondown/src/lib/buttondown-client.ts:191` calls `DELETE /subscribers/${encodeURIComponent(email)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/subscribers/<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-2cf1ddc4e7c69386", "name": "Dangling fetch: POST /emails (plugins/buttondown/src/lib/buttondown-client.ts:241)", "shortDescription": {"text": "Dangling fetch: POST /emails (plugins/buttondown/src/lib/buttondown-client.ts:241)"}, "fullDescription": {"text": "`plugins/buttondown/src/lib/buttondown-client.ts:241` calls `POST /emails` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd8975100183a770", "name": "Dangling fetch: GET /emails/${id} (plugins/buttondown/src/lib/buttondown-client.ts:251)", "shortDescription": {"text": "Dangling fetch: GET /emails/${id} (plugins/buttondown/src/lib/buttondown-client.ts:251)"}, "fullDescription": {"text": "`plugins/buttondown/src/lib/buttondown-client.ts:251` calls `GET /emails/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/emails/<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-fe1768fcd04c8fda", "name": "Unused endpoint: GET /a2a", "shortDescription": {"text": "Unused endpoint: GET /a2a"}, "fullDescription": {"text": "`interfaces/a2a/src/a2a-interface.ts` declares `GET /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-19235a2ddf3ad7af", "name": "Unused endpoint: OPTIONS /a2a", "shortDescription": {"text": "Unused endpoint: OPTIONS /a2a"}, "fullDescription": {"text": "`interfaces/a2a/src/a2a-interface.ts` declares `OPTIONS /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-c43b20b8464b26d9", "name": "Unused endpoint: POST /a2a", "shortDescription": {"text": "Unused endpoint: POST /a2a"}, "fullDescription": {"text": "`interfaces/a2a/src/a2a-interface.ts` declares `POST /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-3abf952b8d28d710", "name": "Unused endpoint: USE /*", "shortDescription": {"text": "Unused endpoint: USE /*"}, "fullDescription": {"text": "`interfaces/webserver/src/server-manager.ts` declares `USE /*` 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/18253"}, "properties": {"repository": "rizom-ai/brains", "repoUrl": "https://github.com/rizom-ai/brains", "branch": "main"}, "results": [{"ruleId": "scanner-c12dfebd16c8552c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/OgCard.tsx:71"}, "properties": {"repobilityId": "22d7cc89312ae968", "scanner": "scanner-primary", "fingerprint": "c12dfebd16c8552c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-74c122c724a253f7", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/PresentationLayout.tsx:78"}, "properties": {"repobilityId": "da225e9051fb85df", "scanner": "scanner-primary", "fingerprint": "74c122c724a253f7", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-321ea4ca0abf266e", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/ProseContent.tsx:43"}, "properties": {"repobilityId": "3a5e2539b6ef98aa", "scanner": "scanner-primary", "fingerprint": "321ea4ca0abf266e", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-0be8bfc1b6d14a7d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 shared/ui-library/src/NewsletterSignup.tsx:169"}, "properties": {"repobilityId": "7ddc7412fa421beb", "scanner": "scanner-primary", "fingerprint": "0be8bfc1b6d14a7d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-f257706e7514e9ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 shared/ui-library/src/widgets/PipelineWidget.tsx:142"}, "properties": {"repobilityId": "f211aa72c5f71ddc", "scanner": "scanner-primary", "fingerprint": "f257706e7514e9ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c20e796c128806b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shared/deploy-support/src/scaffold.ts:219"}, "properties": {"repobilityId": "d2240f2c82db05f5", "scanner": "scanner-primary", "fingerprint": "4c20e796c128806b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fd1e745010ad7b9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shared/deploy-support/src/deploy-scripts/provision-server.ts:97"}, "properties": {"repobilityId": "8e0eee0d088ff54d", "scanner": "scanner-primary", "fingerprint": "fd1e745010ad7b9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ecc3ee758d2cd40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-versions.ts:15"}, "properties": {"repobilityId": "88650b18116a5471", "scanner": "scanner-primary", "fingerprint": "5ecc3ee758d2cd40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b1478ab20075b2e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-markdown-links.ts:144"}, "properties": {"repobilityId": "c3795909532fafac", "scanner": "scanner-primary", "fingerprint": "b1478ab20075b2e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5bd7b6f5f8f9504c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-docs-manifest.ts:151"}, "properties": {"repobilityId": "59379c88ee0ab4cf", "scanner": "scanner-primary", "fingerprint": "5bd7b6f5f8f9504c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-930ab2e9f6f0559a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/sync-docs-content.ts:344"}, "properties": {"repobilityId": "a7629ea3c31d5012", "scanner": "scanner-primary", "fingerprint": "930ab2e9f6f0559a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b77190a32cf3819b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 deploy/scripts/deploy.ts:46"}, "properties": {"repobilityId": "2bf4c4774a335d36", "scanner": "scanner-primary", "fingerprint": "b77190a32cf3819b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c380cd46ec962859", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 interfaces/mcp/src/transports/types.ts:38"}, "properties": {"repobilityId": "4328ce6659e25a01", "scanner": "scanner-primary", "fingerprint": "c380cd46ec962859", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ae0a5220cbfc6c8c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 interfaces/web-chat/scripts/build-ui.ts:70"}, "properties": {"repobilityId": "3ca6343d45861368", "scanner": "scanner-primary", "fingerprint": "ae0a5220cbfc6c8c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-927c38d3e837b1ee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/test/init.test.ts:707"}, "properties": {"repobilityId": "e20ffd4c03114758", "scanner": "scanner-primary", "fingerprint": "927c38d3e837b1ee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0ae337b063e56e5c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/entrypoint.ts:143"}, "properties": {"repobilityId": "83fdd382366a0301", "scanner": "scanner-primary", "fingerprint": "0ae337b063e56e5c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffe588b1e90bd92b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/build.ts:71"}, "properties": {"repobilityId": "e6a6a75194e71018", "scanner": "scanner-primary", "fingerprint": "ffe588b1e90bd92b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1ae332615f1a9fce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/scripts/generate-bundled-model-env-schemas.ts:60"}, "properties": {"repobilityId": "e77b1866a0c3c0d8", "scanner": "scanner-primary", "fingerprint": "1ae332615f1a9fce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65a9322a2f3481ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/templates/deploy/scripts/provision-server.ts:97"}, "properties": {"repobilityId": "c02cd064e57acc29", "scanner": "scanner-primary", "fingerprint": "65a9322a2f3481ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa92df696a535c7e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/index.ts:47"}, "properties": {"repobilityId": "f6383819c3ae27ec", "scanner": "scanner-primary", "fingerprint": "aa92df696a535c7e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-55d52fa08ccdfe92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/run-command.ts:274"}, "properties": {"repobilityId": "2d7ab3eddc9dcd11", "scanner": "scanner-primary", "fingerprint": "55d52fa08ccdfe92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-81be489635fc82f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/commands/operate-remote.ts:110"}, "properties": {"repobilityId": "d3644add84e4acf6", "scanner": "scanner-primary", "fingerprint": "81be489635fc82f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-beefd28bcb650b3d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brain-cli/src/commands/operate.ts:106"}, "properties": {"repobilityId": "db52642d880a9883", "scanner": "scanner-primary", "fingerprint": "beefd28bcb650b3d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6811c89bbe9b3361", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/test/package-metadata.test.ts:145"}, "properties": {"repobilityId": "3cef518f113869fc", "scanner": "scanner-primary", "fingerprint": "6811c89bbe9b3361", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8938d8b6bc7ee5b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/scripts/build.ts:87"}, "properties": {"repobilityId": "fb25262ac9c9157f", "scanner": "scanner-primary", "fingerprint": "8938d8b6bc7ee5b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ecf35ce3a5e2fb7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/provision-server.ts:97"}, "properties": {"repobilityId": "393dc38a43029048", "scanner": "scanner-primary", "fingerprint": "2ecf35ce3a5e2fb7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8971af397a327c97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/brains-ops/src/content-repo.ts:219"}, "properties": {"repobilityId": "a201a7e748b8574b", "scanner": "scanner-primary", "fingerprint": "8971af397a327c97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2679e41fcaea46d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/multi-model-runner.ts:45"}, "properties": {"repobilityId": "bccc198bc15b1c1a", "scanner": "scanner-primary", "fingerprint": "2679e41fcaea46d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8e36cec6eb71221", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/eval-config-loader.ts:66"}, "properties": {"repobilityId": "df0ebb2dfdacc587", "scanner": "scanner-primary", "fingerprint": "c8e36cec6eb71221", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-069f5a94cbc0e312", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/eval-db-builder.ts:48"}, "properties": {"repobilityId": "721b2e0ae8ac211c", "scanner": "scanner-primary", "fingerprint": "069f5a94cbc0e312", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-71fd5b214e09abda", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/single-model-runner.ts:35"}, "properties": {"repobilityId": "6e47cad4f4dcabfc", "scanner": "scanner-primary", "fingerprint": "71fd5b214e09abda", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-39ba42565ac0867d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/cli-help.ts:2"}, "properties": {"repobilityId": "e0666f5e3bc5c218", "scanner": "scanner-primary", "fingerprint": "39ba42565ac0867d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e7969a52444250d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/evaluation-runner.ts:122"}, "properties": {"repobilityId": "eddf7a3ba38776b1", "scanner": "scanner-primary", "fingerprint": "4e7969a52444250d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-74a0393ccccfe42e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/console-reporter.ts:34"}, "properties": {"repobilityId": "ec2c7b7a5a0c05d0", "scanner": "scanner-primary", "fingerprint": "74a0393ccccfe42e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e9285aad18f2a43a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/json-reporter.ts:54"}, "properties": {"repobilityId": "afff9bf59d5b4bd1", "scanner": "scanner-primary", "fingerprint": "e9285aad18f2a43a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffb11322488e9d37", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/comparison-reporter.ts:34"}, "properties": {"repobilityId": "32fa54c621037501", "scanner": "scanner-primary", "fingerprint": "ffb11322488e9d37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a8a98dd3fb76277f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/ai-evaluation/src/reporters/markdown-reporter.ts:28"}, "properties": {"repobilityId": "c73d600bab961d41", "scanner": "scanner-primary", "fingerprint": "a8a98dd3fb76277f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb18e4790050dcd9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/app/scripts/build-model.ts:71"}, "properties": {"repobilityId": "be61cef197b6ecca", "scanner": "scanner-primary", "fingerprint": "bb18e4790050dcd9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95ec609e7c709f2c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/app/scripts/build.ts:43"}, "properties": {"repobilityId": "41e75d9164ba2a90", "scanner": "scanner-primary", "fingerprint": "95ec609e7c709f2c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea6e84ba76b4d596", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/app/src/cli.ts:63"}, "properties": {"repobilityId": "44f9f45d5a1271c0", "scanner": "scanner-primary", "fingerprint": "ea6e84ba76b4d596", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d71f0c8f7cfc1fea", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 shell/app/src/runner.ts:92"}, "properties": {"repobilityId": "b9a3259d888e1430", "scanner": "scanner-primary", "fingerprint": "d71f0c8f7cfc1fea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-23ad586c39fd2360", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 shell/plugins/src/utils/channels.ts:29"}, "properties": {"repobilityId": "5345497d6165e138", "scanner": "scanner-primary", "fingerprint": "23ad586c39fd2360", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5e95af139a27620", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/blog/src/templates/PostNavigation.tsx:29"}, "properties": {"repobilityId": "3f1ae3185d5bfd74", "scanner": "scanner-primary", "fingerprint": "b5e95af139a27620", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ecd1ef49073d5940", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/blog/src/templates/homepage.tsx:56"}, "properties": {"repobilityId": "c08b3fe4407df824", "scanner": "scanner-primary", "fingerprint": "ecd1ef49073d5940", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c18f0af67f43acb1", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/blog/src/attachments/printable-template.tsx:51"}, "properties": {"repobilityId": "6e276aae16aaedd8", "scanner": "scanner-primary", "fingerprint": "c18f0af67f43acb1", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-cfd70b3f1400864d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/decks/src/attachments/carousel-template.tsx:44"}, "properties": {"repobilityId": "ddf0032673ab7b84", "scanner": "scanner-primary", "fingerprint": "cfd70b3f1400864d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c5115eabd748bf7a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/topics/src/templates/topic-detail/layout.tsx:16"}, "properties": {"repobilityId": "f881047b53def01d", "scanner": "scanner-primary", "fingerprint": "c5115eabd748bf7a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5fb84f9bdde540cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/link/src/templates/link-detail/layout.tsx:31"}, "properties": {"repobilityId": "629756f3081b8ec7", "scanner": "scanner-primary", "fingerprint": "5fb84f9bdde540cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d98d322b1b765667", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/link/src/templates/link-list/layout.tsx:33"}, "properties": {"repobilityId": "2fa1cce8ace5da39", "scanner": "scanner-primary", "fingerprint": "d98d322b1b765667", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-98c8532050295078", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/portfolio/src/templates/project-detail.tsx:31"}, "properties": {"repobilityId": "c8e2d58b330a9306", "scanner": "scanner-primary", "fingerprint": "98c8532050295078", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a5ef05bc71317a0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/portfolio/src/attachments/printable-template.tsx:42"}, "properties": {"repobilityId": "f37742b2a6e78952", "scanner": "scanner-primary", "fingerprint": "7a5ef05bc71317a0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e56ca47f66894dc6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 entities/newsletter/src/templates/newsletter-detail.tsx:139"}, "properties": {"repobilityId": "cf0e7bbe0e9bedf0", "scanner": "scanner-primary", "fingerprint": "e56ca47f66894dc6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ad9281ed4b3bfb7a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 entities/products/src/attachments/printable-template.tsx:37"}, "properties": {"repobilityId": "5f66070b3e1f31c8", "scanner": "scanner-primary", "fingerprint": "ad9281ed4b3bfb7a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d614f5644e8e6d82", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/atproto/scripts/smoke-discovery.ts:37"}, "properties": {"repobilityId": "e433f5a61e449d9c", "scanner": "scanner-primary", "fingerprint": "d614f5644e8e6d82", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc13b0f2c42c1c8f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 plugins/dashboard/src/dashboard-page.tsx:166"}, "properties": {"repobilityId": "bdab60c138a16f2a", "scanner": "scanner-primary", "fingerprint": "cc13b0f2c42c1c8f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-8bb95ddd8d48bbca", "level": "warning", "message": {"text": "Privileged port 10 in use"}, "properties": {"repobilityId": "735372d6b5594915", "scanner": "scanner-primary", "fingerprint": "8bb95ddd8d48bbca", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/relay/test-cases/plugin/summary-no-fabricated-relay-actions.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2cf9781063186267", "level": "warning", "message": {"text": "Privileged port 18 in use"}, "properties": {"repobilityId": "2d7b5e7d9c158e43", "scanner": "scanner-primary", "fingerprint": "2cf9781063186267", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/relay/test-cases/plugin/topic-relay-batch.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bf6f86c239800367", "level": "warning", "message": {"text": "Privileged port 15 in use"}, "properties": {"repobilityId": "3340f9a170f285cd", "scanner": "scanner-primary", "fingerprint": "bf6f86c239800367", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/relay/test-cases/plugin/summary-incremental-relay-projection.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-913bdcafdae7de34", "level": "warning", "message": {"text": "Privileged port 16 in use"}, "properties": {"repobilityId": "d31009168c502ace", "scanner": "scanner-primary", "fingerprint": "913bdcafdae7de34", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/relay/test-cases/plugin/summary-incremental-relay-projection.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec27607aeb275cd4", "level": "warning", "message": {"text": "Privileged port 20 in use"}, "properties": {"repobilityId": "a59f3e53d617e0f8", "scanner": "scanner-primary", "fingerprint": "ec27607aeb275cd4", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/noisy-long-chat.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-034fa05fdf355df8", "level": "warning", "message": {"text": "Privileged port 11 in use"}, "properties": {"repobilityId": "5b3038c67fabb4c8", "scanner": "scanner-primary", "fingerprint": "034fa05fdf355df8", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/noisy-long-chat.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-067ad5ac0771fcba", "level": "warning", "message": {"text": "Privileged port 12 in use"}, "properties": {"repobilityId": "65e7eefa33f2def4", "scanner": "scanner-primary", "fingerprint": "067ad5ac0771fcba", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/noisy-long-chat.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6f6c480b055309de", "level": "warning", "message": {"text": "Privileged port 13 in use"}, "properties": {"repobilityId": "79d721e4d6f64798", "scanner": "scanner-primary", "fingerprint": "6f6c480b055309de", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/preserves-action-items.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fa445eb48c6cc689", "level": "warning", "message": {"text": "Privileged port 17 in use"}, "properties": {"repobilityId": "0bf38fb8f89ec589", "scanner": "scanner-primary", "fingerprint": "fa445eb48c6cc689", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/owner-preservation.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1563776269dadfb5", "level": "warning", "message": {"text": "Privileged port 21 in use"}, "properties": {"repobilityId": "d920b7cd1b1a16dc", "scanner": "scanner-primary", "fingerprint": "1563776269dadfb5", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/long-multiphase-conversation.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-316c31b3150176d4", "level": "warning", "message": {"text": "Privileged port 30 in use"}, "properties": {"repobilityId": "54f172e7d16fc662", "scanner": "scanner-primary", "fingerprint": "316c31b3150176d4", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/long-multiphase-conversation.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-037102ad2bc4aa79", "level": "warning", "message": {"text": "Privileged port 19 in use"}, "properties": {"repobilityId": "a6b5b06deac36eac", "scanner": "scanner-primary", "fingerprint": "037102ad2bc4aa79", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/system-messages.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-901260321568dd27", "level": "warning", "message": {"text": "Privileged port 14 in use"}, "properties": {"repobilityId": "2dbd4b719a1412ff", "scanner": "scanner-primary", "fingerprint": "901260321568dd27", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/evals/test-cases/topic-shift-entries.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-025a8c2394b3c7ee", "level": "warning", "message": {"text": "Dockerfile runs as root: shared/deploy-support/src/Dockerfile"}, "properties": {"repobilityId": "3f0a58dc442ed818", "scanner": "scanner-primary", "fingerprint": "025a8c2394b3c7ee", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-9b1657190fc1508a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: oven/bun:${BUN_VERSION}-slim"}, "properties": {"repobilityId": "c4020cc471282a94", "scanner": "scanner-primary", "fingerprint": "9b1657190fc1508a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/deploy-support/src/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-2d77fd73eb219c9b", "level": "error", "message": {"text": "Runtime dotenv file present in repo: brains/relay/.env.schema"}, "properties": {"repobilityId": "47b520d46c00faa1", "scanner": "scanner-primary", "fingerprint": "2d77fd73eb219c9b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/relay/.env.schema"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-49f956c088f93e24", "level": "error", "message": {"text": "Runtime dotenv file present in repo: brains/ranger/.env.schema"}, "properties": {"repobilityId": "0e8609baedda9203", "scanner": "scanner-primary", "fingerprint": "49f956c088f93e24", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/ranger/.env.schema"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-116a2160127a4f01", "level": "error", "message": {"text": "Runtime dotenv file present in repo: brains/rover/.env.schema"}, "properties": {"repobilityId": "0eafaf2eed92c658", "scanner": "scanner-primary", "fingerprint": "116a2160127a4f01", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env", "env_file_with_secret"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/rover/.env.schema"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f8a71cc00fe87fb9", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in brains/relay/scripts/build-eval-db.ts:11"}, "properties": {"repobilityId": "c0bc4346ee0c6b07", "scanner": "scanner-primary", "fingerprint": "f8a71cc00fe87fb9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/relay/scripts/build-eval-db.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-07c6f1d67b88bb65", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in brains/rover/scripts/build-eval-db.ts:11"}, "properties": {"repobilityId": "59f5cf197f1e2e6f", "scanner": "scanner-primary", "fingerprint": "07c6f1d67b88bb65", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/rover/scripts/build-eval-db.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-15ddf3183e4d767f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/roadmap-visual.html:862"}, "properties": {"repobilityId": "e640dd70ea53f76c", "scanner": "scanner-primary", "fingerprint": "15ddf3183e4d767f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/roadmap-visual.html"}, "region": {"startLine": 862}}}]}, {"ruleId": "scanner-41a7bbe7b6c601c6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/codebase-map.html:338"}, "properties": {"repobilityId": "afd52f19b75c79e4", "scanner": "scanner-primary", "fingerprint": "41a7bbe7b6c601c6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/codebase-map.html"}, "region": {"startLine": 338}}}]}, {"ruleId": "scanner-9d98fff93e6fac8a", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/OgCard.tsx:71"}, "properties": {"repobilityId": "5c5ce3482acaff70", "scanner": "scanner-primary", "fingerprint": "9d98fff93e6fac8a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/ui-library/src/OgCard.tsx"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-2c8e28de7330974b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/PresentationLayout.tsx:78"}, "properties": {"repobilityId": "f86783aa7ff1a795", "scanner": "scanner-primary", "fingerprint": "2c8e28de7330974b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/ui-library/src/PresentationLayout.tsx"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-227674b91b5d7940", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/ProseContent.tsx:43"}, "properties": {"repobilityId": "4bdd3d212b51109f", "scanner": "scanner-primary", "fingerprint": "227674b91b5d7940", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/ui-library/src/ProseContent.tsx"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-c5a06f3e1c62ded0", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in shared/ui-library/src/NewsletterSignup.tsx:169"}, "properties": {"repobilityId": "8bc346c6da5c28c4", "scanner": "scanner-primary", "fingerprint": "c5a06f3e1c62ded0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/ui-library/src/NewsletterSignup.tsx"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-9e4151e983b6bdc1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in shared/ui-library/src/NewsletterSignup.tsx:109"}, "properties": {"repobilityId": "4504333ce54211b8", "scanner": "scanner-primary", "fingerprint": "9e4151e983b6bdc1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/ui-library/src/NewsletterSignup.tsx"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-cd480819efde80b0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/check-markdown-links.ts:3"}, "properties": {"repobilityId": "08326ea56d8a2a86", "scanner": "scanner-primary", "fingerprint": "cd480819efde80b0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/check-markdown-links.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-07faef19e73b7d97", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in interfaces/mcp/src/transports/http-server.ts:33"}, "properties": {"repobilityId": "96c00a87cf247989", "scanner": "scanner-primary", "fingerprint": "07faef19e73b7d97", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "interfaces/mcp/src/transports/http-server.ts"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-80a5f99a27c6827f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in interfaces/a2a/src/a2a-interface.ts:25"}, "properties": {"repobilityId": "307f9a56d6d3603a", "scanner": "scanner-primary", "fingerprint": "80a5f99a27c6827f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "interfaces/a2a/src/a2a-interface.ts"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-3c6f44a0b983c052", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/scripts/entrypoint.ts:102"}, "properties": {"repobilityId": "0a43775e433ad30b", "scanner": "scanner-primary", "fingerprint": "3c6f44a0b983c052", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/scripts/entrypoint.ts"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-605494510f83102e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/index.ts:2"}, "properties": {"repobilityId": "d51d1b0da27ecd38", "scanner": "scanner-primary", "fingerprint": "605494510f83102e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/src/index.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-aae04cf427afc868", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/run-command.ts:3"}, "properties": {"repobilityId": "cc07018a14c82073", "scanner": "scanner-primary", "fingerprint": "aae04cf427afc868", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/src/run-command.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-80192bdd7ba56118", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/operate.ts:3"}, "properties": {"repobilityId": "faf6f9bca90691ae", "scanner": "scanner-primary", "fingerprint": "80192bdd7ba56118", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/src/commands/operate.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-1eaaa3c8da5c70d4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/pin.ts:3"}, "properties": {"repobilityId": "81efa0d3bc91453f", "scanner": "scanner-primary", "fingerprint": "1eaaa3c8da5c70d4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/src/commands/pin.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-c63b5fc01c66fa42", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/commands/ssh-key-bootstrap.ts:1"}, "properties": {"repobilityId": "ee1c00d36990d782", "scanner": "scanner-primary", "fingerprint": "c63b5fc01c66fa42", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/src/commands/ssh-key-bootstrap.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-69747a077cf4db8f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/bitwarden-secrets.ts:1"}, "properties": {"repobilityId": "7879447e878e47dd", "scanner": "scanner-primary", "fingerprint": "69747a077cf4db8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/src/lib/bitwarden-secrets.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-70661b8e85f92083", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/spawn-bun-runner.ts:1"}, "properties": {"repobilityId": "49e0afd2ba35cf21", "scanner": "scanner-primary", "fingerprint": "70661b8e85f92083", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/src/lib/spawn-bun-runner.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0abd8812622d66b2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brain-cli/src/lib/run-subprocess.ts:1"}, "properties": {"repobilityId": "345263c841f9c99a", "scanner": "scanner-primary", "fingerprint": "0abd8812622d66b2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/src/lib/run-subprocess.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dfeab46a9b11be50", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brains-ops/src/ssh-key-bootstrap.ts:1"}, "properties": {"repobilityId": "ab9a0eff9e5ffaa4", "scanner": "scanner-primary", "fingerprint": "dfeab46a9b11be50", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/src/ssh-key-bootstrap.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a2babfa2b66f13fe", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/brains-ops/src/run-subprocess.ts:1"}, "properties": {"repobilityId": "12abdff6874ff6de", "scanner": "scanner-primary", "fingerprint": "a2babfa2b66f13fe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/src/run-subprocess.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4d3564f758fd1d13", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in shell/ai-evaluation/src/eval-environment.ts:1"}, "properties": {"repobilityId": "bb6a1b89d147cc1e", "scanner": "scanner-primary", "fingerprint": "4d3564f758fd1d13", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/ai-evaluation/src/eval-environment.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-14d3bc6847327d4c", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in shell/auth-service/src/http-responses.ts:37"}, "properties": {"repobilityId": "5bcb743e2fbcb1b4", "scanner": "scanner-primary", "fingerprint": "14d3bc6847327d4c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/auth-service/src/http-responses.ts"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-4a34e79aeecf9b6f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in plugins/directory-sync/src/lib/content-remote-bootstrap.ts:1"}, "properties": {"repobilityId": "c22734ae5c84f00b", "scanner": "scanner-primary", "fingerprint": "4a34e79aeecf9b6f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/directory-sync/src/lib/content-remote-bootstrap.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3e0e4dd247666d90", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in plugins/dashboard/src/dashboard-page.tsx:166"}, "properties": {"repobilityId": "4f68da6d5cc85e72", "scanner": "scanner-primary", "fingerprint": "3e0e4dd247666d90", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/dashboard/src/dashboard-page.tsx"}, "region": {"startLine": 166}}}]}, {"ruleId": "scanner-277b72bd9deb393d", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2714b9ccdeb5e0c8", "scanner": "scanner-primary", "fingerprint": "277b72bd9deb393d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/deploy.yml"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-277b72bd9deb393d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8fbbebdf0ac250a8", "scanner": "scanner-primary", "fingerprint": "277b72bd9deb393d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/deploy.yml"}, "region": {"startLine": 248}}}]}, {"ruleId": "scanner-277b72bd9deb393d", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "12c20f6c70f4d5c8", "scanner": "scanner-primary", "fingerprint": "277b72bd9deb393d", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/deploy.yml"}, "region": {"startLine": 289}}}]}, {"ruleId": "scanner-3994ddcf22fa1a57", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "17230b5dc31a7ed0", "scanner": "scanner-primary", "fingerprint": "3994ddcf22fa1a57", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/deploy.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0d6433646160be4e", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "36623d0e542e81b7", "scanner": "scanner-primary", "fingerprint": "0d6433646160be4e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/reconcile.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-32a7a43ca00c94b4", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e66b6ba0ed0aaea9", "scanner": "scanner-primary", "fingerprint": "32a7a43ca00c94b4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/build.yml"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-32a7a43ca00c94b4", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c0e2f9dfb49bf11e", "scanner": "scanner-primary", "fingerprint": "32a7a43ca00c94b4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/build.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-32a7a43ca00c94b4", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ee0287ec455cb007", "scanner": "scanner-primary", "fingerprint": "32a7a43ca00c94b4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/build.yml"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-32a7a43ca00c94b4", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "09a4613055fe65c5", "scanner": "scanner-primary", "fingerprint": "32a7a43ca00c94b4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/build.yml"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-0ea1bf67c98a5823", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "cebe9dba1f651874", "scanner": "scanner-primary", "fingerprint": "0ea1bf67c98a5823", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/.github/workflows/build.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5e70c0bb994125bc", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cf211fadd51f8e36", "scanner": "scanner-primary", "fingerprint": "5e70c0bb994125bc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-images.yml"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-5e70c0bb994125bc", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "95c73134f058f573", "scanner": "scanner-primary", "fingerprint": "5e70c0bb994125bc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-images.yml"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-5e70c0bb994125bc", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a4ec6eb2a7071f6b", "scanner": "scanner-primary", "fingerprint": "5e70c0bb994125bc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-images.yml"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-5e70c0bb994125bc", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fe505d9000759172", "scanner": "scanner-primary", "fingerprint": "5e70c0bb994125bc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-images.yml"}, "region": {"startLine": 103}}}]}, {"ruleId": "scanner-5e70c0bb994125bc", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e1fe34935d8da462", "scanner": "scanner-primary", "fingerprint": "5e70c0bb994125bc", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-images.yml"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-b5352e214808b403", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "86e617e86a0b4248", "scanner": "scanner-primary", "fingerprint": "b5352e214808b403", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-images.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0b7984a0d98960fe", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dcb6504096fc20e7", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a22664b58dca3181", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0b7984a0d98960fe", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dcb6504096fc20e7", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a22664b58dca3181", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 75}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0b7984a0d98960fe", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "dcb6504096fc20e7", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a22664b58dca3181", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 105}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "b86179956da3a4a8", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ccdb474d2bc7b674", "level": "note", "message": {"text": "Very large file: interfaces/web-chat/test/web-chat-interface.test.ts (2705 lines)"}, "properties": {"repobilityId": "cf9c1caac6025d8e", "scanner": "scanner-primary", "fingerprint": "ccdb474d2bc7b674", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0ee011259bb87bbe", "level": "note", "message": {"text": "Very large file: interfaces/web-chat/src/chat-page.ts (2156 lines)"}, "properties": {"repobilityId": "0630466340333756", "scanner": "scanner-primary", "fingerprint": "0ee011259bb87bbe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d4072d9b1d59f8c6", "level": "note", "message": {"text": "Very large file: shell/app/test/instance-overrides.test.ts (2679 lines)"}, "properties": {"repobilityId": "71a1c767a397f529", "scanner": "scanner-primary", "fingerprint": "d4072d9b1d59f8c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-16957e96c05b99f4", "level": "note", "message": {"text": "Very large file: shell/auth-service/test/auth-service.test.ts (1555 lines)"}, "properties": {"repobilityId": "3ae85210aec5190b", "scanner": "scanner-primary", "fingerprint": "16957e96c05b99f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bc6a95253b32c289", "level": "note", "message": {"text": "Very large file: shell/ai-service/test/agent-service.test.ts (2767 lines)"}, "properties": {"repobilityId": "0710db1ffa1f376a", "scanner": "scanner-primary", "fingerprint": "bc6a95253b32c289", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e9616e57a02aa6e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: brains/relay/package.json"}, "properties": {"repobilityId": "14cfe3bb5136ea8a", "scanner": "scanner-primary", "fingerprint": "1e9616e57a02aa6e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/relay/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d74ffca8d13526d1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: brains/ranger/package.json"}, "properties": {"repobilityId": "d29670978251891b", "scanner": "scanner-primary", "fingerprint": "d74ffca8d13526d1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/ranger/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dfd93b984c32d0a3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: brains/rover/package.json"}, "properties": {"repobilityId": "6ce4659272ce477e", "scanner": "scanner-primary", "fingerprint": "dfd93b984c32d0a3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "brains/rover/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6d0083e98af2a3ea", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/media-page-composer/package.json"}, "properties": {"repobilityId": "457a87ed1ece64f2", "scanner": "scanner-primary", "fingerprint": "6d0083e98af2a3ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/media-page-composer/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b51b4ad4c217a08c", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/eslint-config/package.json"}, "properties": {"repobilityId": "34aa67e0b20cd318", "scanner": "scanner-primary", "fingerprint": "b51b4ad4c217a08c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/eslint-config/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dc7b44dd31da83af", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/document/package.json"}, "properties": {"repobilityId": "e1e2b4da7add5b9b", "scanner": "scanner-primary", "fingerprint": "dc7b44dd31da83af", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/document/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27d1aa3660a04576", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/theme-base/package.json"}, "properties": {"repobilityId": "7201b865c86aad73", "scanner": "scanner-primary", "fingerprint": "27d1aa3660a04576", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/theme-base/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1ac2812039747780", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/theme-default/package.json"}, "properties": {"repobilityId": "cd2246572db275dd", "scanner": "scanner-primary", "fingerprint": "1ac2812039747780", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/theme-default/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-027cc2504245c3de", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/image/package.json"}, "properties": {"repobilityId": "69f9f8ad0a05a873", "scanner": "scanner-primary", "fingerprint": "027cc2504245c3de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/image/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dd5b9c1a7fb6aa0f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/media-renderer/package.json"}, "properties": {"repobilityId": "be9fef9e81f9490b", "scanner": "scanner-primary", "fingerprint": "dd5b9c1a7fb6aa0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/media-renderer/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca88ee8984e92f12", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/cms-config/package.json"}, "properties": {"repobilityId": "731d278e98491cc2", "scanner": "scanner-primary", "fingerprint": "ca88ee8984e92f12", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/cms-config/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9b5063c13314cdf2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/utils/package.json"}, "properties": {"repobilityId": "ab451e2bc1897274", "scanner": "scanner-primary", "fingerprint": "9b5063c13314cdf2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/utils/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7a74b7791e2c82d8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/atproto-contracts/package.json"}, "properties": {"repobilityId": "e5f375ad9250cbdd", "scanner": "scanner-primary", "fingerprint": "7a74b7791e2c82d8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/atproto-contracts/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-773f02badb0d8dc6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/site-engine/package.json"}, "properties": {"repobilityId": "a24d9d15d62bbdc2", "scanner": "scanner-primary", "fingerprint": "773f02badb0d8dc6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/site-engine/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-03dfa4b9fdff8709", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/site-composition/package.json"}, "properties": {"repobilityId": "72036f0a1747d23d", "scanner": "scanner-primary", "fingerprint": "03dfa4b9fdff8709", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/site-composition/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a958fc658602e1d0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/theme-rizom/package.json"}, "properties": {"repobilityId": "462cf0b6d98041de", "scanner": "scanner-primary", "fingerprint": "a958fc658602e1d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/theme-rizom/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-349e65cbacd7ea93", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/ui-library/package.json"}, "properties": {"repobilityId": "9d011a611839732f", "scanner": "scanner-primary", "fingerprint": "349e65cbacd7ea93", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/ui-library/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-76ee637084139e40", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/email-contracts/package.json"}, "properties": {"repobilityId": "0f4c83edad2c4118", "scanner": "scanner-primary", "fingerprint": "76ee637084139e40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/email-contracts/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a6ce70b74498ae79", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/test-utils/package.json"}, "properties": {"repobilityId": "f9343aeba86e86cc", "scanner": "scanner-primary", "fingerprint": "a6ce70b74498ae79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/test-utils/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a4f1d3791f77ee3e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/product-site-content/package.json"}, "properties": {"repobilityId": "bbbf9cdbdd988a70", "scanner": "scanner-primary", "fingerprint": "a4f1d3791f77ee3e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/product-site-content/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a3c4b48708ebb4dd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/content-formatters/package.json"}, "properties": {"repobilityId": "201f396c94104ebb", "scanner": "scanner-primary", "fingerprint": "a3c4b48708ebb4dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/content-formatters/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ffe4f241a28d767f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/contracts/package.json"}, "properties": {"repobilityId": "172e81e8b1bfd965", "scanner": "scanner-primary", "fingerprint": "ffe4f241a28d767f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/contracts/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-479f4b699067d2f6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/deploy-support/package.json"}, "properties": {"repobilityId": "a376daaa4d709ffa", "scanner": "scanner-primary", "fingerprint": "479f4b699067d2f6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/deploy-support/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0cfab5cd80abdccb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/mcp-bridge/package.json"}, "properties": {"repobilityId": "eef3862e16fa4579", "scanner": "scanner-primary", "fingerprint": "0cfab5cd80abdccb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/mcp-bridge/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-721d5350719afb5a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shared/rizom-ui/package.json"}, "properties": {"repobilityId": "c2cb6b2511935e19", "scanner": "scanner-primary", "fingerprint": "721d5350719afb5a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shared/rizom-ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c66413096254e1ef", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: interfaces/mcp/package.json"}, "properties": {"repobilityId": "80a244439cfd9d4a", "scanner": "scanner-primary", "fingerprint": "c66413096254e1ef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "interfaces/mcp/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e27fa3671a7c8b43", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: interfaces/a2a/package.json"}, "properties": {"repobilityId": "8a2aaf7316700925", "scanner": "scanner-primary", "fingerprint": "e27fa3671a7c8b43", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "interfaces/a2a/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-66a0dd33fd8ed163", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: interfaces/discord/package.json"}, "properties": {"repobilityId": "a01b338ecd3d045f", "scanner": "scanner-primary", "fingerprint": "66a0dd33fd8ed163", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "interfaces/discord/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5d95c11d488a00c1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: interfaces/web-chat/package.json"}, "properties": {"repobilityId": "50befe514f91c70a", "scanner": "scanner-primary", "fingerprint": "5d95c11d488a00c1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "interfaces/web-chat/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-67cd2774c745cf03", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: interfaces/webserver/package.json"}, "properties": {"repobilityId": "01827c3581b04ed7", "scanner": "scanner-primary", "fingerprint": "67cd2774c745cf03", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "interfaces/webserver/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d5e2e3a314338147", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: interfaces/chat-repl/package.json"}, "properties": {"repobilityId": "7fb36adfa0e0c603", "scanner": "scanner-primary", "fingerprint": "d5e2e3a314338147", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "interfaces/chat-repl/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-835288f4159f5751", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/brain-cli/package.json"}, "properties": {"repobilityId": "6c08f4081ea4174c", "scanner": "scanner-primary", "fingerprint": "835288f4159f5751", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cfe0d88643ef45cd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/site-author/package.json"}, "properties": {"repobilityId": "c8fc0e4820587872", "scanner": "scanner-primary", "fingerprint": "cfe0d88643ef45cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/test/fixtures/site-author/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fa56decfef42ea75", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/brain-definition/package.json"}, "properties": {"repobilityId": "9ab068891fa3e35e", "scanner": "scanner-primary", "fingerprint": "fa56decfef42ea75", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/test/fixtures/brain-definition/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-29aa3c7b894b3315", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/brain-cli/test/fixtures/external-plugin/package.json"}, "properties": {"repobilityId": "a2c5cae236eab7b8", "scanner": "scanner-primary", "fingerprint": "29aa3c7b894b3315", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brain-cli/test/fixtures/external-plugin/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-96baac823e64a59d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/brains-ops/package.json"}, "properties": {"repobilityId": "4771475aa20960cb", "scanner": "scanner-primary", "fingerprint": "96baac823e64a59d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dee476e1ee7e391d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/brains-ops/templates/rover-pilot/package.json"}, "properties": {"repobilityId": "305f96e080275355", "scanner": "scanner-primary", "fingerprint": "dee476e1ee7e391d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/brains-ops/templates/rover-pilot/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-80bb86cc4d852a96", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/conversation-service/package.json"}, "properties": {"repobilityId": "b6cd212116b33df2", "scanner": "scanner-primary", "fingerprint": "80bb86cc4d852a96", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/conversation-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bbae57d69873f533", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/ai-evaluation/package.json"}, "properties": {"repobilityId": "abce4e3dbe171610", "scanner": "scanner-primary", "fingerprint": "bbae57d69873f533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/ai-evaluation/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d7b38906a3eb912f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/identity-service/package.json"}, "properties": {"repobilityId": "925639346cef424c", "scanner": "scanner-primary", "fingerprint": "d7b38906a3eb912f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/identity-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45de98c847467e7d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/messaging-service/package.json"}, "properties": {"repobilityId": "bd094438ab849879", "scanner": "scanner-primary", "fingerprint": "45de98c847467e7d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/messaging-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-84f55460f29ca83f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/job-queue/package.json"}, "properties": {"repobilityId": "57b130405341f8e1", "scanner": "scanner-primary", "fingerprint": "84f55460f29ca83f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/job-queue/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5ad291d28bed9520", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/app/package.json"}, "properties": {"repobilityId": "6717fc4a9408f2eb", "scanner": "scanner-primary", "fingerprint": "5ad291d28bed9520", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/app/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8d92e7adef9fada", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/auth-service/package.json"}, "properties": {"repobilityId": "697f1663df491f22", "scanner": "scanner-primary", "fingerprint": "e8d92e7adef9fada", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/auth-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fea1ff8c01c5c6dd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/templates/package.json"}, "properties": {"repobilityId": "84a42e106bc7a21f", "scanner": "scanner-primary", "fingerprint": "fea1ff8c01c5c6dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/templates/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7b4c5d4211c65fa3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/core/package.json"}, "properties": {"repobilityId": "591a9ad71997b82d", "scanner": "scanner-primary", "fingerprint": "7b4c5d4211c65fa3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-362ef863320821de", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/entity-service/package.json"}, "properties": {"repobilityId": "052bd77534947ffb", "scanner": "scanner-primary", "fingerprint": "362ef863320821de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/entity-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b2c715b1410ba163", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/content-service/package.json"}, "properties": {"repobilityId": "93e4b6f9c3a05fe2", "scanner": "scanner-primary", "fingerprint": "b2c715b1410ba163", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/content-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fd7cb76e646ec91e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/ai-service/package.json"}, "properties": {"repobilityId": "0b6f96803f529a49", "scanner": "scanner-primary", "fingerprint": "fd7cb76e646ec91e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/ai-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-97e485e80f1e18fe", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/mcp-service/package.json"}, "properties": {"repobilityId": "9ac8b07a3ea825a9", "scanner": "scanner-primary", "fingerprint": "97e485e80f1e18fe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/mcp-service/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fdbb2e882eab3feb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: shell/plugins/package.json"}, "properties": {"repobilityId": "55a101961951a915", "scanner": "scanner-primary", "fingerprint": "fdbb2e882eab3feb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "shell/plugins/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-224460ae84ac92fe", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/assessment/package.json"}, "properties": {"repobilityId": "737cf1b2ce88ce41", "scanner": "scanner-primary", "fingerprint": "224460ae84ac92fe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/assessment/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b1b7e1acf7e6881", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/blog/package.json"}, "properties": {"repobilityId": "c3bbef1a9dbb4b23", "scanner": "scanner-primary", "fingerprint": "1b1b7e1acf7e6881", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/blog/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b8b03623a645d530", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/prompt/package.json"}, "properties": {"repobilityId": "f14f513cc560b940", "scanner": "scanner-primary", "fingerprint": "b8b03623a645d530", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/prompt/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f4e00b89ffc7518d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/document/package.json"}, "properties": {"repobilityId": "2f0da747f4e35bba", "scanner": "scanner-primary", "fingerprint": "f4e00b89ffc7518d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/document/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bdbd528bf87828ef", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/decks/package.json"}, "properties": {"repobilityId": "c746d8e0777cbd38", "scanner": "scanner-primary", "fingerprint": "bdbd528bf87828ef", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/decks/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45a2c66f4cab9207", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/image/package.json"}, "properties": {"repobilityId": "ad8fd5c1a4a32376", "scanner": "scanner-primary", "fingerprint": "45a2c66f4cab9207", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/image/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-20c1145b2b7f837d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/agent-discovery/package.json"}, "properties": {"repobilityId": "fda7cab1b0723eaf", "scanner": "scanner-primary", "fingerprint": "20c1145b2b7f837d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/agent-discovery/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c5887899056ac9b5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/topics/package.json"}, "properties": {"repobilityId": "a6ac5f463b6596b0", "scanner": "scanner-primary", "fingerprint": "c5887899056ac9b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/topics/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3a86149e7699b7e4", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/conversation-memory/package.json"}, "properties": {"repobilityId": "b780306bd5f32ed0", "scanner": "scanner-primary", "fingerprint": "3a86149e7699b7e4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/conversation-memory/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-808103d75dbac6df", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/series/package.json"}, "properties": {"repobilityId": "22435455b8abe0c8", "scanner": "scanner-primary", "fingerprint": "808103d75dbac6df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/series/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3c1d2e41a97ee3ca", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/link/package.json"}, "properties": {"repobilityId": "6ed328809c72a84f", "scanner": "scanner-primary", "fingerprint": "3c1d2e41a97ee3ca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/link/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b0ca181266b0596", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/doc/package.json"}, "properties": {"repobilityId": "4d11f16568e0ade5", "scanner": "scanner-primary", "fingerprint": "1b0ca181266b0596", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/doc/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4302464d30d2d48e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/rizom-ecosystem/package.json"}, "properties": {"repobilityId": "2aef7799f8856a85", "scanner": "scanner-primary", "fingerprint": "4302464d30d2d48e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/rizom-ecosystem/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-429ea8784781db17", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/wishlist/package.json"}, "properties": {"repobilityId": "c68795579c4a9dd3", "scanner": "scanner-primary", "fingerprint": "429ea8784781db17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/wishlist/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9a1e014d592d74b1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/portfolio/package.json"}, "properties": {"repobilityId": "dd54bfaad5f4f850", "scanner": "scanner-primary", "fingerprint": "9a1e014d592d74b1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/portfolio/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-52663a42742f7c59", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/site-info/package.json"}, "properties": {"repobilityId": "011d6743aae9f0db", "scanner": "scanner-primary", "fingerprint": "52663a42742f7c59", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/site-info/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-401e4c8a99a1172d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/note/package.json"}, "properties": {"repobilityId": "97e6abbce5564779", "scanner": "scanner-primary", "fingerprint": "401e4c8a99a1172d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/note/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-617220156297a5a0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/newsletter/package.json"}, "properties": {"repobilityId": "94c2273e10458aea", "scanner": "scanner-primary", "fingerprint": "617220156297a5a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/newsletter/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c20938698881ae68", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/products/package.json"}, "properties": {"repobilityId": "fd639d9a7df49a9b", "scanner": "scanner-primary", "fingerprint": "c20938698881ae68", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/products/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-797f8cd82e38a8e0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: entities/social-media/package.json"}, "properties": {"repobilityId": "7796ae5142aaa55e", "scanner": "scanner-primary", "fingerprint": "797f8cd82e38a8e0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "entities/social-media/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ca64a7fdf75c15ee", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: sites/default/package.json"}, "properties": {"repobilityId": "57fde0a599a0618f", "scanner": "scanner-primary", "fingerprint": "ca64a7fdf75c15ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/default/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-108a19983cd5d532", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: sites/professional/package.json"}, "properties": {"repobilityId": "c53610a4ae112582", "scanner": "scanner-primary", "fingerprint": "108a19983cd5d532", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/professional/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d1632ab399862ec0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: sites/personal/package.json"}, "properties": {"repobilityId": "c0ba424c5bb3f374", "scanner": "scanner-primary", "fingerprint": "d1632ab399862ec0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/personal/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aed8f388a2d72c8b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: sites/rizom/package.json"}, "properties": {"repobilityId": "11eb28b8bdfec81a", "scanner": "scanner-primary", "fingerprint": "aed8f388a2d72c8b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/rizom/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f5cee5086bd5b7ea", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/hackmd/package.json"}, "properties": {"repobilityId": "cc4cdf700d680838", "scanner": "scanner-primary", "fingerprint": "f5cee5086bd5b7ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/hackmd/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-902d5ccad474aefa", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/notifications/package.json"}, "properties": {"repobilityId": "f8583d5dd74ce015", "scanner": "scanner-primary", "fingerprint": "902d5ccad474aefa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/notifications/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3510d0e189a4716e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/stock-photo/package.json"}, "properties": {"repobilityId": "fba9623f4d8832ee", "scanner": "scanner-primary", "fingerprint": "3510d0e189a4716e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/stock-photo/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a651e59835cd3228", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/analytics/package.json"}, "properties": {"repobilityId": "0d15d0929898c738", "scanner": "scanner-primary", "fingerprint": "a651e59835cd3228", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/analytics/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-07147a8a33276348", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/directory-sync/package.json"}, "properties": {"repobilityId": "29172c7dd56a770c", "scanner": "scanner-primary", "fingerprint": "07147a8a33276348", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/directory-sync/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bc868452182dfbd3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/atproto/package.json"}, "properties": {"repobilityId": "8c630c17a4a184b8", "scanner": "scanner-primary", "fingerprint": "bc868452182dfbd3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/atproto/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3bd72030a0b9ca95", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/notion/package.json"}, "properties": {"repobilityId": "34419cdb56a64eff", "scanner": "scanner-primary", "fingerprint": "3bd72030a0b9ca95", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/notion/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-34925b6d14a4c3e5", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/dashboard/package.json"}, "properties": {"repobilityId": "5fc03ea35864eecc", "scanner": "scanner-primary", "fingerprint": "34925b6d14a4c3e5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/dashboard/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e8e7baefb646d823", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/email-resend/package.json"}, "properties": {"repobilityId": "8553565557ca86ea", "scanner": "scanner-primary", "fingerprint": "e8e7baefb646d823", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/email-resend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-70f317bbb0db5afc", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/site-builder/package.json"}, "properties": {"repobilityId": "dd221d87ae026d60", "scanner": "scanner-primary", "fingerprint": "70f317bbb0db5afc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/site-builder/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5c1c02e4e9b87249", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/cms/package.json"}, "properties": {"repobilityId": "c0e3387504cf7a5c", "scanner": "scanner-primary", "fingerprint": "5c1c02e4e9b87249", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/cms/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-984d6915a1c0c80e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/examples/package.json"}, "properties": {"repobilityId": "d3d7f031f0e5f727", "scanner": "scanner-primary", "fingerprint": "984d6915a1c0c80e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/examples/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-90332be24f5893ce", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/site-content/package.json"}, "properties": {"repobilityId": "2f7f322312e065d6", "scanner": "scanner-primary", "fingerprint": "90332be24f5893ce", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/site-content/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e5cf037885ef2f54", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/atproto-registry/package.json"}, "properties": {"repobilityId": "a04f844f7ded08b8", "scanner": "scanner-primary", "fingerprint": "e5cf037885ef2f54", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/atproto-registry/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1e8678e717b16df3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/content-pipeline/package.json"}, "properties": {"repobilityId": "4d0e4bc7b100cada", "scanner": "scanner-primary", "fingerprint": "1e8678e717b16df3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/content-pipeline/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-21f3b0e6a9107308", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/newsletter/package.json"}, "properties": {"repobilityId": "59a10d45816875ee", "scanner": "scanner-primary", "fingerprint": "21f3b0e6a9107308", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/newsletter/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d8ccbefad9690403", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/obsidian-vault/package.json"}, "properties": {"repobilityId": "09a7ad44b088961b", "scanner": "scanner-primary", "fingerprint": "d8ccbefad9690403", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/obsidian-vault/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b0cb452084595d8f", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: plugins/buttondown/package.json"}, "properties": {"repobilityId": "4a6e5ac3ba6ef19d", "scanner": "scanner-primary", "fingerprint": "b0cb452084595d8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/buttondown/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "58462de7a697fa92", "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": "3fbfb37ef71b395b", "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": "080ef82b61e28f85", "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": "d9f68c4d6447cb10", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "60a7e0853f1cee13", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "ec2e7b253bbbbfb5", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cc824533a96c48e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 brains/relay/test/home-counts-datasource.test.ts:53"}, "properties": {"repobilityId": "62e7070bde82f327", "scanner": "scanner-primary", "fingerprint": "cc824533a96c48e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-657d08fed628f04c", "level": "none", "message": {"text": "Commented-code block (7 lines) in brains/relay/src/index.ts:198"}, "properties": {"repobilityId": "47f642e79b7a3dec", "scanner": "scanner-primary", "fingerprint": "657d08fed628f04c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f211f586b6ac0fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/media-page-composer/test/og-image.test.ts:45"}, "properties": {"repobilityId": "39a0bceffea6d1c5", "scanner": "scanner-primary", "fingerprint": "1f211f586b6ac0fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bcbd0435dadc62e3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/utils/src/http-utils.ts:22"}, "properties": {"repobilityId": "a1080195cd3b93b6", "scanner": "scanner-primary", "fingerprint": "bcbd0435dadc62e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1a0fe32b34b3a926", "level": "none", "message": {"text": "Commented-code block (12 lines) in shared/site-engine/test/route-registry.test.ts:213"}, "properties": {"repobilityId": "68caa8b7d93eedad", "scanner": "scanner-primary", "fingerprint": "1a0fe32b34b3a926", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a9f3674a9bcae392", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/ui-library/src/markdown-html.test.ts:7"}, "properties": {"repobilityId": "aded2d6368fe5860", "scanner": "scanner-primary", "fingerprint": "a9f3674a9bcae392", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3dcd8492b49c228", "level": "none", "message": {"text": "Commented-code block (5 lines) in shared/ui-library/src/OgCard.tsx:8"}, "properties": {"repobilityId": "f7338fe0896ab6cf", "scanner": "scanner-primary", "fingerprint": "c3dcd8492b49c228", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e0bf701c2f37de3", "level": "none", "message": {"text": "Commented-code block (6 lines) in shared/ui-library/src/markdown-html.ts:85"}, "properties": {"repobilityId": "606fff088ee002c6", "scanner": "scanner-primary", "fingerprint": "9e0bf701c2f37de3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cedba87af43c0ce8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/ui-library/src/NewsletterSignup.tsx:98"}, "properties": {"repobilityId": "aa0374401c471149", "scanner": "scanner-primary", "fingerprint": "cedba87af43c0ce8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87aa66c96da2df2f", "level": "none", "message": {"text": "Commented-code block (7 lines) in shared/deploy-support/src/index.ts:209"}, "properties": {"repobilityId": "b4bafb7e55459f58", "scanner": "scanner-primary", "fingerprint": "87aa66c96da2df2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-470666b23ab2c8fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/deploy-support/src/deploy-scripts/update-dns.ts:24"}, "properties": {"repobilityId": "5399fe75416fb0bc", "scanner": "scanner-primary", "fingerprint": "470666b23ab2c8fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-867d6e03544eb96d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shared/deploy-support/src/deploy-scripts/provision-server.ts:35"}, "properties": {"repobilityId": "1046c8f302b1567c", "scanner": "scanner-primary", "fingerprint": "867d6e03544eb96d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b50d351cb4fe1fe5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/mcp/test/transports/http-server.test.ts:69"}, "properties": {"repobilityId": "84fbd0444fc2c870", "scanner": "scanner-primary", "fingerprint": "b50d351cb4fe1fe5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d59c84e35f1bea3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/a2a/src/a2a-interface.ts:312"}, "properties": {"repobilityId": "07dd80b9ec045d31", "scanner": "scanner-primary", "fingerprint": "1d59c84e35f1bea3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b7bc5637a369efe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/discord/src/discord-interface.ts:49"}, "properties": {"repobilityId": "10258c47bca6388f", "scanner": "scanner-primary", "fingerprint": "8b7bc5637a369efe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-13c9bc065ab0c5c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in interfaces/webserver/test/server-manager.test.ts:421"}, "properties": {"repobilityId": "fcaa03c24cb03daa", "scanner": "scanner-primary", "fingerprint": "13c9bc065ab0c5c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-61726fcc05cc7d63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/webserver/test/server-manager.test.ts:64"}, "properties": {"repobilityId": "036016bd5481ecbc", "scanner": "scanner-primary", "fingerprint": "61726fcc05cc7d63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-71a25c1bbf1707bc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 interfaces/webserver/src/server-manager.ts:132"}, "properties": {"repobilityId": "a1eaafaa33461811", "scanner": "scanner-primary", "fingerprint": "71a25c1bbf1707bc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa5f3dc7199dd3de", "level": "none", "message": {"text": "Commented-code block (5 lines) in interfaces/webserver/src/webserver-interface.ts:35"}, "properties": {"repobilityId": "09a3d08385c123ff", "scanner": "scanner-primary", "fingerprint": "aa5f3dc7199dd3de", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-521b1021c1213d09", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/brain-cli/scripts/entrypoint.ts:71"}, "properties": {"repobilityId": "9dcc9e32b48d71bf", "scanner": "scanner-primary", "fingerprint": "521b1021c1213d09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-24719c48b7c71210", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/brain-cli/scripts/build.ts:120"}, "properties": {"repobilityId": "9292d4f1bb8e420a", "scanner": "scanner-primary", "fingerprint": "24719c48b7c71210", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22285f8dda6f7df5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brain-cli/templates/deploy/scripts/update-dns.ts:24"}, "properties": {"repobilityId": "eb104ee65362aaff", "scanner": "scanner-primary", "fingerprint": "22285f8dda6f7df5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5d5fac31f645ac94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brain-cli/templates/deploy/scripts/provision-server.ts:35"}, "properties": {"repobilityId": "154112a5559b6be4", "scanner": "scanner-primary", "fingerprint": "5d5fac31f645ac94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2daae95a562e6a71", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/brain-cli/src/lib/env-schema.ts:11"}, "properties": {"repobilityId": "8db6ddc1b4b97055", "scanner": "scanner-primary", "fingerprint": "2daae95a562e6a71", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f1ee2f513c28d0e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/update-dns.ts:24"}, "properties": {"repobilityId": "96f1314974d2afda", "scanner": "scanner-primary", "fingerprint": "f1ee2f513c28d0e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf8a8fd24ec60632", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/sync-content-repo.ts:80"}, "properties": {"repobilityId": "e3593f690f38b599", "scanner": "scanner-primary", "fingerprint": "bf8a8fd24ec60632", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-41b3fe632a125284", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/brains-ops/templates/rover-pilot/deploy/scripts/provision-server.ts:35"}, "properties": {"repobilityId": "2c4d1c212edb81ab", "scanner": "scanner-primary", "fingerprint": "41b3fe632a125284", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0d592e6b0557faa3", "level": "none", "message": {"text": "Commented-code block (5 lines) in shell/ai-evaluation/test/per-model-git-remote.test.ts:136"}, "properties": {"repobilityId": "366c158dd68d92d9", "scanner": "scanner-primary", "fingerprint": "0d592e6b0557faa3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88f344989bc27c58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shell/ai-evaluation/src/remote-agent-service.ts:106"}, "properties": {"repobilityId": "da928a139819b2e6", "scanner": "scanner-primary", "fingerprint": "88f344989bc27c58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf9f2e2965edf792", "level": "none", "message": {"text": "Commented-code block (6 lines) in shell/job-queue/src/job-queue-repository.ts:273"}, "properties": {"repobilityId": "45952d9edd88b22a", "scanner": "scanner-primary", "fingerprint": "bf9f2e2965edf792", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edec458aa3c12278", "level": "none", "message": {"text": "Commented-code block (5 lines) in shell/app/test/instance-overrides.test.ts:1172"}, "properties": {"repobilityId": "fd43c5630ddcbc1a", "scanner": "scanner-primary", "fingerprint": "edec458aa3c12278", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b233184e40b8088", "level": "note", "message": {"text": "Legacy-named symbol `setup_old` in shell/auth-service/test/auth-service.test.ts:705"}, "properties": {"repobilityId": "2fce9173a82cac0c", "scanner": "scanner-primary", "fingerprint": "9b233184e40b8088", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c498fabd41ba0c43", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shell/core/test/entity-datasource.test.ts:73"}, "properties": {"repobilityId": "ed26956f8c01effd", "scanner": "scanner-primary", "fingerprint": "c498fabd41ba0c43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5533d0f0df6e5496", "level": "none", "message": {"text": "Commented-code block (6 lines) in shell/content-service/src/content-service.ts:293"}, "properties": {"repobilityId": "237e15cda4fac222", "scanner": "scanner-primary", "fingerprint": "5533d0f0df6e5496", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8522e7968dd54c44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shell/content-service/src/content-service.ts:151"}, "properties": {"repobilityId": "5a9a641e2137998c", "scanner": "scanner-primary", "fingerprint": "8522e7968dd54c44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75265f429c89a561", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 shell/plugins/src/service/base-entity-datasource.ts:91"}, "properties": {"repobilityId": "65c78701cad1be06", "scanner": "scanner-primary", "fingerprint": "75265f429c89a561", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4b4d2c6afcdff181", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/rss-datasource.test.ts:91"}, "properties": {"repobilityId": "a3a440f65f8c5c85", "scanner": "scanner-primary", "fingerprint": "4b4d2c6afcdff181", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59041ea961b2fffb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/datasource.test.ts:74"}, "properties": {"repobilityId": "3c8c242f3502782c", "scanner": "scanner-primary", "fingerprint": "59041ea961b2fffb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3dc48c13b7e5a2d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/blog/test/attachments/printable-provider.test.ts:73"}, "properties": {"repobilityId": "1a3f80e96d414ef0", "scanner": "scanner-primary", "fingerprint": "3dc48c13b7e5a2d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6acdd7ef2a225e1", "level": "none", "message": {"text": "Commented-code block (5 lines) in entities/document/src/handlers/documentGenerationHandler.ts:411"}, "properties": {"repobilityId": "13f3ffb0d1234343", "scanner": "scanner-primary", "fingerprint": "d6acdd7ef2a225e1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b141141042667bb9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/datasource.test.ts:75"}, "properties": {"repobilityId": "01a66a87eb01f645", "scanner": "scanner-primary", "fingerprint": "b141141042667bb9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-701a216d4a01e9f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/attachments/carousel-provider.test.ts:98"}, "properties": {"repobilityId": "1cbad00aaea7ee8a", "scanner": "scanner-primary", "fingerprint": "701a216d4a01e9f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-041ae2518393e1f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/decks/test/attachments/og-image-provider.test.ts:62"}, "properties": {"repobilityId": "3328ab37de147aad", "scanner": "scanner-primary", "fingerprint": "041ae2518393e1f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f2f8cbb8e2f0f363", "level": "note", "message": {"text": "Legacy-named symbol `changedOld` in entities/agent-discovery/test/skill-deriver.test.ts:119"}, "properties": {"repobilityId": "7d994c9cd7d1e595", "scanner": "scanner-primary", "fingerprint": "f2f8cbb8e2f0f363", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9f47200c4d449e3e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/agent-discovery/test/datasource.test.ts:67"}, "properties": {"repobilityId": "7d03684e2f66d2d3", "scanner": "scanner-primary", "fingerprint": "9f47200c4d449e3e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fa5e330541e06075", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/agent-discovery/src/datasources/agent-datasource.ts:145"}, "properties": {"repobilityId": "0d6d78df09cb022f", "scanner": "scanner-primary", "fingerprint": "fa5e330541e06075", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91e8e798bc11f256", "level": "note", "message": {"text": "Legacy-named symbol `nLegacy` in entities/topics/test/atproto-projection.test.ts:12"}, "properties": {"repobilityId": "2e26e849e895a1ed", "scanner": "scanner-primary", "fingerprint": "91e8e798bc11f256", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ed387748123794cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/topics/test/datasources/topics-datasource.test.ts:40"}, "properties": {"repobilityId": "b0d299b285a10f78", "scanner": "scanner-primary", "fingerprint": "ed387748123794cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a5101d63b42d95d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/topics/src/datasources/topics-datasource.ts:82"}, "properties": {"repobilityId": "b6f73568ed9274eb", "scanner": "scanner-primary", "fingerprint": "a5101d63b42d95d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a4f1909f643d32e2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/conversation-memory/test/datasources/summary-datasource.test.ts:57"}, "properties": {"repobilityId": "64dcccd040ea261e", "scanner": "scanner-primary", "fingerprint": "a4f1909f643d32e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c0cefbb3e91863ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/test/datasource.test.ts:87"}, "properties": {"repobilityId": "65d07c4865b6046e", "scanner": "scanner-primary", "fingerprint": "c0cefbb3e91863ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ea70123e82a4721b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/plugin.ts:255"}, "properties": {"repobilityId": "c759af7ac65b3d32", "scanner": "scanner-primary", "fingerprint": "ea70123e82a4721b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f12d7730d269bed5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/lib/link-service.ts:123"}, "properties": {"repobilityId": "54f33cfe730826d5", "scanner": "scanner-primary", "fingerprint": "f12d7730d269bed5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1f1ce732f793420d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/lib/url-fetcher.ts:50"}, "properties": {"repobilityId": "bdff8bf7065c88f6", "scanner": "scanner-primary", "fingerprint": "1f1ce732f793420d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53d240880a16efc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/link/src/handlers/capture-handler.ts:128"}, "properties": {"repobilityId": "1e04485578433f5b", "scanner": "scanner-primary", "fingerprint": "53d240880a16efc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a791bba343d8513", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/datasource.test.ts:98"}, "properties": {"repobilityId": "096a3d3c912f8a82", "scanner": "scanner-primary", "fingerprint": "7a791bba343d8513", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0e849a61f7926b43", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/attachments/printable-provider.test.ts:65"}, "properties": {"repobilityId": "29862bd91947c47e", "scanner": "scanner-primary", "fingerprint": "0e849a61f7926b43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3bb9bcd1e108b09", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/portfolio/test/attachments/og-image-provider.test.ts:56"}, "properties": {"repobilityId": "d76cb29251e68776", "scanner": "scanner-primary", "fingerprint": "f3bb9bcd1e108b09", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-62c98ce0d264505b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/site-info/test/datasource.test.ts:20"}, "properties": {"repobilityId": "c9d85134df478d0a", "scanner": "scanner-primary", "fingerprint": "62c98ce0d264505b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3efeb6232ca4e834", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/newsletter/test/newsletter-datasource.test.ts:77"}, "properties": {"repobilityId": "36e74737554274cd", "scanner": "scanner-primary", "fingerprint": "3efeb6232ca4e834", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81187fd4048b92b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/products/test/attachments/printable-provider.test.ts:79"}, "properties": {"repobilityId": "a1f0eb4c9a77fa5b", "scanner": "scanner-primary", "fingerprint": "81187fd4048b92b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe063d02b47c32af", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/products/test/attachments/og-image-provider.test.ts:55"}, "properties": {"repobilityId": "61808d2dfc3ef711", "scanner": "scanner-primary", "fingerprint": "fe063d02b47c32af", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-84d43d1f3de3fba5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/test/datasource.test.ts:75"}, "properties": {"repobilityId": "05b4e59a959f883c", "scanner": "scanner-primary", "fingerprint": "84d43d1f3de3fba5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8be66e1ab9b9366e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/test/datasources/social-post-datasource.test.ts:42"}, "properties": {"repobilityId": "e9ce4dd9e56a3f44", "scanner": "scanner-primary", "fingerprint": "8be66e1ab9b9366e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edb5f780f8bef043", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 entities/social-media/src/lib/linkedin-client.ts:206"}, "properties": {"repobilityId": "9d7d8be9fc708c2d", "scanner": "scanner-primary", "fingerprint": "edb5f780f8bef043", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cec53d0f54cf9d40", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/analytics/src/lib/cloudflare-client.ts:140"}, "properties": {"repobilityId": "aca778f1d654dbc1", "scanner": "scanner-primary", "fingerprint": "cec53d0f54cf9d40", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7e463b2fb4797d63", "level": "note", "message": {"text": "Legacy-named symbol `nOld` in plugins/directory-sync/test/file-operations.test.ts:681"}, "properties": {"repobilityId": "0f367d3eccdcd55b", "scanner": "scanner-primary", "fingerprint": "7e463b2fb4797d63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-aa1c0cce271d272f", "level": "none", "message": {"text": "Commented-code block (6 lines) in plugins/directory-sync/test/startup-order-source-of-truth.test.ts:366"}, "properties": {"repobilityId": "c882c2fe24ff8110", "scanner": "scanner-primary", "fingerprint": "aa1c0cce271d272f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e85ba2c25f229410", "level": "none", "message": {"text": "Commented-code block (6 lines) in plugins/directory-sync/src/plugin.ts:93"}, "properties": {"repobilityId": "311b4f1f28990a58", "scanner": "scanner-primary", "fingerprint": "e85ba2c25f229410", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a46c19f66b492758", "level": "none", "message": {"text": "Commented-code block (5 lines) in plugins/directory-sync/src/lib/git-branch.ts:36"}, "properties": {"repobilityId": "b035c7864d858ad5", "scanner": "scanner-primary", "fingerprint": "a46c19f66b492758", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6cf7af551089c41c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/atproto/src/plugin.ts:498"}, "properties": {"repobilityId": "6d38c0d6c3b5333e", "scanner": "scanner-primary", "fingerprint": "6cf7af551089c41c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d02cd1cca5ce190a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/atproto/src/pds-client.ts:70"}, "properties": {"repobilityId": "9de788e2aa36a198", "scanner": "scanner-primary", "fingerprint": "d02cd1cca5ce190a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9530b2e2e47ee691", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 plugins/site-builder/test/unit/navigation-datasource.test.ts:63"}, "properties": {"repobilityId": "9e7788e9601bafc1", "scanner": "scanner-primary", "fingerprint": "9530b2e2e47ee691", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d28c72ad9c60db19", "level": "none", "message": {"text": "Commented-code block (5 lines) in plugins/examples/src/service-plugin-example.ts:184"}, "properties": {"repobilityId": "b3dfdbc44104f993", "scanner": "scanner-primary", "fingerprint": "d28c72ad9c60db19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c8db77a7bbc1381", "level": "none", "message": {"text": "Commented-code block (5 lines) in plugins/content-pipeline/src/publish-executor.ts:128"}, "properties": {"repobilityId": "d3f6d3fb9e05607a", "scanner": "scanner-primary", "fingerprint": "8c8db77a7bbc1381", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fa5af25316da646", "level": "note", "message": {"text": "16 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "e0919a3f6a45e8c2", "scanner": "scanner-primary", "fingerprint": "5fa5af25316da646", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-f8124033a340624d", "level": "error", "message": {"text": "Dangling fetch: GET http://attacker.example (shared/ui-library/src/markdown-html.test.ts:7)"}, "properties": {"repobilityId": "70b94f2d9ffda5c9", "scanner": "scanner-primary", "fingerprint": "f8124033a340624d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c835ba7ecd05b51f", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/sessions (interfaces/web-chat/ui-react/src/App.tsx:520)"}, "properties": {"repobilityId": "3484e16755c9f2bc", "scanner": "scanner-primary", "fingerprint": "c835ba7ecd05b51f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b759882edfa21d01", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/messages?id=${encodeURIComponent(nextConversationId)} (interfaces/web-chat/ui-react/src/App.tsx:570)"}, "properties": {"repobilityId": "283af23a2f95a3fc", "scanner": "scanner-primary", "fingerprint": "b759882edfa21d01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb4d6497ea7b0f0f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/chat/sessions?id=${encodeURIComponent(session.id)} (interfaces/web-chat/ui-react/src/App.tsx:711)"}, "properties": {"repobilityId": "fd0d755d7757bd89", "scanner": "scanner-primary", "fingerprint": "cb4d6497ea7b0f0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25d9197198faf7ae", "level": "error", "message": {"text": "Dangling fetch: PUT /api/chat/sessions/archive?id=${encodeURIComponent(session.id)} (interfaces/web-chat/ui-react/src/App.tsx:751)"}, "properties": {"repobilityId": "cd497bbb871e7cf2", "scanner": "scanner-primary", "fingerprint": "25d9197198faf7ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67502daf66555d81", "level": "error", "message": {"text": "Dangling fetch: GET /api/chat/jobs/status?id=${encodeURIComponent(pollingJobId)} (interfaces/web-chat/ui-react/src/ai-elements/data-parts.tsx:377)"}, "properties": {"repobilityId": "00cbcb59cf4e69cc", "scanner": "scanner-primary", "fingerprint": "67502daf66555d81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-004271730fdd2fff", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/orgs/${options.owner}/repos (packages/brains-ops/templates/rover-pilot/deploy/scripts/sync-content-repo.ts:92)"}, "properties": {"repobilityId": "1fc0b0829855ceb7", "scanner": "scanner-primary", "fingerprint": "004271730fdd2fff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-550e4eea05619bd0", "level": "error", "message": {"text": "Dangling fetch: POST https://github.com/login/oauth/access_token (plugins/cms/src/plugin.ts:437)"}, "properties": {"repobilityId": "f764c3ef33511164", "scanner": "scanner-primary", "fingerprint": "550e4eea05619bd0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d629914ba067c61c", "level": "error", "message": {"text": "Dangling fetch: POST /auth/cms-token (plugins/cms/src/plugin.ts:671)"}, "properties": {"repobilityId": "b6d22a956de25e13", "scanner": "scanner-primary", "fingerprint": "d629914ba067c61c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af1035abcb5e977b", "level": "error", "message": {"text": "Dangling fetch: POST /subscribers (plugins/buttondown/src/lib/buttondown-client.ts:163)"}, "properties": {"repobilityId": "ea51f297630cbb99", "scanner": "scanner-primary", "fingerprint": "af1035abcb5e977b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6b230bffed599479", "level": "error", "message": {"text": "Dangling fetch: DELETE /subscribers/${encodeURIComponent(email)} (plugins/buttondown/src/lib/buttondown-client.ts:191)"}, "properties": {"repobilityId": "d828465593a9a824", "scanner": "scanner-primary", "fingerprint": "6b230bffed599479", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2cf1ddc4e7c69386", "level": "error", "message": {"text": "Dangling fetch: POST /emails (plugins/buttondown/src/lib/buttondown-client.ts:241)"}, "properties": {"repobilityId": "68e6fae34c55c5b7", "scanner": "scanner-primary", "fingerprint": "2cf1ddc4e7c69386", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cd8975100183a770", "level": "error", "message": {"text": "Dangling fetch: GET /emails/${id} (plugins/buttondown/src/lib/buttondown-client.ts:251)"}, "properties": {"repobilityId": "44865364e37a0723", "scanner": "scanner-primary", "fingerprint": "cd8975100183a770", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fe1768fcd04c8fda", "level": "note", "message": {"text": "Unused endpoint: GET /a2a"}, "properties": {"repobilityId": "d4407b73e4a95397", "scanner": "scanner-primary", "fingerprint": "fe1768fcd04c8fda", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-19235a2ddf3ad7af", "level": "note", "message": {"text": "Unused endpoint: OPTIONS /a2a"}, "properties": {"repobilityId": "d6b1fc83c032a087", "scanner": "scanner-primary", "fingerprint": "19235a2ddf3ad7af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c43b20b8464b26d9", "level": "note", "message": {"text": "Unused endpoint: POST /a2a"}, "properties": {"repobilityId": "4bcf49ee00fa949e", "scanner": "scanner-primary", "fingerprint": "c43b20b8464b26d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3abf952b8d28d710", "level": "note", "message": {"text": "Unused endpoint: USE /*"}, "properties": {"repobilityId": "1d1965971578cbd5", "scanner": "scanner-primary", "fingerprint": "3abf952b8d28d710", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}