{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e8366b20001dce5", "name": "Stray `console.log` in TS/JS \u2014 populateLibraries.ts:93", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 populateLibraries.ts:93"}, "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-25c0ff73485aa087", "name": "Stray `console.log` in TS/JS \u2014 plugins/core/hooks/setupRemoteSession.ts:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 plugins/core/hooks/setupRemoteSession.ts:49"}, "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-d92b516b4065160d", "name": "Stray `console.log` in TS/JS \u2014 packages/util-ts/src/lib/strings/parseJson.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/util-ts/src/lib/strings/parseJson.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-269faee265b7015c", "name": "Stray `console.log` in TS/JS \u2014 packages/execution-context/examples/executionContext.ts:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/execution-context/examples/executionContext.ts:23"}, "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-ee432d9b94cca680", "name": "Stray `console.log` in TS/JS \u2014 packages/contract-core/examples/schemas.ts:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/contract-core/examples/schemas.ts:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5385281c12568093", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/myJob.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/myJob.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0ff18146dde4aac", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/registerJobsWithDependencies.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/registerJobsWithDependencies.ts:11"}, "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-78497affc38fa503", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/dailyReportJob.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/dailyReportJob.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb5d9d2d3a4fc8fc", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/sendEmailJob.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/sendEmailJob.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4cc01dd262d63c4b", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/smsJob.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/smsJob.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7a692d725393e9a", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/emailJob.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/emailJob.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-1dd119cfa72013ed", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/reportJob.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/reportJob.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-19af77a482cd3c80", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/processUserJob.ts:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/processUserJob.ts:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2772adad7ddc305", "name": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/cleanupJob.ts:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/cleanupJob.ts:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c489065ecf39e661", "name": "Stray `console.log` in TS/JS \u2014 packages/playwright-reporter-llm/src/lib/reporter.test.ts:614", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/playwright-reporter-llm/src/lib/reporter.test.ts:614"}, "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-df5f4ca6b141a9d9", "name": "Stray `console.log` in TS/JS \u2014 packages/playwright-reporter-llm/src/lib/internal/testResults.test.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/playwright-reporter-llm/src/lib/internal/testResults.test.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-22a8cb9dbd7ced5e", "name": "Stray `console.log` in TS/JS \u2014 packages/embedex/src/lib/embed.test.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/embedex/src/lib/embed.test.ts:11"}, "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-596d9707392d27e3", "name": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/sync.ts:65", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/sync.ts:65"}, "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-7c2a97f6efe0cb8d", "name": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/populateReadme.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/populateReadme.ts:32"}, "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-23d691954d301ddd", "name": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/execAndLog.ts:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/execAndLog.ts:25"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fe610f1594f71f4c", "name": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/build.ts:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/build.ts:21"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4e41be81d017c851", "name": "Stray `console.log` in TS/JS \u2014 packages/phone-number/src/lib/formatPhoneNumber.ts:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/phone-number/src/lib/formatPhoneNumber.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-d84bc7dff15b2dc3", "name": "Stray `console.log` in TS/JS \u2014 scripts/release.ts:51", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/release.ts:51"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2eaeed1942cb23ad", "name": "Stray `console.log` in TS/JS \u2014 scripts/syncPlugins.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/syncPlugins.ts:112"}, "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-e427674838548c26", "name": "Privileged port 256 in use", "shortDescription": {"text": "Privileged port 256 in use"}, "fullDescription": {"text": "Port 256 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-20132144fda2e2c4", "name": "Privileged port 48 in use", "shortDescription": {"text": "Privileged port 48 in use"}, "fullDescription": {"text": "Port 48 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-209a46a9c71741c3", "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-d19ce5a41f96e456", "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-4c69ccde82d3da61", "name": "Insecure pattern 'node_child_process' in plugins/core/hooks/setupRemoteSession.ts:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in plugins/core/hooks/setupRemoteSession.ts:7"}, "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-ca2b1544e923cb7c", "name": "Possible secret in packages/analytics/README.md", "shortDescription": {"text": "Possible secret in packages/analytics/README.md"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-bd0680abe24fb85c", "name": "Possible secret in packages/analytics/examples/analytics.ts", "shortDescription": {"text": "Possible secret in packages/analytics/examples/analytics.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-c829f4cbe227338f", "name": "Insecure pattern 'private_key_in_repo' in packages/notifications/src/lib/notificationClient.test.ts:1584", "shortDescription": {"text": "Insecure pattern 'private_key_in_repo' in packages/notifications/src/lib/notificationClient.test.ts:1584"}, "fullDescription": {"text": "Found a known-risky pattern (private_key_in_repo). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-f60c2e8ca94a6f5b", "name": "Insecure pattern 'node_child_process' in packages/clearance/src/safehouseClaudeProxyCli.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/clearance/src/safehouseClaudeProxyCli.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-636a16f33bfa84f0", "name": "Insecure pattern 'node_child_process' in packages/clearance/src/launcher.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/clearance/src/launcher.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-f26430bc97df3730", "name": "Insecure pattern 'node_child_process' in packages/clearance/src/safehouseWrapper.test.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/clearance/src/safehouseWrapper.test.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-eecde327494bec41", "name": "Insecure pattern 'node_child_process' in packages/ai-rules/scripts/execAndLog.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in packages/ai-rules/scripts/execAndLog.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-3386e8570beae9b3", "name": "Insecure pattern 'node_child_process' in scripts/release.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/release.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-ecd840fa99cd9cca", "name": "Insecure pattern 'node_child_process' in scripts/syncPlugins.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/syncPlugins.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-64192a3c67110d01", "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-3926af08ab1741de", "name": "Very large file: packages/notifications/src/lib/notificationClient.test.ts (1860 lines)", "shortDescription": {"text": "Very large file: packages/notifications/src/lib/notificationClient.test.ts (1860 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-a258d3df94c3199d", "name": "Node manifest has dependencies but no lockfile: packages/background-jobs-adapter/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/background-jobs-adapter/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eb3dd76e467bf34d", "name": "Node manifest has dependencies but no lockfile: packages/testing-core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/testing-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-925723211dd67c04", "name": "Node manifest has dependencies but no lockfile: packages/rules-engine/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/rules-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-f897fa05f0eae32b", "name": "Node manifest has dependencies but no lockfile: packages/util-ts/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/util-ts/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-9ac2431042ed108d", "name": "Node manifest has dependencies but no lockfile: packages/eslint-plugin/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/eslint-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-b9099c2fb21beb1e", "name": "Node manifest has dependencies but no lockfile: packages/execution-context/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/execution-context/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-07ff1b2abb50e6b0", "name": "Node manifest has dependencies but no lockfile: packages/contract-core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/contract-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-a96a340ee2018da3", "name": "Node manifest has dependencies but no lockfile: packages/json-api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/json-api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8df2b3a3d2e19f24", "name": "Node manifest has dependencies but no lockfile: packages/nx-plugin/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/nx-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-26d7ef499a2d7544", "name": "Node manifest has dependencies but no lockfile: packages/mongo-jobs/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/mongo-jobs/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-70e2867d471d237d", "name": "Node manifest has dependencies but no lockfile: packages/example-nestjs/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/example-nestjs/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-d56407239754e223", "name": "Node manifest has dependencies but no lockfile: packages/playwright-reporter-llm/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/playwright-reporter-llm/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-95d55dd25357c15e", "name": "Node manifest has dependencies but no lockfile: packages/analytics/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/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-13d8362755ad51be", "name": "Node manifest has dependencies but no lockfile: packages/embedex/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/embedex/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-172dcdf252860fa6", "name": "Node manifest has dependencies but no lockfile: packages/notifications/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/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-1d02ecf89030ff78", "name": "Node manifest has dependencies but no lockfile: packages/clearance/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/clearance/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-b98fe037004e0676", "name": "Node manifest has dependencies but no lockfile: packages/json-api-nestjs/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/json-api-nestjs/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eddecaa766cadff2", "name": "Node manifest has dependencies but no lockfile: packages/config/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/config/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7437e815ca546b9e", "name": "Node manifest has dependencies but no lockfile: packages/phone-number/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/phone-number/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 56 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-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-256a68e21eb23031", "name": "Agent authority lacks a verifier contract: plugins/core/skills/flaky-test-debugger/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/flaky-test-debugger/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9216c7aad02d13d4", "name": "Agent authority lacks a verifier contract: plugins/core/skills/create-groundcrew-ticket/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/create-groundcrew-ticket/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2902f645e3f0961d", "name": "Agent authority lacks a verifier contract: plugins/core/skills/write-feature-ticket/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/write-feature-ticket/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6527dfe5144a9b7e", "name": "Agent authority lacks a verifier contract: plugins/core/skills/write-tech-debt-ticket/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/write-tech-debt-ticket/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a73ccd0c721ee128", "name": "Agent authority lacks a verifier contract: plugins/core/skills/commit-push-pr/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/commit-push-pr/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-26e529b72714307b", "name": "Agent authority lacks a verifier contract: plugins/core/skills/go/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/go/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c5632abd254b538", "name": "Agent authority lacks a verifier contract: plugins/core/skills/in-depth-review/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/in-depth-review/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60f7ddf2ce6657ee", "name": "Agent authority lacks a verifier contract: plugins/core/skills/write-bug-ticket/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/write-bug-ticket/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb3ff80561b95622", "name": "Agent authority lacks a verifier contract: plugins/core/skills/simple-review/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/simple-review/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-122f91b7f2906dc4", "name": "Agent authority lacks a verifier contract: .claude/settings.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1ba914bf9e780cfa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/util-ts/examples/tryCatchAsync.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/util-ts/examples/tryCatchAsync.ts:9"}, "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-e13e263ba30346e7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/util-ts/src/lib/functional/serviceResult.ts:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/util-ts/src/lib/functional/serviceResult.ts:100"}, "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-696d22655c6204e9", "name": "Commented-code block (12 lines) in packages/example-nestjs/examples/type-checks/filterTypeCheck.ts:9", "shortDescription": {"text": "Commented-code block (12 lines) in packages/example-nestjs/examples/type-checks/filterTypeCheck.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f89e79fae0825283", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/release.ts:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/release.ts:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25014"}, "properties": {"repository": "ClipboardHealth/core-utils", "repoUrl": "https://github.com/ClipboardHealth/core-utils", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-5e8366b20001dce5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 populateLibraries.ts:93"}, "properties": {"repobilityId": "5ee91792245538f2", "scanner": "scanner-primary", "fingerprint": "5e8366b20001dce5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25c0ff73485aa087", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 plugins/core/hooks/setupRemoteSession.ts:49"}, "properties": {"repobilityId": "9918068eb3f764a3", "scanner": "scanner-primary", "fingerprint": "25c0ff73485aa087", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d92b516b4065160d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/util-ts/src/lib/strings/parseJson.ts:13"}, "properties": {"repobilityId": "be95e97fbfe8517e", "scanner": "scanner-primary", "fingerprint": "d92b516b4065160d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-269faee265b7015c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/execution-context/examples/executionContext.ts:23"}, "properties": {"repobilityId": "fc4070e0387fa380", "scanner": "scanner-primary", "fingerprint": "269faee265b7015c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee432d9b94cca680", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/contract-core/examples/schemas.ts:42"}, "properties": {"repobilityId": "3c90ce609ae55674", "scanner": "scanner-primary", "fingerprint": "ee432d9b94cca680", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5385281c12568093", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/myJob.ts:19"}, "properties": {"repobilityId": "0d41730055082e1d", "scanner": "scanner-primary", "fingerprint": "5385281c12568093", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0ff18146dde4aac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/registerJobsWithDependencies.ts:11"}, "properties": {"repobilityId": "18f2295a19f05c9f", "scanner": "scanner-primary", "fingerprint": "c0ff18146dde4aac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78497affc38fa503", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/dailyReportJob.ts:13"}, "properties": {"repobilityId": "e725dc34a70c556c", "scanner": "scanner-primary", "fingerprint": "78497affc38fa503", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb5d9d2d3a4fc8fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/sendEmailJob.ts:14"}, "properties": {"repobilityId": "887c1aecb659dd24", "scanner": "scanner-primary", "fingerprint": "fb5d9d2d3a4fc8fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4cc01dd262d63c4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/smsJob.ts:14"}, "properties": {"repobilityId": "9b02084b6a2863d4", "scanner": "scanner-primary", "fingerprint": "4cc01dd262d63c4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7a692d725393e9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/emailJob.ts:15"}, "properties": {"repobilityId": "a444751ce5b0223c", "scanner": "scanner-primary", "fingerprint": "c7a692d725393e9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1dd119cfa72013ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/reportJob.ts:14"}, "properties": {"repobilityId": "83dd7822c87d3f22", "scanner": "scanner-primary", "fingerprint": "1dd119cfa72013ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-19af77a482cd3c80", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/processUserJob.ts:13"}, "properties": {"repobilityId": "ca159606f73df5c0", "scanner": "scanner-primary", "fingerprint": "19af77a482cd3c80", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2772adad7ddc305", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/mongo-jobs/examples/usage/jobs/cleanupJob.ts:14"}, "properties": {"repobilityId": "19fa753d63ab5f24", "scanner": "scanner-primary", "fingerprint": "e2772adad7ddc305", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c489065ecf39e661", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/playwright-reporter-llm/src/lib/reporter.test.ts:614"}, "properties": {"repobilityId": "70f265c93162e2c8", "scanner": "scanner-primary", "fingerprint": "c489065ecf39e661", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df5f4ca6b141a9d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/playwright-reporter-llm/src/lib/internal/testResults.test.ts:71"}, "properties": {"repobilityId": "3e9bc642dfe15d69", "scanner": "scanner-primary", "fingerprint": "df5f4ca6b141a9d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22a8cb9dbd7ced5e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/embedex/src/lib/embed.test.ts:11"}, "properties": {"repobilityId": "232ebf09d437a443", "scanner": "scanner-primary", "fingerprint": "22a8cb9dbd7ced5e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-596d9707392d27e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/sync.ts:65"}, "properties": {"repobilityId": "cc72fe76b4676ead", "scanner": "scanner-primary", "fingerprint": "596d9707392d27e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c2a97f6efe0cb8d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/populateReadme.ts:32"}, "properties": {"repobilityId": "234d85c40b8e5657", "scanner": "scanner-primary", "fingerprint": "7c2a97f6efe0cb8d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-23d691954d301ddd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/execAndLog.ts:25"}, "properties": {"repobilityId": "f8a3e36985d90471", "scanner": "scanner-primary", "fingerprint": "23d691954d301ddd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe610f1594f71f4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ai-rules/scripts/build.ts:21"}, "properties": {"repobilityId": "432b54603e3ce1b8", "scanner": "scanner-primary", "fingerprint": "fe610f1594f71f4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4e41be81d017c851", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/phone-number/src/lib/formatPhoneNumber.ts:28"}, "properties": {"repobilityId": "38db4b0b1eb3678a", "scanner": "scanner-primary", "fingerprint": "4e41be81d017c851", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d84bc7dff15b2dc3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/release.ts:51"}, "properties": {"repobilityId": "d820829d8215324e", "scanner": "scanner-primary", "fingerprint": "d84bc7dff15b2dc3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2eaeed1942cb23ad", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/syncPlugins.ts:112"}, "properties": {"repobilityId": "d82e54c4efece362", "scanner": "scanner-primary", "fingerprint": "2eaeed1942cb23ad", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e427674838548c26", "level": "warning", "message": {"text": "Privileged port 256 in use"}, "properties": {"repobilityId": "0ec1f2d0c9e6da94", "scanner": "scanner-primary", "fingerprint": "e427674838548c26", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker-compose.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-20132144fda2e2c4", "level": "warning", "message": {"text": "Privileged port 48 in use"}, "properties": {"repobilityId": "6a483602fa277896", "scanner": "scanner-primary", "fingerprint": "20132144fda2e2c4", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker-compose.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-209a46a9c71741c3", "level": "warning", "message": {"text": "Privileged port 19 in use"}, "properties": {"repobilityId": "a6b5b06deac36eac", "scanner": "scanner-primary", "fingerprint": "209a46a9c71741c3", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/clearance/src/launcher.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d19ce5a41f96e456", "level": "warning", "message": {"text": "Privileged port 20 in use"}, "properties": {"repobilityId": "a59f3e53d617e0f8", "scanner": "scanner-primary", "fingerprint": "d19ce5a41f96e456", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/clearance/src/index.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4c69ccde82d3da61", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in plugins/core/hooks/setupRemoteSession.ts:7"}, "properties": {"repobilityId": "7b792821b8805d38", "scanner": "scanner-primary", "fingerprint": "4c69ccde82d3da61", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/hooks/setupRemoteSession.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-ca2b1544e923cb7c", "level": "error", "message": {"text": "Possible secret in packages/analytics/README.md"}, "properties": {"repobilityId": "7e23151a7a18aa5e", "scanner": "scanner-primary", "fingerprint": "ca2b1544e923cb7c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/analytics/README.md"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-ca2b1544e923cb7c", "level": "error", "message": {"text": "Possible secret in packages/analytics/README.md"}, "properties": {"repobilityId": "7e23151a7a18aa5e", "scanner": "scanner-primary", "fingerprint": "ca2b1544e923cb7c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/analytics/README.md"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-bd0680abe24fb85c", "level": "error", "message": {"text": "Possible secret in packages/analytics/examples/analytics.ts"}, "properties": {"repobilityId": "a8c582927f15319f", "scanner": "scanner-primary", "fingerprint": "bd0680abe24fb85c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/analytics/examples/analytics.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-bd0680abe24fb85c", "level": "error", "message": {"text": "Possible secret in packages/analytics/examples/analytics.ts"}, "properties": {"repobilityId": "a8c582927f15319f", "scanner": "scanner-primary", "fingerprint": "bd0680abe24fb85c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/analytics/examples/analytics.ts"}, "region": {"startLine": 44}}}]}, {"ruleId": "scanner-c829f4cbe227338f", "level": "error", "message": {"text": "Insecure pattern 'private_key_in_repo' in packages/notifications/src/lib/notificationClient.test.ts:1584"}, "properties": {"repobilityId": "ad83cfe2ac6e3d65", "scanner": "scanner-primary", "fingerprint": "c829f4cbe227338f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["owasp", "private_key_in_repo"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/notifications/src/lib/notificationClient.test.ts"}, "region": {"startLine": 1584}}}]}, {"ruleId": "scanner-f60c2e8ca94a6f5b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/clearance/src/safehouseClaudeProxyCli.ts:2"}, "properties": {"repobilityId": "e16dc24951bf317a", "scanner": "scanner-primary", "fingerprint": "f60c2e8ca94a6f5b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/clearance/src/safehouseClaudeProxyCli.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-636a16f33bfa84f0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/clearance/src/launcher.ts:1"}, "properties": {"repobilityId": "130ae4d46bfc85b6", "scanner": "scanner-primary", "fingerprint": "636a16f33bfa84f0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/clearance/src/launcher.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f26430bc97df3730", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/clearance/src/safehouseWrapper.test.ts:1"}, "properties": {"repobilityId": "dbe199cf30451089", "scanner": "scanner-primary", "fingerprint": "f26430bc97df3730", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/clearance/src/safehouseWrapper.test.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eecde327494bec41", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in packages/ai-rules/scripts/execAndLog.ts:1"}, "properties": {"repobilityId": "3130e3d3678a2b66", "scanner": "scanner-primary", "fingerprint": "eecde327494bec41", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ai-rules/scripts/execAndLog.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3386e8570beae9b3", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/release.ts:11"}, "properties": {"repobilityId": "d59c31fdb7e68c42", "scanner": "scanner-primary", "fingerprint": "3386e8570beae9b3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/release.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-ecd840fa99cd9cca", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/syncPlugins.ts:1"}, "properties": {"repobilityId": "854851e461488284", "scanner": "scanner-primary", "fingerprint": "ecd840fa99cd9cca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/syncPlugins.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-64192a3c67110d01", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "87338a8bfcb6f435", "scanner": "scanner-primary", "fingerprint": "64192a3c67110d01", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "714673743ff59cef", "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-3926af08ab1741de", "level": "note", "message": {"text": "Very large file: packages/notifications/src/lib/notificationClient.test.ts (1860 lines)"}, "properties": {"repobilityId": "7c327abf9fb9ad52", "scanner": "scanner-primary", "fingerprint": "3926af08ab1741de", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a258d3df94c3199d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/background-jobs-adapter/package.json"}, "properties": {"repobilityId": "2bdfea3198ed54db", "scanner": "scanner-primary", "fingerprint": "a258d3df94c3199d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/background-jobs-adapter/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb3dd76e467bf34d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/testing-core/package.json"}, "properties": {"repobilityId": "9e4da6cf28ded2c4", "scanner": "scanner-primary", "fingerprint": "eb3dd76e467bf34d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/testing-core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-925723211dd67c04", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/rules-engine/package.json"}, "properties": {"repobilityId": "fcb7c2e7b4776f94", "scanner": "scanner-primary", "fingerprint": "925723211dd67c04", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/rules-engine/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f897fa05f0eae32b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/util-ts/package.json"}, "properties": {"repobilityId": "27b8cc164a6f60f5", "scanner": "scanner-primary", "fingerprint": "f897fa05f0eae32b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/util-ts/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9ac2431042ed108d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/eslint-plugin/package.json"}, "properties": {"repobilityId": "4eb2f7e8d5aaef4b", "scanner": "scanner-primary", "fingerprint": "9ac2431042ed108d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/eslint-plugin/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b9099c2fb21beb1e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/execution-context/package.json"}, "properties": {"repobilityId": "060e86ace46db771", "scanner": "scanner-primary", "fingerprint": "b9099c2fb21beb1e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/execution-context/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-07ff1b2abb50e6b0", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/contract-core/package.json"}, "properties": {"repobilityId": "a7384812783cf7ec", "scanner": "scanner-primary", "fingerprint": "07ff1b2abb50e6b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/contract-core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a96a340ee2018da3", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/json-api/package.json"}, "properties": {"repobilityId": "9c35e13e3a58c1e1", "scanner": "scanner-primary", "fingerprint": "a96a340ee2018da3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/json-api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8df2b3a3d2e19f24", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/nx-plugin/package.json"}, "properties": {"repobilityId": "9c0a48860380c918", "scanner": "scanner-primary", "fingerprint": "8df2b3a3d2e19f24", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/nx-plugin/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-26d7ef499a2d7544", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/mongo-jobs/package.json"}, "properties": {"repobilityId": "2f7d5d9e928f9573", "scanner": "scanner-primary", "fingerprint": "26d7ef499a2d7544", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/mongo-jobs/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-70e2867d471d237d", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/example-nestjs/package.json"}, "properties": {"repobilityId": "85997ed2574294df", "scanner": "scanner-primary", "fingerprint": "70e2867d471d237d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/example-nestjs/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d56407239754e223", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/playwright-reporter-llm/package.json"}, "properties": {"repobilityId": "44b5c82b4768671f", "scanner": "scanner-primary", "fingerprint": "d56407239754e223", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/playwright-reporter-llm/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-95d55dd25357c15e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/analytics/package.json"}, "properties": {"repobilityId": "45ff49581bf000e8", "scanner": "scanner-primary", "fingerprint": "95d55dd25357c15e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/analytics/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-13d8362755ad51be", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/embedex/package.json"}, "properties": {"repobilityId": "f2078529cff1f20c", "scanner": "scanner-primary", "fingerprint": "13d8362755ad51be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/embedex/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-172dcdf252860fa6", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/notifications/package.json"}, "properties": {"repobilityId": "6c88892cbe9bca9d", "scanner": "scanner-primary", "fingerprint": "172dcdf252860fa6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/notifications/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1d02ecf89030ff78", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/clearance/package.json"}, "properties": {"repobilityId": "c73e2800c6fa1a3f", "scanner": "scanner-primary", "fingerprint": "1d02ecf89030ff78", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/clearance/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b98fe037004e0676", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/json-api-nestjs/package.json"}, "properties": {"repobilityId": "bdd523ac5afc8906", "scanner": "scanner-primary", "fingerprint": "b98fe037004e0676", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/json-api-nestjs/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eddecaa766cadff2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/config/package.json"}, "properties": {"repobilityId": "03931bf3537e3eaf", "scanner": "scanner-primary", "fingerprint": "eddecaa766cadff2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/config/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7437e815ca546b9e", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/phone-number/package.json"}, "properties": {"repobilityId": "c97ec3fbf7ab0199", "scanner": "scanner-primary", "fingerprint": "7437e815ca546b9e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/phone-number/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "926d5208ad61e494", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "572d815d844d15be", "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": "54ab3e8eecd7169c", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-256a68e21eb23031", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/flaky-test-debugger/SKILL.md"}, "properties": {"repobilityId": "22625c11a110914c", "scanner": "scanner-primary", "fingerprint": "256a68e21eb23031", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/flaky-test-debugger/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9216c7aad02d13d4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/create-groundcrew-ticket/SKILL.md"}, "properties": {"repobilityId": "b709baa719f52c79", "scanner": "scanner-primary", "fingerprint": "9216c7aad02d13d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/create-groundcrew-ticket/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2902f645e3f0961d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/write-feature-ticket/SKILL.md"}, "properties": {"repobilityId": "5c4323cf2b7fa6f3", "scanner": "scanner-primary", "fingerprint": "2902f645e3f0961d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/write-feature-ticket/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6527dfe5144a9b7e", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/write-tech-debt-ticket/SKILL.md"}, "properties": {"repobilityId": "6690a360497b47a7", "scanner": "scanner-primary", "fingerprint": "6527dfe5144a9b7e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/write-tech-debt-ticket/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a73ccd0c721ee128", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/commit-push-pr/SKILL.md"}, "properties": {"repobilityId": "9a5bbd281dc1fad3", "scanner": "scanner-primary", "fingerprint": "a73ccd0c721ee128", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/commit-push-pr/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-26e529b72714307b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/go/SKILL.md"}, "properties": {"repobilityId": "d8c878c770601f42", "scanner": "scanner-primary", "fingerprint": "26e529b72714307b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/go/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0c5632abd254b538", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/in-depth-review/SKILL.md"}, "properties": {"repobilityId": "9fa38f669559096d", "scanner": "scanner-primary", "fingerprint": "0c5632abd254b538", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/in-depth-review/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-60f7ddf2ce6657ee", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/write-bug-ticket/SKILL.md"}, "properties": {"repobilityId": "b3388b12a3d3b217", "scanner": "scanner-primary", "fingerprint": "60f7ddf2ce6657ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/write-bug-ticket/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eb3ff80561b95622", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: plugins/core/skills/simple-review/SKILL.md"}, "properties": {"repobilityId": "6484ce1f517911cb", "scanner": "scanner-primary", "fingerprint": "eb3ff80561b95622", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "plugins/core/skills/simple-review/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-122f91b7f2906dc4", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.json"}, "properties": {"repobilityId": "a2967269048b6a9d", "scanner": "scanner-primary", "fingerprint": "122f91b7f2906dc4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1ba914bf9e780cfa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/util-ts/examples/tryCatchAsync.ts:9"}, "properties": {"repobilityId": "1e404b26511d8a5a", "scanner": "scanner-primary", "fingerprint": "1ba914bf9e780cfa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e13e263ba30346e7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/util-ts/src/lib/functional/serviceResult.ts:100"}, "properties": {"repobilityId": "b4cc13115c4532e6", "scanner": "scanner-primary", "fingerprint": "e13e263ba30346e7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-696d22655c6204e9", "level": "none", "message": {"text": "Commented-code block (12 lines) in packages/example-nestjs/examples/type-checks/filterTypeCheck.ts:9"}, "properties": {"repobilityId": "6168e936c4a5ec87", "scanner": "scanner-primary", "fingerprint": "696d22655c6204e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f89e79fae0825283", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/release.ts:104"}, "properties": {"repobilityId": "2cf80c7e639f0d1f", "scanner": "scanner-primary", "fingerprint": "f89e79fae0825283", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}