{"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-95d59ab70ab6c05c", "name": "Stray `console.log` in TS/JS \u2014 archive/backend-hatchet/src/server.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 archive/backend-hatchet/src/server.ts:8"}, "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-61d0918c4b1fd3d3", "name": "Stray `console.log` in TS/JS \u2014 archive/backend-hatchet/src/engine.ts:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 archive/backend-hatchet/src/engine.ts:75"}, "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-60ab69fbc33cdc86", "name": "Stray `console.log` in TS/JS \u2014 archive/backend-restate/src/server.ts:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 archive/backend-restate/src/server.ts:8"}, "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-8e4af45ea1ed05fe", "name": "Stray `console.log` in TS/JS \u2014 archive/backend-restate/src/engine.ts:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 archive/backend-restate/src/engine.ts:98"}, "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-c0714e6db9912848", "name": "TODO/FIXME marker in shipping code \u2014 test/integration/workspace-store.test.ts:153", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 test/integration/workspace-store.test.ts:153"}, "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-16a49de54826ed07", "name": "TODO/FIXME marker in shipping code \u2014 test/unit/file-tools.test.ts:148", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 test/unit/file-tools.test.ts:148"}, "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-b24d3a58ac480f0d", "name": "Stray `console.log` in TS/JS \u2014 apps/auth/src/email.ts:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/auth/src/email.ts:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-822eba788be952e7", "name": "Stray `console.log` in TS/JS \u2014 apps/auth/src/server.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/auth/src/server.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e30c92ed8a27f05", "name": "Stray `console.log` in TS/JS \u2014 apps/auth/src/migrate.ts:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/auth/src/migrate.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-2bce3906997204d1", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/src/server.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/src/server.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6ba05032651b2b7", "name": "Stray `console.log` in TS/JS \u2014 apps/backend/src/engine.ts:208", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/src/engine.ts:208"}, "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-f5e5d4fd8f9e266b", "name": "Stray `console.log` in TS/JS \u2014 scripts/telegram-test.ts:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/telegram-test.ts:19"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7c6988f6682f7965", "name": "Stray `console.log` in TS/JS \u2014 scripts/dev.ts:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dev.ts:56"}, "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-0588718e8bdd0264", "name": "Stray `console.log` in TS/JS \u2014 scripts/chaos.ts:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/chaos.ts:35"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-732a1eddd29fbd4a", "name": "Stray `console.log` in TS/JS \u2014 scripts/mint-app-token.ts:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/mint-app-token.ts:62"}, "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-6c31b4658cb4e5a1", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/dev-server.ts:121", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/dev-server.ts:121"}, "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-8b22243f6003da5f", "name": "Stray `console.log` in TS/JS \u2014 packages/ui/src/build.ts:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/build.ts:40"}, "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-d5095ec364cb563d", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Debug.tsx:125", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Debug.tsx:125"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65c84c2f5eb4c315", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/RunInspector.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/RunInspector.tsx:359"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e7894e4210fd231f", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/SidePanels.tsx:85", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/SidePanels.tsx:85"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3975d99707f06d01", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/AgentsPanel.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/AgentsPanel.tsx:167"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35d93149605282ec", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/AuthPanel.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/AuthPanel.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a584259576735635", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Sidebar.tsx:72", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Sidebar.tsx:72"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-452edef95306232e", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Message.tsx:38", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Message.tsx:38"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-37e14f968d44eb00", "name": "Stray `console.log` in TS/JS \u2014 packages/core/src/llm/index.ts:110", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/core/src/llm/index.ts:110"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-238c33078c5904fe", "name": "Stray `console.log` in TS/JS \u2014 packages/sdk/src/cli.ts:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/sdk/src/cli.ts:105"}, "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-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc9d9425116dd2f6", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/auth/src/pages.ts:258", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/auth/src/pages.ts:258"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-946ab480e74d8357", "name": "Insecure pattern 'exec_used' in packages/core/src/workspace/exec.ts:41", "shortDescription": {"text": "Insecure pattern 'exec_used' in packages/core/src/workspace/exec.ts:41"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0cd2d188f60f6c61", "name": "Very large file: apps/backend/src/engine.ts (1425 lines)", "shortDescription": {"text": "Very large file: apps/backend/src/engine.ts (1425 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-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-29236857cd369b97", "name": "Node manifest has dependencies but no lockfile: archive/backend-hatchet/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: archive/backend-hatchet/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-3d66b7af41f007d2", "name": "Node manifest has dependencies but no lockfile: archive/backend-restate/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: archive/backend-restate/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-7002f88f207d84eb", "name": "Node manifest has dependencies but no lockfile: apps/auth/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/auth/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-53a7af2536f80bd8", "name": "Node manifest has dependencies but no lockfile: apps/backend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/backend/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-50218c90b43393bb", "name": "Node manifest has dependencies but no lockfile: packages/ui/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28e92806c0db3cd2", "name": "Node manifest has dependencies but no lockfile: packages/core/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea1d3c8bde4f4852", "name": "Node manifest has dependencies but no lockfile: packages/agent-web-builder/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/agent-web-builder/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f98ec3e2bc72946b", "name": "Node manifest has dependencies but no lockfile: packages/agent-kit/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/agent-kit/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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 50 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 18 placeholder/mock markers across 9 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, 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": "low", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39cd8e2b083bbb7c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 archive/backend-restate/src/engine.ts:181", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/backend-restate/src/engine.ts:181"}, "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-e41e4840e6f19544", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/sdk-deploy.test.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/sdk-deploy.test.ts:52"}, "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-3857e4100c3f7b30", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/multi-agent.test.ts:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/multi-agent.test.ts:68"}, "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-10b0f8a932a9a941", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/workspace-api.test.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/workspace-api.test.ts:37"}, "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-9b138c84bd5ea2cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/admin-agents.test.ts:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/admin-agents.test.ts:44"}, "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-f14e2b4f7057c1b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/controls.test.ts:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/controls.test.ts:86"}, "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-eaab5278a49f2750", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/debug-api.test.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/debug-api.test.ts:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7c6028231b6572ec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/exec-endpoint.test.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/exec-endpoint.test.ts:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb73e901bdbc808b", "name": "Commented-code block (5 lines) in test/integration/workspace-rebase.test.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in test/integration/workspace-rebase.test.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-c90b24e7da3bae4a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/session-delete.test.ts:219", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/session-delete.test.ts:219"}, "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-3beb50b75a0a6126", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/usage.test.ts:69", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/usage.test.ts:69"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f317c28f04990e0e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/agent-deploy.test.ts:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/agent-deploy.test.ts:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d6c9ecfb35f35f29", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/unit/gateway.test.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/unit/gateway.test.ts:27"}, "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-fcf9eb7b5ca2977e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/src/pages.ts:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/src/pages.ts:118"}, "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-a3ca9d326469e71f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/src/server.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/src/server.ts:13"}, "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-e36edca7811ebb7a", "name": "Commented-code block (5 lines) in apps/auth/src/migrate.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in apps/auth/src/migrate.ts:7"}, "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-cbbb65e7f2553954", "name": "Commented-code block (8 lines) in apps/backend/src/server.ts:60", "shortDescription": {"text": "Commented-code block (8 lines) in apps/backend/src/server.ts:60"}, "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-c4187d534c071c5b", "name": "Commented-code block (5 lines) in apps/backend/src/engine.ts:194", "shortDescription": {"text": "Commented-code block (5 lines) in apps/backend/src/engine.ts:194"}, "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-c8d6d20bf52af5fb", "name": "Commented-code block (6 lines) in packages/ui/src/dev-server.ts:193", "shortDescription": {"text": "Commented-code block (6 lines) in packages/ui/src/dev-server.ts:193"}, "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-9a5908934fda1ca6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ui/src/dev-server.ts:144", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ui/src/dev-server.ts:144"}, "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-364ebcb370a2d82a", "name": "Commented-code block (8 lines) in packages/ui/src/gateway.ts:175", "shortDescription": {"text": "Commented-code block (8 lines) in packages/ui/src/gateway.ts:175"}, "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-f0b31c6130ecbbec", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ui/src/web/lib/api.ts:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ui/src/web/lib/api.ts:62"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-da5eee0513e1219c", "name": "Commented-code block (5 lines) in packages/ui/src/web/hooks/useRun.ts:238", "shortDescription": {"text": "Commented-code block (5 lines) in packages/ui/src/web/hooks/useRun.ts:238"}, "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-b78d748efc337856", "name": "Commented-code block (6 lines) in packages/core/src/llm/index.ts:251", "shortDescription": {"text": "Commented-code block (6 lines) in packages/core/src/llm/index.ts:251"}, "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-cf648a92a1711f82", "name": "Commented-code block (7 lines) in packages/agent-web-builder/src/tools.ts:79", "shortDescription": {"text": "Commented-code block (7 lines) in packages/agent-web-builder/src/tools.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-8153a9c2ad10de16", "name": "Commented-code block (6 lines) in packages/agent-kit/src/loop.ts:91", "shortDescription": {"text": "Commented-code block (6 lines) in packages/agent-kit/src/loop.ts:91"}, "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-c4bc811c3ef62eaf", "name": "82 env vars used in code but missing from .env.example", "shortDescription": {"text": "82 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AGENT_API_AUDIENCE`, `AGENT_API_BASE`, `AGENT_API_KEY_FILE`, `AGENT_API_KID`, `AGENT_APP_ID`, `AGENT_AUDIENCE`, `AGENT_KID`, `ALERT_APP_DAILY_USD` + 74 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}}]}}, "automationDetails": {"id": "repobility/18360"}, "properties": {"repository": "rodms10/agent-infra", "repoUrl": "https://github.com/rodms10/agent-infra", "branch": "main"}, "results": [{"ruleId": "scanner-95d59ab70ab6c05c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 archive/backend-hatchet/src/server.ts:8"}, "properties": {"repobilityId": "5afaa954b172a75c", "scanner": "scanner-primary", "fingerprint": "95d59ab70ab6c05c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-61d0918c4b1fd3d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 archive/backend-hatchet/src/engine.ts:75"}, "properties": {"repobilityId": "6c3ccadbfb718936", "scanner": "scanner-primary", "fingerprint": "61d0918c4b1fd3d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-60ab69fbc33cdc86", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 archive/backend-restate/src/server.ts:8"}, "properties": {"repobilityId": "fbbba76e8ef5830d", "scanner": "scanner-primary", "fingerprint": "60ab69fbc33cdc86", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8e4af45ea1ed05fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 archive/backend-restate/src/engine.ts:98"}, "properties": {"repobilityId": "1b2116d8ae9ef119", "scanner": "scanner-primary", "fingerprint": "8e4af45ea1ed05fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0714e6db9912848", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 test/integration/workspace-store.test.ts:153"}, "properties": {"repobilityId": "06b2fb8f1f4e6371", "scanner": "scanner-primary", "fingerprint": "c0714e6db9912848", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-16a49de54826ed07", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 test/unit/file-tools.test.ts:148"}, "properties": {"repobilityId": "49f187ac7b78f773", "scanner": "scanner-primary", "fingerprint": "16a49de54826ed07", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b24d3a58ac480f0d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/auth/src/email.ts:37"}, "properties": {"repobilityId": "748be45f9b460880", "scanner": "scanner-primary", "fingerprint": "b24d3a58ac480f0d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-822eba788be952e7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/auth/src/server.ts:35"}, "properties": {"repobilityId": "230c2d81583978b8", "scanner": "scanner-primary", "fingerprint": "822eba788be952e7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e30c92ed8a27f05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/auth/src/migrate.ts:18"}, "properties": {"repobilityId": "c7f7539203939b00", "scanner": "scanner-primary", "fingerprint": "3e30c92ed8a27f05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2bce3906997204d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/src/server.ts:32"}, "properties": {"repobilityId": "28f83230fe2cab86", "scanner": "scanner-primary", "fingerprint": "2bce3906997204d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6ba05032651b2b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/backend/src/engine.ts:208"}, "properties": {"repobilityId": "a0aaa9e70fafc3c9", "scanner": "scanner-primary", "fingerprint": "e6ba05032651b2b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5e5d4fd8f9e266b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/telegram-test.ts:19"}, "properties": {"repobilityId": "d3850aa97982e8bd", "scanner": "scanner-primary", "fingerprint": "f5e5d4fd8f9e266b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c6988f6682f7965", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dev.ts:56"}, "properties": {"repobilityId": "b7c31b87fd1e1cc7", "scanner": "scanner-primary", "fingerprint": "7c6988f6682f7965", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0588718e8bdd0264", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/chaos.ts:35"}, "properties": {"repobilityId": "5846b30fbae6b369", "scanner": "scanner-primary", "fingerprint": "0588718e8bdd0264", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-732a1eddd29fbd4a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/mint-app-token.ts:62"}, "properties": {"repobilityId": "68dbf901a433535c", "scanner": "scanner-primary", "fingerprint": "732a1eddd29fbd4a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6c31b4658cb4e5a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/dev-server.ts:121"}, "properties": {"repobilityId": "055c17adee00f82b", "scanner": "scanner-primary", "fingerprint": "6c31b4658cb4e5a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8b22243f6003da5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/ui/src/build.ts:40"}, "properties": {"repobilityId": "6dd4556e20931738", "scanner": "scanner-primary", "fingerprint": "8b22243f6003da5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5095ec364cb563d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Debug.tsx:125"}, "properties": {"repobilityId": "09f32d579ad913dc", "scanner": "scanner-primary", "fingerprint": "d5095ec364cb563d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-65c84c2f5eb4c315", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/RunInspector.tsx:359"}, "properties": {"repobilityId": "83de3e0a8874a3a0", "scanner": "scanner-primary", "fingerprint": "65c84c2f5eb4c315", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e7894e4210fd231f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/SidePanels.tsx:85"}, "properties": {"repobilityId": "fae6209913116c1d", "scanner": "scanner-primary", "fingerprint": "e7894e4210fd231f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3975d99707f06d01", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/AgentsPanel.tsx:167"}, "properties": {"repobilityId": "3d85b01f4fa27514", "scanner": "scanner-primary", "fingerprint": "3975d99707f06d01", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-35d93149605282ec", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/AuthPanel.tsx:134"}, "properties": {"repobilityId": "65ba3a1ee25af15a", "scanner": "scanner-primary", "fingerprint": "35d93149605282ec", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a584259576735635", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Sidebar.tsx:72"}, "properties": {"repobilityId": "4cbf6e2c7b766639", "scanner": "scanner-primary", "fingerprint": "a584259576735635", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-452edef95306232e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/ui/src/web/components/Message.tsx:38"}, "properties": {"repobilityId": "47fa8bd8cdedf324", "scanner": "scanner-primary", "fingerprint": "452edef95306232e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-37e14f968d44eb00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/core/src/llm/index.ts:110"}, "properties": {"repobilityId": "9fcfd4164c3980fa", "scanner": "scanner-primary", "fingerprint": "37e14f968d44eb00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-238c33078c5904fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/sdk/src/cli.ts:105"}, "properties": {"repobilityId": "e752b1e8d0588c3e", "scanner": "scanner-primary", "fingerprint": "238c33078c5904fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-cc9d9425116dd2f6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/auth/src/pages.ts:258"}, "properties": {"repobilityId": "0dd5501bbaf4f22c", "scanner": "scanner-primary", "fingerprint": "cc9d9425116dd2f6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/auth/src/pages.ts"}, "region": {"startLine": 258}}}]}, {"ruleId": "scanner-946ab480e74d8357", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in packages/core/src/workspace/exec.ts:41"}, "properties": {"repobilityId": "0ac0b39998ea4203", "scanner": "scanner-primary", "fingerprint": "946ab480e74d8357", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/core/src/workspace/exec.ts"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-0cd2d188f60f6c61", "level": "note", "message": {"text": "Very large file: apps/backend/src/engine.ts (1425 lines)"}, "properties": {"repobilityId": "2d9dca1c400ea26a", "scanner": "scanner-primary", "fingerprint": "0cd2d188f60f6c61", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "dc1236e8a2ae8fc9", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-29236857cd369b97", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: archive/backend-hatchet/package.json"}, "properties": {"repobilityId": "ab231dced40803f6", "scanner": "scanner-primary", "fingerprint": "29236857cd369b97", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/backend-hatchet/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3d66b7af41f007d2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: archive/backend-restate/package.json"}, "properties": {"repobilityId": "6643a583e6f88e11", "scanner": "scanner-primary", "fingerprint": "3d66b7af41f007d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "archive/backend-restate/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7002f88f207d84eb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/auth/package.json"}, "properties": {"repobilityId": "355ed681ded92b27", "scanner": "scanner-primary", "fingerprint": "7002f88f207d84eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/auth/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-53a7af2536f80bd8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/backend/package.json"}, "properties": {"repobilityId": "637f248c83215574", "scanner": "scanner-primary", "fingerprint": "53a7af2536f80bd8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/backend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-50218c90b43393bb", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/ui/package.json"}, "properties": {"repobilityId": "637e26a8c754e81d", "scanner": "scanner-primary", "fingerprint": "50218c90b43393bb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/ui/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-28e92806c0db3cd2", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/core/package.json"}, "properties": {"repobilityId": "8640e46be7e3f9b2", "scanner": "scanner-primary", "fingerprint": "28e92806c0db3cd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/core/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ea1d3c8bde4f4852", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/agent-web-builder/package.json"}, "properties": {"repobilityId": "6f297b9c7952cf72", "scanner": "scanner-primary", "fingerprint": "ea1d3c8bde4f4852", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/agent-web-builder/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f98ec3e2bc72946b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/agent-kit/package.json"}, "properties": {"repobilityId": "24dcf292735152d1", "scanner": "scanner-primary", "fingerprint": "f98ec3e2bc72946b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/agent-kit/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-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "b812c640b4313fe2", "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": "c13059da7cd39be5", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "702693c79ed48e0d", "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": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "2f3a6132390e13d5", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "320d068c71c911d3", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "8c00a0fd41604271", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-39cd8e2b083bbb7c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 archive/backend-restate/src/engine.ts:181"}, "properties": {"repobilityId": "7cf310f53c4c7c48", "scanner": "scanner-primary", "fingerprint": "39cd8e2b083bbb7c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e41e4840e6f19544", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/sdk-deploy.test.ts:52"}, "properties": {"repobilityId": "9435001dba50ee84", "scanner": "scanner-primary", "fingerprint": "e41e4840e6f19544", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3857e4100c3f7b30", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/multi-agent.test.ts:68"}, "properties": {"repobilityId": "c1986b599c55f122", "scanner": "scanner-primary", "fingerprint": "3857e4100c3f7b30", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-10b0f8a932a9a941", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/workspace-api.test.ts:37"}, "properties": {"repobilityId": "813edf47ec91fd85", "scanner": "scanner-primary", "fingerprint": "10b0f8a932a9a941", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b138c84bd5ea2cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/admin-agents.test.ts:44"}, "properties": {"repobilityId": "12b30897296a2e22", "scanner": "scanner-primary", "fingerprint": "9b138c84bd5ea2cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f14e2b4f7057c1b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/controls.test.ts:86"}, "properties": {"repobilityId": "1dd82464c417aba1", "scanner": "scanner-primary", "fingerprint": "f14e2b4f7057c1b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eaab5278a49f2750", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/debug-api.test.ts:42"}, "properties": {"repobilityId": "8e2b241d1e6cc607", "scanner": "scanner-primary", "fingerprint": "eaab5278a49f2750", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7c6028231b6572ec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/exec-endpoint.test.ts:40"}, "properties": {"repobilityId": "19361dd71c88a639", "scanner": "scanner-primary", "fingerprint": "7c6028231b6572ec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cb73e901bdbc808b", "level": "none", "message": {"text": "Commented-code block (5 lines) in test/integration/workspace-rebase.test.ts:9"}, "properties": {"repobilityId": "bcfb1cbfab0066bf", "scanner": "scanner-primary", "fingerprint": "cb73e901bdbc808b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c90b24e7da3bae4a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/session-delete.test.ts:219"}, "properties": {"repobilityId": "fcae1db0eba70dff", "scanner": "scanner-primary", "fingerprint": "c90b24e7da3bae4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3beb50b75a0a6126", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/usage.test.ts:69"}, "properties": {"repobilityId": "8d227b9c9b9d8c4c", "scanner": "scanner-primary", "fingerprint": "3beb50b75a0a6126", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f317c28f04990e0e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/agent-deploy.test.ts:73"}, "properties": {"repobilityId": "b3880d2966a54dcf", "scanner": "scanner-primary", "fingerprint": "f317c28f04990e0e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6c9ecfb35f35f29", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/unit/gateway.test.ts:27"}, "properties": {"repobilityId": "02aa33d60f6da641", "scanner": "scanner-primary", "fingerprint": "d6c9ecfb35f35f29", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fcf9eb7b5ca2977e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/src/pages.ts:118"}, "properties": {"repobilityId": "3c55bd66a3fa0524", "scanner": "scanner-primary", "fingerprint": "fcf9eb7b5ca2977e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a3ca9d326469e71f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/auth/src/server.ts:13"}, "properties": {"repobilityId": "6c1bcf52f48d0762", "scanner": "scanner-primary", "fingerprint": "a3ca9d326469e71f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e36edca7811ebb7a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/auth/src/migrate.ts:7"}, "properties": {"repobilityId": "e7cc3c17a4bd4163", "scanner": "scanner-primary", "fingerprint": "e36edca7811ebb7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cbbb65e7f2553954", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/backend/src/server.ts:60"}, "properties": {"repobilityId": "af332bf7098d0a69", "scanner": "scanner-primary", "fingerprint": "cbbb65e7f2553954", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4187d534c071c5b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/backend/src/engine.ts:194"}, "properties": {"repobilityId": "3c50c7b90b2b077d", "scanner": "scanner-primary", "fingerprint": "c4187d534c071c5b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c8d6d20bf52af5fb", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/ui/src/dev-server.ts:193"}, "properties": {"repobilityId": "ea426c421557a8e5", "scanner": "scanner-primary", "fingerprint": "c8d6d20bf52af5fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a5908934fda1ca6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ui/src/dev-server.ts:144"}, "properties": {"repobilityId": "6ac3efcdda299531", "scanner": "scanner-primary", "fingerprint": "9a5908934fda1ca6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-364ebcb370a2d82a", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/ui/src/gateway.ts:175"}, "properties": {"repobilityId": "941316577b5497bc", "scanner": "scanner-primary", "fingerprint": "364ebcb370a2d82a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0b31c6130ecbbec", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/ui/src/web/lib/api.ts:62"}, "properties": {"repobilityId": "36f6808b3601c352", "scanner": "scanner-primary", "fingerprint": "f0b31c6130ecbbec", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da5eee0513e1219c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/ui/src/web/hooks/useRun.ts:238"}, "properties": {"repobilityId": "4eff130f4a3f9942", "scanner": "scanner-primary", "fingerprint": "da5eee0513e1219c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b78d748efc337856", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/core/src/llm/index.ts:251"}, "properties": {"repobilityId": "b2fadc1ef4f71ee5", "scanner": "scanner-primary", "fingerprint": "b78d748efc337856", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf648a92a1711f82", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/agent-web-builder/src/tools.ts:79"}, "properties": {"repobilityId": "509c7e50c4b917a7", "scanner": "scanner-primary", "fingerprint": "cf648a92a1711f82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8153a9c2ad10de16", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/agent-kit/src/loop.ts:91"}, "properties": {"repobilityId": "29f3239bb1ce5aef", "scanner": "scanner-primary", "fingerprint": "8153a9c2ad10de16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4bc811c3ef62eaf", "level": "note", "message": {"text": "82 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "519811e4a4c53094", "scanner": "scanner-primary", "fingerprint": "c4bc811c3ef62eaf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}