{"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-b1d9e1c39a110c39", "name": "Stray `console.log` in TS/JS \u2014 api/src/infra/logger.ts:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/src/infra/logger.ts:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afc8f4f57e800b27", "name": "TODO/FIXME marker in shipping code \u2014 api/src/routes/user-wallets.ts:172", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 api/src/routes/user-wallets.ts:172"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8c49f24a09cd77fd", "name": "Stray `console.log` in TS/JS \u2014 research/spike-doc-to-proposal/extract.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 research/spike-doc-to-proposal/extract.ts:162"}, "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-e30a9acfb10259af", "name": "Stray `console.log` in TS/JS \u2014 research/spike-magicblock/transfer-private.ts:219", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 research/spike-magicblock/transfer-private.ts:219"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bfd85c41ae464fb6", "name": "Stray `console.log` in TS/JS \u2014 research/spike-magicblock/check.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 research/spike-magicblock/check.ts:33"}, "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-18686ea2a54127da", "name": "Possible secret in api/src/api-contract.ts", "shortDescription": {"text": "Possible secret in api/src/api-contract.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-7fd3abf6627de7bc", "name": "Insecure pattern 'node_child_process' in api/src/payments/document-extract.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in api/src/payments/document-extract.ts:16"}, "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-e4b368828b1a063b", "name": "Insecure pattern 'node_child_process' in research/spike-doc-to-proposal/extract.ts:17", "shortDescription": {"text": "Insecure pattern 'node_child_process' in research/spike-doc-to-proposal/extract.ts:17"}, "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-8f4c232b4aa78fc9", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77166cbd46fcd8e4", "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-de53ac274e5b4ecf", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37716d9c0a33ad5c", "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-f7b2e47db5df4d32", "name": "Very large file: api/tests/control-plane.test.ts (2115 lines)", "shortDescription": {"text": "Very large file: api/tests/control-plane.test.ts (2115 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-3b40e15e98bc11be", "name": "Very large file: api/src/squads/treasury.ts (4691 lines)", "shortDescription": {"text": "Very large file: api/src/squads/treasury.ts (4691 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-f0861418efcad494", "name": "Very large file: frontend/src/pages/Payments.tsx (1427 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/Payments.tsx (1427 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-5942a163abb31c5a", "name": "Very large file: frontend/src/pages/TreasuryWalletDetail.tsx (2727 lines)", "shortDescription": {"text": "Very large file: frontend/src/pages/TreasuryWalletDetail.tsx (2727 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-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "6 test file(s) for 125 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 25 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 41 placeholder/mock markers across 15 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d725da1a9fd1375d", "name": "Commented-code block (7 lines) in api/src/solana.ts:188", "shortDescription": {"text": "Commented-code block (7 lines) in api/src/solana.ts:188"}, "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-7ba06217e7c3cb31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/wallets/personal.ts:9", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/wallets/personal.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-f7f7f783876c7f72", "name": "Commented-code block (5 lines) in api/src/payments/document-extract.ts:195", "shortDescription": {"text": "Commented-code block (5 lines) in api/src/payments/document-extract.ts:195"}, "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-dee4017ae4c10715", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/payments/document-extract.ts:273", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/payments/document-extract.ts:273"}, "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-2153a8b84a621124", "name": "Commented-code block (7 lines) in api/src/squads/shared.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in api/src/squads/shared.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-56e026120dd866d9", "name": "Commented-code block (7 lines) in api/src/squads/treasury.ts:1009", "shortDescription": {"text": "Commented-code block (7 lines) in api/src/squads/treasury.ts:1009"}, "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-43f159a9bf44697e", "name": "Commented-code block (5 lines) in api/src/squads/payment-markers.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in api/src/squads/payment-markers.ts:12"}, "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-771f37e4290c590c", "name": "Commented-code block (9 lines) in api/src/routes/user-wallets.ts:165", "shortDescription": {"text": "Commented-code block (9 lines) in api/src/routes/user-wallets.ts:165"}, "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-f0160267b0507d32", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/routes/auth.ts:526", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/routes/auth.ts:526"}, "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-1ac6d066812acd63", "name": "Legacy-named symbol `usdc_ops_v2` in frontend/src/api.ts:73", "shortDescription": {"text": "Legacy-named symbol `usdc_ops_v2` in frontend/src/api.ts:73"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d4e1be0be149e50d", "name": "Commented-code block (9 lines) in frontend/src/api.ts:288", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/api.ts:288"}, "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-4e0ca09399677001", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:130"}, "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-fc0125a030f44d62", "name": "Commented-code block (6 lines) in frontend/src/types.ts:1513", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/types.ts:1513"}, "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-3b2b3c94f1b1aa47", "name": "Commented-code block (6 lines) in frontend/src/ui-primitives.tsx:333", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/ui-primitives.tsx:333"}, "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-be62fe99d8a26d42", "name": "Commented-code block (5 lines) in frontend/src/pages/OrganizationProposals.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/OrganizationProposals.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bb4105945bc0ec5", "name": "Commented-code block (5 lines) in frontend/src/pages/auth.tsx:102", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/auth.tsx:102"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-190b847564fcb826", "name": "Commented-code block (5 lines) in frontend/src/pages/Landing.tsx:155", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/Landing.tsx:155"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-107f55e82c05638f", "name": "Commented-code block (5 lines) in frontend/src/pages/TreasuryWalletDetail.tsx:528", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/TreasuryWalletDetail.tsx:528"}, "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-bed894f598a42a0c", "name": "Commented-code block (9 lines) in frontend/src/pages/Wallets.tsx:427", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/pages/Wallets.tsx:427"}, "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-cc573ea9ffd66a08", "name": "Commented-code block (6 lines) in frontend/src/pages/Members.tsx:387", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/Members.tsx:387"}, "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-40ecb6468d47a636", "name": "Commented-code block (5 lines) in frontend/src/pages/Profile.tsx:730", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/Profile.tsx:730"}, "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-fe56766ccc266793", "name": "Commented-code block (5 lines) in frontend/src/pages/InviteAccept.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/InviteAccept.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0097ebc3ba85adfb", "name": "Commented-code block (7 lines) in frontend/src/pages/PaymentDetail.tsx:63", "shortDescription": {"text": "Commented-code block (7 lines) in frontend/src/pages/PaymentDetail.tsx:63"}, "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-2497e42bac4601dc", "name": "Commented-code block (5 lines) in frontend/src/pages/Collections.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/pages/Collections.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-88e6b6e4eb139c96", "name": "Commented-code block (6 lines) in frontend/src/pages/OrganizationProposalDetail.tsx:1", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/pages/OrganizationProposalDetail.tsx:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70ecb8e45f9eae02", "name": "Commented-code block (9 lines) in frontend/src/lib/squads-actions.ts:65", "shortDescription": {"text": "Commented-code block (9 lines) in frontend/src/lib/squads-actions.ts:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37a62041cfbd0d18", "name": "Commented-code block (5 lines) in frontend/src/lib/app.ts:104", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/src/lib/app.ts:104"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d5e36c4b557bece", "name": "Commented-code block (6 lines) in frontend/src/lib/settlement.ts:48", "shortDescription": {"text": "Commented-code block (6 lines) in frontend/src/lib/settlement.ts:48"}, "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-64d7096d360ba9d5", "name": "Commented-code block (5 lines) in research/spike-doc-to-proposal/extract.ts:24", "shortDescription": {"text": "Commented-code block (5 lines) in research/spike-doc-to-proposal/extract.ts:24"}, "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-cc0f9d8e41b33b0e", "name": "11 env vars used in code but missing from .env.example", "shortDescription": {"text": "11 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DECIMAL_API_CONFIG_PATH`, `DECIMAL_LOG_LEVEL`, `NODE_ENV`, `OPENROUTER_API_KEY`, `OPEN_ROUTER_API_KEY`, `SENDER_SECRET_KEY`, `SOLANA_AIRDROP_RPC_URL`, `SQUADS_DEFAULT_TIMELOCK_SECONDS` + 3 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a00527372d9f640b", "name": "Frontend route `/landing` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/landing` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ffaa471189a4003f", "name": "Frontend route `/oauth/callback` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/oauth/callback` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9baac30eb6dc7bc3", "name": "Frontend route `/invites/:inviteToken` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/invites/:inviteToken` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44b2efc860ac834d", "name": "Frontend route `/verify-email` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/verify-email` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b34f11f2d32f5147", "name": "Frontend route `/*` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-76467e35d9374cf7", "name": "Frontend route `/organizations/:organizationId` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc2168592e071f6a", "name": "Frontend route `/organizations/:organizationId/wallets` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/wallets` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-68bd86f483fd479a", "name": "Frontend route `/organizations/:organizationId/wallets/:treasuryWalletId` has no Link/navigate to it \u2014 frontend/src/App.", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/wallets/:treasuryWalletId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-daedfabc56b62b49", "name": "Frontend route `/organizations/:organizationId/vaults/:treasuryWalletId` has no Link/navigate to it \u2014 frontend/src/App.t", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/vaults/:treasuryWalletId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b47e62c8dd7f9e4a", "name": "Frontend route `/organizations/:organizationId/proposals` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/proposals` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6d57a700e56c0d7", "name": "Frontend route `/organizations/:organizationId/spending-limits` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/spending-limits` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0bc0d799bba8c7e1", "name": "Frontend route `/organizations/:organizationId/spending-limits/:spendingLimitPolicyId` has no Link/navigate to it \u2014 fron", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/spending-limits/:spendingLimitPolicyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-483e43128148cfae", "name": "Frontend route `/organizations/:organizationId/proposals/:decimalProposalId` has no Link/navigate to it \u2014 frontend/src/A", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/proposals/:decimalProposalId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a83408aacba09fd0", "name": "Frontend route `/organizations/:organizationId/proposals/:decimalProposalId/legacy` has no Link/navigate to it \u2014 fronten", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/proposals/:decimalProposalId/legacy` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f7030146dee5b9b", "name": "Frontend route `/organizations/:organizationId/members` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/members` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7edc8847f664b1a1", "name": "Frontend route `/organizations/:organizationId/counterparties` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/counterparties` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a92e47a5dea23cd7", "name": "Frontend route `/organizations/:organizationId/destinations` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/destinations` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e3e242f21da83fa5", "name": "Frontend route `/organizations/:organizationId/payments` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/payments` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7b036c944826fb1", "name": "Frontend route `/organizations/:organizationId/payments/:paymentOrderId` has no Link/navigate to it \u2014 frontend/src/App.t", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/payments/:paymentOrderId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-93169e601f12c8be", "name": "Frontend route `/organizations/:organizationId/collections` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/collections` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-347faa747049ecb4", "name": "Frontend route `/organizations/:organizationId/collections/:collectionRequestId` has no Link/navigate to it \u2014 frontend/s", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/collections/:collectionRequestId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f4c5abf0d4325e2", "name": "Frontend route `/organizations/:organizationId/collection-runs/:collectionRunId` has no Link/navigate to it \u2014 frontend/s", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/collection-runs/:collectionRunId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-707969d89480e548", "name": "Frontend route `/organizations/:organizationId/payers` has no Link/navigate to it \u2014 frontend/src/App.tsx", "shortDescription": {"text": "Frontend route `/organizations/:organizationId/payers` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "fullDescription": {"text": "The route is registered but no `<Link to=\u2026>` or `navigate(\u2026)` in the codebase navigates here. Either it's reachable only via direct URL (intentional), it's dead, or the link broke during a refactor."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25311"}, "properties": {"repository": "decimalfinance/decimal", "repoUrl": "https://github.com/decimalfinance/decimal", "branch": "main"}, "results": [{"ruleId": "scanner-b1d9e1c39a110c39", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/src/infra/logger.ts:87"}, "properties": {"repobilityId": "6d7cd396c68054f0", "scanner": "scanner-primary", "fingerprint": "b1d9e1c39a110c39", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afc8f4f57e800b27", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 api/src/routes/user-wallets.ts:172"}, "properties": {"repobilityId": "ea1d9a80eab3386f", "scanner": "scanner-primary", "fingerprint": "afc8f4f57e800b27", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-8c49f24a09cd77fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 research/spike-doc-to-proposal/extract.ts:162"}, "properties": {"repobilityId": "ae8f8a7e56d8542e", "scanner": "scanner-primary", "fingerprint": "8c49f24a09cd77fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e30a9acfb10259af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 research/spike-magicblock/transfer-private.ts:219"}, "properties": {"repobilityId": "8365472cfa4db679", "scanner": "scanner-primary", "fingerprint": "e30a9acfb10259af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bfd85c41ae464fb6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 research/spike-magicblock/check.ts:33"}, "properties": {"repobilityId": "f2f41e395ef32ac2", "scanner": "scanner-primary", "fingerprint": "bfd85c41ae464fb6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18686ea2a54127da", "level": "error", "message": {"text": "Possible secret in api/src/api-contract.ts"}, "properties": {"repobilityId": "54ec9b5347c7edb1", "scanner": "scanner-primary", "fingerprint": "18686ea2a54127da", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/src/api-contract.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-18686ea2a54127da", "level": "error", "message": {"text": "Possible secret in api/src/api-contract.ts"}, "properties": {"repobilityId": "54ec9b5347c7edb1", "scanner": "scanner-primary", "fingerprint": "18686ea2a54127da", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/src/api-contract.ts"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-7fd3abf6627de7bc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in api/src/payments/document-extract.ts:16"}, "properties": {"repobilityId": "bb8b00b84b6fffe7", "scanner": "scanner-primary", "fingerprint": "7fd3abf6627de7bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/src/payments/document-extract.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-e4b368828b1a063b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in research/spike-doc-to-proposal/extract.ts:17"}, "properties": {"repobilityId": "05219305636bfd06", "scanner": "scanner-primary", "fingerprint": "e4b368828b1a063b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "research/spike-doc-to-proposal/extract.ts"}, "region": {"startLine": 17}}}]}, {"ruleId": "scanner-8f4c232b4aa78fc9", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "979e3b58c19faf5e", "scanner": "scanner-primary", "fingerprint": "8f4c232b4aa78fc9", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-8f4c232b4aa78fc9", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7572d8d133564421", "scanner": "scanner-primary", "fingerprint": "8f4c232b4aa78fc9", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-77166cbd46fcd8e4", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "50f3b563ffac10e9", "scanner": "scanner-primary", "fingerprint": "77166cbd46fcd8e4", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude-code-review.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "02600186fc092bd4", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-de53ac274e5b4ecf", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8ead6a2c2bfe167b", "scanner": "scanner-primary", "fingerprint": "de53ac274e5b4ecf", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-37716d9c0a33ad5c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "abfb5752158cf655", "scanner": "scanner-primary", "fingerprint": "37716d9c0a33ad5c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/claude.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f7b2e47db5df4d32", "level": "note", "message": {"text": "Very large file: api/tests/control-plane.test.ts (2115 lines)"}, "properties": {"repobilityId": "7fa768b8e9a1cbd6", "scanner": "scanner-primary", "fingerprint": "f7b2e47db5df4d32", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3b40e15e98bc11be", "level": "note", "message": {"text": "Very large file: api/src/squads/treasury.ts (4691 lines)"}, "properties": {"repobilityId": "8222518a91bda7d6", "scanner": "scanner-primary", "fingerprint": "3b40e15e98bc11be", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f0861418efcad494", "level": "note", "message": {"text": "Very large file: frontend/src/pages/Payments.tsx (1427 lines)"}, "properties": {"repobilityId": "28c1178995c12174", "scanner": "scanner-primary", "fingerprint": "f0861418efcad494", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5942a163abb31c5a", "level": "note", "message": {"text": "Very large file: frontend/src/pages/TreasuryWalletDetail.tsx (2727 lines)"}, "properties": {"repobilityId": "49a961e4b851f6b5", "scanner": "scanner-primary", "fingerprint": "5942a163abb31c5a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"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": "c3d6245e5c7f4012", "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": "e3413a8f8fcd0315", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "0f977b150779746c", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "7a90898a86e9cb3d", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "0796ee01ac4e9d4a", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-d725da1a9fd1375d", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/src/solana.ts:188"}, "properties": {"repobilityId": "78f591c971bcd202", "scanner": "scanner-primary", "fingerprint": "d725da1a9fd1375d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ba06217e7c3cb31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/wallets/personal.ts:9"}, "properties": {"repobilityId": "36dfcbb81898f846", "scanner": "scanner-primary", "fingerprint": "7ba06217e7c3cb31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7f7f783876c7f72", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/src/payments/document-extract.ts:195"}, "properties": {"repobilityId": "8484e91db10f10f6", "scanner": "scanner-primary", "fingerprint": "f7f7f783876c7f72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dee4017ae4c10715", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/payments/document-extract.ts:273"}, "properties": {"repobilityId": "dfc03deef77fb166", "scanner": "scanner-primary", "fingerprint": "dee4017ae4c10715", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2153a8b84a621124", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/src/squads/shared.ts:9"}, "properties": {"repobilityId": "9c105a43a4456fc2", "scanner": "scanner-primary", "fingerprint": "2153a8b84a621124", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-56e026120dd866d9", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/src/squads/treasury.ts:1009"}, "properties": {"repobilityId": "8d1b3503dd227677", "scanner": "scanner-primary", "fingerprint": "56e026120dd866d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-43f159a9bf44697e", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/src/squads/payment-markers.ts:12"}, "properties": {"repobilityId": "532fc465bb6586cc", "scanner": "scanner-primary", "fingerprint": "43f159a9bf44697e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-771f37e4290c590c", "level": "none", "message": {"text": "Commented-code block (9 lines) in api/src/routes/user-wallets.ts:165"}, "properties": {"repobilityId": "54608b02e9da50df", "scanner": "scanner-primary", "fingerprint": "771f37e4290c590c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0160267b0507d32", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/src/routes/auth.ts:526"}, "properties": {"repobilityId": "fc32bd723273b00a", "scanner": "scanner-primary", "fingerprint": "f0160267b0507d32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ac6d066812acd63", "level": "note", "message": {"text": "Legacy-named symbol `usdc_ops_v2` in frontend/src/api.ts:73"}, "properties": {"repobilityId": "a58643da9a1d8cbf", "scanner": "scanner-primary", "fingerprint": "1ac6d066812acd63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d4e1be0be149e50d", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/api.ts:288"}, "properties": {"repobilityId": "cfdbbc8560c67f09", "scanner": "scanner-primary", "fingerprint": "d4e1be0be149e50d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e0ca09399677001", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/src/api.ts:130"}, "properties": {"repobilityId": "2bc773f31a3d1e04", "scanner": "scanner-primary", "fingerprint": "4e0ca09399677001", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc0125a030f44d62", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/types.ts:1513"}, "properties": {"repobilityId": "2a286ea62e3489f4", "scanner": "scanner-primary", "fingerprint": "fc0125a030f44d62", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3b2b3c94f1b1aa47", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/ui-primitives.tsx:333"}, "properties": {"repobilityId": "1053cbce6af6d1e0", "scanner": "scanner-primary", "fingerprint": "3b2b3c94f1b1aa47", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be62fe99d8a26d42", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/OrganizationProposals.tsx:1"}, "properties": {"repobilityId": "c31640b78d3c678f", "scanner": "scanner-primary", "fingerprint": "be62fe99d8a26d42", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7bb4105945bc0ec5", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/auth.tsx:102"}, "properties": {"repobilityId": "57a7c096d871fd4c", "scanner": "scanner-primary", "fingerprint": "7bb4105945bc0ec5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-190b847564fcb826", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/Landing.tsx:155"}, "properties": {"repobilityId": "6743df888181f9ea", "scanner": "scanner-primary", "fingerprint": "190b847564fcb826", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-107f55e82c05638f", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/TreasuryWalletDetail.tsx:528"}, "properties": {"repobilityId": "c07f447a09d1ef2d", "scanner": "scanner-primary", "fingerprint": "107f55e82c05638f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bed894f598a42a0c", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/pages/Wallets.tsx:427"}, "properties": {"repobilityId": "12ab6ae16f6f954a", "scanner": "scanner-primary", "fingerprint": "bed894f598a42a0c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc573ea9ffd66a08", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/Members.tsx:387"}, "properties": {"repobilityId": "bf9e7c05a1120176", "scanner": "scanner-primary", "fingerprint": "cc573ea9ffd66a08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40ecb6468d47a636", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/Profile.tsx:730"}, "properties": {"repobilityId": "9c8e7ba1a1b78653", "scanner": "scanner-primary", "fingerprint": "40ecb6468d47a636", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fe56766ccc266793", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/InviteAccept.tsx:1"}, "properties": {"repobilityId": "ce43faeda7ff2f5c", "scanner": "scanner-primary", "fingerprint": "fe56766ccc266793", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0097ebc3ba85adfb", "level": "none", "message": {"text": "Commented-code block (7 lines) in frontend/src/pages/PaymentDetail.tsx:63"}, "properties": {"repobilityId": "4cb3e17463af957e", "scanner": "scanner-primary", "fingerprint": "0097ebc3ba85adfb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2497e42bac4601dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/pages/Collections.tsx:1"}, "properties": {"repobilityId": "e7bffc5b0cb52eea", "scanner": "scanner-primary", "fingerprint": "2497e42bac4601dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-88e6b6e4eb139c96", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/pages/OrganizationProposalDetail.tsx:1"}, "properties": {"repobilityId": "948036f389592471", "scanner": "scanner-primary", "fingerprint": "88e6b6e4eb139c96", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70ecb8e45f9eae02", "level": "none", "message": {"text": "Commented-code block (9 lines) in frontend/src/lib/squads-actions.ts:65"}, "properties": {"repobilityId": "53cffa7318d0f17a", "scanner": "scanner-primary", "fingerprint": "70ecb8e45f9eae02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37a62041cfbd0d18", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/src/lib/app.ts:104"}, "properties": {"repobilityId": "cae03a5cbab0d929", "scanner": "scanner-primary", "fingerprint": "37a62041cfbd0d18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d5e36c4b557bece", "level": "none", "message": {"text": "Commented-code block (6 lines) in frontend/src/lib/settlement.ts:48"}, "properties": {"repobilityId": "0ab502dd0bfc15fb", "scanner": "scanner-primary", "fingerprint": "4d5e36c4b557bece", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64d7096d360ba9d5", "level": "none", "message": {"text": "Commented-code block (5 lines) in research/spike-doc-to-proposal/extract.ts:24"}, "properties": {"repobilityId": "368e69569864494f", "scanner": "scanner-primary", "fingerprint": "64d7096d360ba9d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc0f9d8e41b33b0e", "level": "note", "message": {"text": "11 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "c82cd8cd626c3599", "scanner": "scanner-primary", "fingerprint": "cc0f9d8e41b33b0e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-a00527372d9f640b", "level": "warning", "message": {"text": "Frontend route `/landing` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "a73a2d644d23793b", "scanner": "scanner-primary", "fingerprint": "a00527372d9f640b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-ffaa471189a4003f", "level": "warning", "message": {"text": "Frontend route `/oauth/callback` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "8d68502e382b80d8", "scanner": "scanner-primary", "fingerprint": "ffaa471189a4003f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-9baac30eb6dc7bc3", "level": "warning", "message": {"text": "Frontend route `/invites/:inviteToken` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "66f81afba856de6a", "scanner": "scanner-primary", "fingerprint": "9baac30eb6dc7bc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-44b2efc860ac834d", "level": "warning", "message": {"text": "Frontend route `/verify-email` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "b54db4ae31562492", "scanner": "scanner-primary", "fingerprint": "44b2efc860ac834d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b34f11f2d32f5147", "level": "warning", "message": {"text": "Frontend route `/*` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "d835e5716182bd15", "scanner": "scanner-primary", "fingerprint": "b34f11f2d32f5147", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-76467e35d9374cf7", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "2cf1a991a551c000", "scanner": "scanner-primary", "fingerprint": "76467e35d9374cf7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-cc2168592e071f6a", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/wallets` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "bd36c49962e1bd69", "scanner": "scanner-primary", "fingerprint": "cc2168592e071f6a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-68bd86f483fd479a", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/wallets/:treasuryWalletId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "0d5bf9b10143fff1", "scanner": "scanner-primary", "fingerprint": "68bd86f483fd479a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-daedfabc56b62b49", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/vaults/:treasuryWalletId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "9ee7f8bf81e5fb5f", "scanner": "scanner-primary", "fingerprint": "daedfabc56b62b49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b47e62c8dd7f9e4a", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/proposals` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "e30b67027d25522f", "scanner": "scanner-primary", "fingerprint": "b47e62c8dd7f9e4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-b6d57a700e56c0d7", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/spending-limits` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "93aee60aa3d71a1c", "scanner": "scanner-primary", "fingerprint": "b6d57a700e56c0d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-0bc0d799bba8c7e1", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/spending-limits/:spendingLimitPolicyId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "459f019cd1bf856a", "scanner": "scanner-primary", "fingerprint": "0bc0d799bba8c7e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-483e43128148cfae", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/proposals/:decimalProposalId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "64506f86f82df581", "scanner": "scanner-primary", "fingerprint": "483e43128148cfae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a83408aacba09fd0", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/proposals/:decimalProposalId/legacy` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "2fe7b8210462ea78", "scanner": "scanner-primary", "fingerprint": "a83408aacba09fd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-2f7030146dee5b9b", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/members` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "514bb594fd586722", "scanner": "scanner-primary", "fingerprint": "2f7030146dee5b9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-7edc8847f664b1a1", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/counterparties` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "e2b37bab3059a6bb", "scanner": "scanner-primary", "fingerprint": "7edc8847f664b1a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-a92e47a5dea23cd7", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/destinations` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "5ec1f01d4b9164e5", "scanner": "scanner-primary", "fingerprint": "a92e47a5dea23cd7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-e3e242f21da83fa5", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/payments` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "4ba800b541501f94", "scanner": "scanner-primary", "fingerprint": "e3e242f21da83fa5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-c7b036c944826fb1", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/payments/:paymentOrderId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "8092a6eece950dc9", "scanner": "scanner-primary", "fingerprint": "c7b036c944826fb1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-93169e601f12c8be", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/collections` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "03a5bfa217519aff", "scanner": "scanner-primary", "fingerprint": "93169e601f12c8be", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-347faa747049ecb4", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/collections/:collectionRequestId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "12fc92ca11baa3c6", "scanner": "scanner-primary", "fingerprint": "347faa747049ecb4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-4f4c5abf0d4325e2", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/collection-runs/:collectionRunId` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "cd1f29b56c604e9a", "scanner": "scanner-primary", "fingerprint": "4f4c5abf0d4325e2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}, {"ruleId": "scanner-707969d89480e548", "level": "warning", "message": {"text": "Frontend route `/organizations/:organizationId/payers` has no Link/navigate to it \u2014 frontend/src/App.tsx"}, "properties": {"repobilityId": "8bc44a11e8581d46", "scanner": "scanner-primary", "fingerprint": "707969d89480e548", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "orphan-page", "wiring"]}}]}]}