{"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-1fc1528b4c071efb", "name": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/smoke-read.ts:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/smoke-read.ts:20"}, "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-50823b96611d2aab", "name": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/generate-test-wallet.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/generate-test-wallet.ts:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-edff4c126af4598b", "name": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/smoke-trade.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/smoke-trade.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47acc5e42d43b5cd", "name": "Stray `console.log` in TS/JS \u2014 apps/web/components/Hero.tsx:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/components/Hero.tsx:17"}, "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-733ad142ee422501", "name": "Insecure pattern 'cors_wildcard' in packages/mcp-server/src/index.ts:135", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in packages/mcp-server/src/index.ts:135"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-4d78f05db60d3c88", "name": "Node manifest has dependencies but no lockfile: packages/sdk-preview/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/sdk-preview/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2699d5f16ae11282", "name": "Node manifest has dependencies but no lockfile: packages/shared/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/shared/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6cf7d86f806aee43", "name": "Node manifest has dependencies but no lockfile: packages/mcp-server/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/mcp-server/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae014485ab255591", "name": "Node manifest has dependencies but no lockfile: packages/sdk/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/sdk/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b06b8d86f24c77f9", "name": "Node manifest has dependencies but no lockfile: apps/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 38 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a0c229146353aafe", "name": "Commented-code block (6 lines) in packages/mcp-server/src/index.ts:124", "shortDescription": {"text": "Commented-code block (6 lines) in packages/mcp-server/src/index.ts:124"}, "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-bab32fd80c9f152a", "name": "Commented-code block (5 lines) in packages/mcp-server/src/config.ts:65", "shortDescription": {"text": "Commented-code block (5 lines) in packages/mcp-server/src/config.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-d49766403b7d60b3", "name": "Commented-code block (6 lines) in packages/mcp-server/src/oauth.ts:61", "shortDescription": {"text": "Commented-code block (6 lines) in packages/mcp-server/src/oauth.ts:61"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53f4ba39453ef397", "name": "Commented-code block (6 lines) in apps/api/src/server.ts:88", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/server.ts:88"}, "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-25e2213a0d0236d0", "name": "Commented-code block (5 lines) in apps/api/src/helpers/verify.ts:51", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/helpers/verify.ts:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd30c14f47f4435b", "name": "Commented-code block (7 lines) in apps/api/src/helpers/builder.ts:79", "shortDescription": {"text": "Commented-code block (7 lines) in apps/api/src/helpers/builder.ts:79"}, "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-c4f32f3de3e744ee", "name": "Commented-code block (5 lines) in apps/api/src/routes/agent.ts:80", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/routes/agent.ts:80"}, "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-607653f647d0a5d5", "name": "Commented-code block (6 lines) in apps/api/src/routes/exchange.ts:46", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/routes/exchange.ts:46"}, "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-74a8751afb423cf4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/dashboard/page.tsx:411", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/dashboard/page.tsx:411"}, "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-afcf45702a4a18a2", "name": "Commented-code block (8 lines) in apps/web/app/oauth/authorize/page.tsx:229", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/app/oauth/authorize/page.tsx:229"}, "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-838f7d4db117590c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/oauth/authorize/page.tsx:164", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/oauth/authorize/page.tsx:164"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27bb175bdf5c940f", "name": "Commented-code block (5 lines) in apps/web/app/approve/page.tsx:83", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/approve/page.tsx:83"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b334d875f2339fa1", "name": "5 env vars used in code but missing from .env.example", "shortDescription": {"text": "5 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `HL_TESTNET_PRIVATE_KEY`, `NEXT_PUBLIC_MCP_URL`, `NODE_ENV`, `PK`, `TEST_WALLET_PK`. 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}}]}}, "automationDetails": {"id": "repobility/23856"}, "properties": {"repository": "abdulmanan-creator/alchemy-hyperliquid", "repoUrl": "https://github.com/abdulmanan-creator/alchemy-hyperliquid", "branch": "main"}, "results": [{"ruleId": "scanner-1fc1528b4c071efb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/smoke-read.ts:20"}, "properties": {"repobilityId": "73a6134103607b8a", "scanner": "scanner-primary", "fingerprint": "1fc1528b4c071efb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-50823b96611d2aab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/generate-test-wallet.ts:18"}, "properties": {"repobilityId": "43a4308e60ffbfb6", "scanner": "scanner-primary", "fingerprint": "50823b96611d2aab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-edff4c126af4598b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/sdk/scripts/smoke-trade.ts:27"}, "properties": {"repobilityId": "2be62c1425970e9e", "scanner": "scanner-primary", "fingerprint": "edff4c126af4598b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-47acc5e42d43b5cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/components/Hero.tsx:17"}, "properties": {"repobilityId": "3b2ea3abb09a9a72", "scanner": "scanner-primary", "fingerprint": "47acc5e42d43b5cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-733ad142ee422501", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in packages/mcp-server/src/index.ts:135"}, "properties": {"repobilityId": "4c5e0e03b36b5948", "scanner": "scanner-primary", "fingerprint": "733ad142ee422501", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/mcp-server/src/index.ts"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "46db4142b9afb34e", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-4d78f05db60d3c88", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/sdk-preview/package.json"}, "properties": {"repobilityId": "3aafb68cad5c5c0b", "scanner": "scanner-primary", "fingerprint": "4d78f05db60d3c88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/sdk-preview/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2699d5f16ae11282", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/shared/package.json"}, "properties": {"repobilityId": "37ac218a4ef9b430", "scanner": "scanner-primary", "fingerprint": "2699d5f16ae11282", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6cf7d86f806aee43", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/mcp-server/package.json"}, "properties": {"repobilityId": "a25c45fd100dcd3e", "scanner": "scanner-primary", "fingerprint": "6cf7d86f806aee43", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/mcp-server/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ae014485ab255591", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/sdk/package.json"}, "properties": {"repobilityId": "666cbe5826d686db", "scanner": "scanner-primary", "fingerprint": "ae014485ab255591", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/sdk/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b06b8d86f24c77f9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "properties": {"repobilityId": "ce77cd34ed0306d4", "scanner": "scanner-primary", "fingerprint": "b06b8d86f24c77f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b89235e601af346b", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "34c82658cff3714c", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "fc7f74293d7ebdbb", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-a0c229146353aafe", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/mcp-server/src/index.ts:124"}, "properties": {"repobilityId": "7ae35a2c064064ac", "scanner": "scanner-primary", "fingerprint": "a0c229146353aafe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bab32fd80c9f152a", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/mcp-server/src/config.ts:65"}, "properties": {"repobilityId": "f98a501906baae77", "scanner": "scanner-primary", "fingerprint": "bab32fd80c9f152a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d49766403b7d60b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/mcp-server/src/oauth.ts:61"}, "properties": {"repobilityId": "6b274efdb4660083", "scanner": "scanner-primary", "fingerprint": "d49766403b7d60b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53f4ba39453ef397", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/server.ts:88"}, "properties": {"repobilityId": "18413108f4bf01ee", "scanner": "scanner-primary", "fingerprint": "53f4ba39453ef397", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25e2213a0d0236d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/helpers/verify.ts:51"}, "properties": {"repobilityId": "e9497f02027f457b", "scanner": "scanner-primary", "fingerprint": "25e2213a0d0236d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd30c14f47f4435b", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/api/src/helpers/builder.ts:79"}, "properties": {"repobilityId": "6efdad2941ea4b8e", "scanner": "scanner-primary", "fingerprint": "dd30c14f47f4435b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4f32f3de3e744ee", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/routes/agent.ts:80"}, "properties": {"repobilityId": "0385fe2948d2ca5e", "scanner": "scanner-primary", "fingerprint": "c4f32f3de3e744ee", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-607653f647d0a5d5", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/routes/exchange.ts:46"}, "properties": {"repobilityId": "9bc160df224c3d13", "scanner": "scanner-primary", "fingerprint": "607653f647d0a5d5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-74a8751afb423cf4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/dashboard/page.tsx:411"}, "properties": {"repobilityId": "1456f5ad3816720e", "scanner": "scanner-primary", "fingerprint": "74a8751afb423cf4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-afcf45702a4a18a2", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/app/oauth/authorize/page.tsx:229"}, "properties": {"repobilityId": "10223f7a42b642df", "scanner": "scanner-primary", "fingerprint": "afcf45702a4a18a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-838f7d4db117590c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/oauth/authorize/page.tsx:164"}, "properties": {"repobilityId": "175e412a8de7b3c6", "scanner": "scanner-primary", "fingerprint": "838f7d4db117590c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-27bb175bdf5c940f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/approve/page.tsx:83"}, "properties": {"repobilityId": "df7049857c3c5b7e", "scanner": "scanner-primary", "fingerprint": "27bb175bdf5c940f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b334d875f2339fa1", "level": "note", "message": {"text": "5 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "faa38682016f5d53", "scanner": "scanner-primary", "fingerprint": "b334d875f2339fa1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}