{"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-01345dd64f5ee4a2", "name": "Stray `console.log` in TS/JS \u2014 src/gateway/index.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/index.ts:39"}, "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-37acb968649941d5", "name": "Stray `console.log` in TS/JS \u2014 src/gateway/gateway.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/gateway.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-1a1157aaa4052d7c", "name": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/login.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/login.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-6030d4a8f578ae5b", "name": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/auth-store.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/auth-store.ts:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-949e6af282c10d55", "name": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/runtime.ts:58", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/runtime.ts:58"}, "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-3190bb0513c690e0", "name": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/inbound.ts:127", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/inbound.ts:127"}, "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-c098bd1f1f42eb42", "name": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/outbound.ts:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/outbound.ts:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d31492b3b1d66dc7", "name": "Insecure pattern 'exec_used' in src/memory/database.ts:17", "shortDescription": {"text": "Insecure pattern 'exec_used' in src/memory/database.ts:17"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b23ef9291681710", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/github-script@v7 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-088b626314ac553e", "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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "9 test file(s) for 181 source file(s) (ratio 0.05). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 33 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license. 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-032dbbd98078285b", "name": "Agent authority lacks a verifier contract: src/skills/x-research/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: src/skills/x-research/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-25e19b02fc19bdb5", "name": "Commented-code block (5 lines) in src/utils/markdown-table.ts:174", "shortDescription": {"text": "Commented-code block (5 lines) in src/utils/markdown-table.ts:174"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f3f5425a0892bdeb", "name": "Commented-code block (5 lines) in src/memory/indexer.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in src/memory/indexer.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9121e73ae266b24d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/finance/filings.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/finance/filings.ts:30"}, "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-15101a62c9547009", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/perplexity.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/perplexity.ts:30"}, "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-7f6085d33066e941", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/langsearch.ts:34", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/langsearch.ts:34"}, "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-9c1af7bc33753813", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/x-search.ts:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/x-search.ts:48"}, "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-8b49c0a913374628", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/fetch/utils.ts:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/fetch/utils.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-af5123a14d1ab7c2", "name": "Dangling fetch: GET https://api.financialdatasets.ai/filings/items/types/ (src/tools/finance/filings.ts:30)", "shortDescription": {"text": "Dangling fetch: GET https://api.financialdatasets.ai/filings/items/types/ (src/tools/finance/filings.ts:30)"}, "fullDescription": {"text": "`src/tools/finance/filings.ts:30` calls `GET https://api.financialdatasets.ai/filings/items/types/` 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.financialdatasets.ai/filings/items/types`\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-846e4350f03477a5", "name": "Unused endpoint: GET /insider-trades/", "shortDescription": {"text": "Unused endpoint: GET /insider-trades/"}, "fullDescription": {"text": "`src/tools/finance/insider_trades.ts` declares `GET /insider-trades/` 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-f22b2880ee0bfd44", "name": "Unused endpoint: GET /news", "shortDescription": {"text": "Unused endpoint: GET /news"}, "fullDescription": {"text": "`src/tools/finance/news.ts` declares `GET /news` 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-f352caeaff0c528d", "name": "Unused endpoint: GET /institutional-holdings/investors", "shortDescription": {"text": "Unused endpoint: GET /institutional-holdings/investors"}, "fullDescription": {"text": "`src/tools/finance/institutional_holdings.ts` declares `GET /institutional-holdings/investors` 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-9e5264df6e253259", "name": "Unused endpoint: GET /institutional-holdings/", "shortDescription": {"text": "Unused endpoint: GET /institutional-holdings/"}, "fullDescription": {"text": "`src/tools/finance/institutional_holdings.ts` declares `GET /institutional-holdings/` 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-4d07862f9ccc2020", "name": "Unused endpoint: GET /filings/", "shortDescription": {"text": "Unused endpoint: GET /filings/"}, "fullDescription": {"text": "`src/tools/finance/filings.ts` declares `GET /filings/` 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-f487e40fff5ad879", "name": "Unused endpoint: GET /filings/items/", "shortDescription": {"text": "Unused endpoint: GET /filings/items/"}, "fullDescription": {"text": "`src/tools/finance/filings.ts` declares `GET /filings/items/` 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-5158a6c760c394d2", "name": "Unused endpoint: GET /financials/search/screener/filters/", "shortDescription": {"text": "Unused endpoint: GET /financials/search/screener/filters/"}, "fullDescription": {"text": "`src/tools/finance/screen-stocks.ts` declares `GET /financials/search/screener/filters/` 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-4d1b9be0a2abf3e9", "name": "Unused endpoint: POST /financials/search/screener/", "shortDescription": {"text": "Unused endpoint: POST /financials/search/screener/"}, "fullDescription": {"text": "`src/tools/finance/screen-stocks.ts` declares `POST /financials/search/screener/` 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-6f96b9d385469ee7", "name": "Unused endpoint: GET /financial-metrics/snapshot/", "shortDescription": {"text": "Unused endpoint: GET /financial-metrics/snapshot/"}, "fullDescription": {"text": "`src/tools/finance/key-ratios.ts` declares `GET /financial-metrics/snapshot/` 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-15bf837e786cd3ef", "name": "Unused endpoint: GET /financial-metrics/", "shortDescription": {"text": "Unused endpoint: GET /financial-metrics/"}, "fullDescription": {"text": "`src/tools/finance/key-ratios.ts` declares `GET /financial-metrics/` 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-aab33e7e9bd7d80b", "name": "Unused endpoint: GET /financials/income-statements/", "shortDescription": {"text": "Unused endpoint: GET /financials/income-statements/"}, "fullDescription": {"text": "`src/tools/finance/fundamentals.ts` declares `GET /financials/income-statements/` 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-67a9ee07e48502f8", "name": "Unused endpoint: GET /financials/balance-sheets/", "shortDescription": {"text": "Unused endpoint: GET /financials/balance-sheets/"}, "fullDescription": {"text": "`src/tools/finance/fundamentals.ts` declares `GET /financials/balance-sheets/` 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-3534722fe957ce8b", "name": "Unused endpoint: GET /financials/cash-flow-statements/", "shortDescription": {"text": "Unused endpoint: GET /financials/cash-flow-statements/"}, "fullDescription": {"text": "`src/tools/finance/fundamentals.ts` declares `GET /financials/cash-flow-statements/` 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-56cc90c6e0ec4e15", "name": "Unused endpoint: GET /financials/", "shortDescription": {"text": "Unused endpoint: GET /financials/"}, "fullDescription": {"text": "`src/tools/finance/fundamentals.ts` declares `GET /financials/` 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-b34200d247e6be03", "name": "Unused endpoint: GET /prices/snapshot/", "shortDescription": {"text": "Unused endpoint: GET /prices/snapshot/"}, "fullDescription": {"text": "`src/tools/finance/stock-price.ts` declares `GET /prices/snapshot/` 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-e4c6284eaded2c78", "name": "Unused endpoint: GET /prices/", "shortDescription": {"text": "Unused endpoint: GET /prices/"}, "fullDescription": {"text": "`src/tools/finance/stock-price.ts` declares `GET /prices/` 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-d59ff0543f5dce2b", "name": "Unused endpoint: GET /prices/snapshot/tickers/", "shortDescription": {"text": "Unused endpoint: GET /prices/snapshot/tickers/"}, "fullDescription": {"text": "`src/tools/finance/stock-price.ts` declares `GET /prices/snapshot/tickers/` 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-77e861133601779b", "name": "Unused endpoint: GET /earnings", "shortDescription": {"text": "Unused endpoint: GET /earnings"}, "fullDescription": {"text": "`src/tools/finance/earnings.ts` declares `GET /earnings` 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-fed098fa61bc7559", "name": "Unused endpoint: GET /financials/segments/", "shortDescription": {"text": "Unused endpoint: GET /financials/segments/"}, "fullDescription": {"text": "`src/tools/finance/segments.ts` declares `GET /financials/segments/` 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-9420d7232d620ed8", "name": "Unused endpoint: GET /crypto/prices/snapshot/", "shortDescription": {"text": "Unused endpoint: GET /crypto/prices/snapshot/"}, "fullDescription": {"text": "`src/tools/finance/crypto.ts` declares `GET /crypto/prices/snapshot/` 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-657b24784aa5de39", "name": "Unused endpoint: GET /crypto/prices/", "shortDescription": {"text": "Unused endpoint: GET /crypto/prices/"}, "fullDescription": {"text": "`src/tools/finance/crypto.ts` declares `GET /crypto/prices/` 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-27312276e92d34f4", "name": "Unused endpoint: GET /crypto/prices/tickers/", "shortDescription": {"text": "Unused endpoint: GET /crypto/prices/tickers/"}, "fullDescription": {"text": "`src/tools/finance/crypto.ts` declares `GET /crypto/prices/tickers/` 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/22303"}, "properties": {"repository": "virattt/dexter", "repoUrl": "https://github.com/virattt/dexter", "branch": "main"}, "results": [{"ruleId": "scanner-01345dd64f5ee4a2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/index.ts:39"}, "properties": {"repobilityId": "1a7e6cde13c12229", "scanner": "scanner-primary", "fingerprint": "01345dd64f5ee4a2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-37acb968649941d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/gateway.ts:47"}, "properties": {"repobilityId": "959f34de27d00a3a", "scanner": "scanner-primary", "fingerprint": "37acb968649941d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a1157aaa4052d7c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/login.ts:34"}, "properties": {"repobilityId": "20330110302f3564", "scanner": "scanner-primary", "fingerprint": "1a1157aaa4052d7c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6030d4a8f578ae5b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/auth-store.ts:59"}, "properties": {"repobilityId": "3f393c67a70e9476", "scanner": "scanner-primary", "fingerprint": "6030d4a8f578ae5b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-949e6af282c10d55", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/runtime.ts:58"}, "properties": {"repobilityId": "338d67aa1e90c4d0", "scanner": "scanner-primary", "fingerprint": "949e6af282c10d55", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3190bb0513c690e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/inbound.ts:127"}, "properties": {"repobilityId": "622749fa2ff0c81c", "scanner": "scanner-primary", "fingerprint": "3190bb0513c690e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c098bd1f1f42eb42", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/gateway/channels/whatsapp/outbound.ts:109"}, "properties": {"repobilityId": "5cc5d4710f1e858a", "scanner": "scanner-primary", "fingerprint": "c098bd1f1f42eb42", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d31492b3b1d66dc7", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in src/memory/database.ts:17"}, "properties": {"repobilityId": "54434352b35d344f", "scanner": "scanner-primary", "fingerprint": "d31492b3b1d66dc7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/memory/database.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-8b23ef9291681710", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fee1751f26e547a1", "scanner": "scanner-primary", "fingerprint": "8b23ef9291681710", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/rebase-on-label.yml"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-8b23ef9291681710", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cdbd67ce3bb64fee", "scanner": "scanner-primary", "fingerprint": "8b23ef9291681710", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/rebase-on-label.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-8b23ef9291681710", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fee1751f26e547a1", "scanner": "scanner-primary", "fingerprint": "8b23ef9291681710", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/rebase-on-label.yml"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-8b23ef9291681710", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fee1751f26e547a1", "scanner": "scanner-primary", "fingerprint": "8b23ef9291681710", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/rebase-on-label.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-8b23ef9291681710", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "fee1751f26e547a1", "scanner": "scanner-primary", "fingerprint": "8b23ef9291681710", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/rebase-on-label.yml"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-088b626314ac553e", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "54a208a757e0bca4", "scanner": "scanner-primary", "fingerprint": "088b626314ac553e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/rebase-on-label.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "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-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "91ae1b1e0865ecea", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "34560ef27e68cd8e", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "1364ffa7b16c1b45", "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": "7a2842a341c31f7f", "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": "da11f22820cb7ffa", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-032dbbd98078285b", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: src/skills/x-research/SKILL.md"}, "properties": {"repobilityId": "3b4b24343d79fb83", "scanner": "scanner-primary", "fingerprint": "032dbbd98078285b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/skills/x-research/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-25e19b02fc19bdb5", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/utils/markdown-table.ts:174"}, "properties": {"repobilityId": "3312dee4dba2aee5", "scanner": "scanner-primary", "fingerprint": "25e19b02fc19bdb5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3f5425a0892bdeb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/memory/indexer.ts:45"}, "properties": {"repobilityId": "09c3469c8b53d3e0", "scanner": "scanner-primary", "fingerprint": "f3f5425a0892bdeb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9121e73ae266b24d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/finance/filings.ts:30"}, "properties": {"repobilityId": "3d07ea918c8086c5", "scanner": "scanner-primary", "fingerprint": "9121e73ae266b24d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-15101a62c9547009", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/perplexity.ts:30"}, "properties": {"repobilityId": "f688a2fe5ad4b382", "scanner": "scanner-primary", "fingerprint": "15101a62c9547009", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7f6085d33066e941", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/langsearch.ts:34"}, "properties": {"repobilityId": "af4f941d0336d130", "scanner": "scanner-primary", "fingerprint": "7f6085d33066e941", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9c1af7bc33753813", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/search/x-search.ts:48"}, "properties": {"repobilityId": "164a0bb4f1014494", "scanner": "scanner-primary", "fingerprint": "9c1af7bc33753813", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8b49c0a913374628", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/tools/fetch/utils.ts:67"}, "properties": {"repobilityId": "80525cc19f90bc61", "scanner": "scanner-primary", "fingerprint": "8b49c0a913374628", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af5123a14d1ab7c2", "level": "error", "message": {"text": "Dangling fetch: GET https://api.financialdatasets.ai/filings/items/types/ (src/tools/finance/filings.ts:30)"}, "properties": {"repobilityId": "d5989df85833e529", "scanner": "scanner-primary", "fingerprint": "af5123a14d1ab7c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-846e4350f03477a5", "level": "note", "message": {"text": "Unused endpoint: GET /insider-trades/"}, "properties": {"repobilityId": "099bb14f49b16737", "scanner": "scanner-primary", "fingerprint": "846e4350f03477a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f22b2880ee0bfd44", "level": "note", "message": {"text": "Unused endpoint: GET /news"}, "properties": {"repobilityId": "b77e250898881265", "scanner": "scanner-primary", "fingerprint": "f22b2880ee0bfd44", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f352caeaff0c528d", "level": "note", "message": {"text": "Unused endpoint: GET /institutional-holdings/investors"}, "properties": {"repobilityId": "69be955712e4ba05", "scanner": "scanner-primary", "fingerprint": "f352caeaff0c528d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e5264df6e253259", "level": "note", "message": {"text": "Unused endpoint: GET /institutional-holdings/"}, "properties": {"repobilityId": "3e80adb7802e7439", "scanner": "scanner-primary", "fingerprint": "9e5264df6e253259", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4d07862f9ccc2020", "level": "note", "message": {"text": "Unused endpoint: GET /filings/"}, "properties": {"repobilityId": "206528b1117b861c", "scanner": "scanner-primary", "fingerprint": "4d07862f9ccc2020", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f487e40fff5ad879", "level": "note", "message": {"text": "Unused endpoint: GET /filings/items/"}, "properties": {"repobilityId": "6bd4dc62d533bcb8", "scanner": "scanner-primary", "fingerprint": "f487e40fff5ad879", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5158a6c760c394d2", "level": "note", "message": {"text": "Unused endpoint: GET /financials/search/screener/filters/"}, "properties": {"repobilityId": "db25b084bff0e8cf", "scanner": "scanner-primary", "fingerprint": "5158a6c760c394d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4d1b9be0a2abf3e9", "level": "note", "message": {"text": "Unused endpoint: POST /financials/search/screener/"}, "properties": {"repobilityId": "97cc4b04dcc70e71", "scanner": "scanner-primary", "fingerprint": "4d1b9be0a2abf3e9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6f96b9d385469ee7", "level": "note", "message": {"text": "Unused endpoint: GET /financial-metrics/snapshot/"}, "properties": {"repobilityId": "3ee52dfb960233c1", "scanner": "scanner-primary", "fingerprint": "6f96b9d385469ee7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-15bf837e786cd3ef", "level": "note", "message": {"text": "Unused endpoint: GET /financial-metrics/"}, "properties": {"repobilityId": "e32b6f13ded42472", "scanner": "scanner-primary", "fingerprint": "15bf837e786cd3ef", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aab33e7e9bd7d80b", "level": "note", "message": {"text": "Unused endpoint: GET /financials/income-statements/"}, "properties": {"repobilityId": "f139e0ff8871c49a", "scanner": "scanner-primary", "fingerprint": "aab33e7e9bd7d80b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67a9ee07e48502f8", "level": "note", "message": {"text": "Unused endpoint: GET /financials/balance-sheets/"}, "properties": {"repobilityId": "7f9c1edefab5d96a", "scanner": "scanner-primary", "fingerprint": "67a9ee07e48502f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3534722fe957ce8b", "level": "note", "message": {"text": "Unused endpoint: GET /financials/cash-flow-statements/"}, "properties": {"repobilityId": "19f3208b05e5a773", "scanner": "scanner-primary", "fingerprint": "3534722fe957ce8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56cc90c6e0ec4e15", "level": "note", "message": {"text": "Unused endpoint: GET /financials/"}, "properties": {"repobilityId": "e9890c7ffff76704", "scanner": "scanner-primary", "fingerprint": "56cc90c6e0ec4e15", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b34200d247e6be03", "level": "note", "message": {"text": "Unused endpoint: GET /prices/snapshot/"}, "properties": {"repobilityId": "e06a538af8976b27", "scanner": "scanner-primary", "fingerprint": "b34200d247e6be03", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4c6284eaded2c78", "level": "note", "message": {"text": "Unused endpoint: GET /prices/"}, "properties": {"repobilityId": "b8ad25cb81dd5f4d", "scanner": "scanner-primary", "fingerprint": "e4c6284eaded2c78", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d59ff0543f5dce2b", "level": "note", "message": {"text": "Unused endpoint: GET /prices/snapshot/tickers/"}, "properties": {"repobilityId": "a369e3c4fb4d7c93", "scanner": "scanner-primary", "fingerprint": "d59ff0543f5dce2b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77e861133601779b", "level": "note", "message": {"text": "Unused endpoint: GET /earnings"}, "properties": {"repobilityId": "ca301a41db9b7526", "scanner": "scanner-primary", "fingerprint": "77e861133601779b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fed098fa61bc7559", "level": "note", "message": {"text": "Unused endpoint: GET /financials/segments/"}, "properties": {"repobilityId": "63e1c9e456b880ca", "scanner": "scanner-primary", "fingerprint": "fed098fa61bc7559", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9420d7232d620ed8", "level": "note", "message": {"text": "Unused endpoint: GET /crypto/prices/snapshot/"}, "properties": {"repobilityId": "afa62bc2a4622004", "scanner": "scanner-primary", "fingerprint": "9420d7232d620ed8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-657b24784aa5de39", "level": "note", "message": {"text": "Unused endpoint: GET /crypto/prices/"}, "properties": {"repobilityId": "862af70ff2ae48a1", "scanner": "scanner-primary", "fingerprint": "657b24784aa5de39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-27312276e92d34f4", "level": "note", "message": {"text": "Unused endpoint: GET /crypto/prices/tickers/"}, "properties": {"repobilityId": "8b427f1b847fccf6", "scanner": "scanner-primary", "fingerprint": "27312276e92d34f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}