{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4d58ece902f00730", "name": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/notifications/push-device-section.tsx:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/notifications/push-device-section.tsx:74"}, "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-78fb286d3d803c4f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/puzzles/puzzle-card.tsx:52", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/puzzles/puzzle-card.tsx:52"}, "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-a05aa66d35894e2e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/common/user-profile/index.tsx:36", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/common/user-profile/index.tsx:36"}, "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-c92af2ad0c2ba714", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/emoji-picker.tsx:146", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/emoji-picker.tsx:146"}, "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-743694b79fa8977f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/chart.tsx:83", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/chart.tsx:83"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ef0eeb3766d31650", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/extension/tags-input.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/extension/tags-input.tsx:279"}, "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-16a6b9a188d759ae", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/user-footer.tsx:51", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/user-footer.tsx:51"}, "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-e574a6c10274d9c2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/command-palette.tsx:165", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/command-palette.tsx:165"}, "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-4882c1acf09832e5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/page-head.tsx:111", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/page-head.tsx:111"}, "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-1c2ed7a9d94aec80", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/top-bar.tsx:41", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/top-bar.tsx:41"}, "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-46121ae35834b7e0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/group-landing.tsx:36", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/group-landing.tsx:36"}, "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-5977ae43b1e56a39", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/marketing/home/feature-rows.tsx:189", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/marketing/home/feature-rows.tsx:189"}, "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-b06e214f1b9d91be", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/member-tile.tsx:58", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/member-tile.tsx:58"}, "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-8db5d5cf73120b71", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-home/pulse-section.tsx:221", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-home/pulse-section.tsx:221"}, "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-a96fd74f857a5afa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-home/section-head.tsx:35", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-home/section-head.tsx:35"}, "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-caf14311285bec79", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/trades.tsx:265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/trades.tsx:265"}, "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-c4d99c99b84eb041", "name": "TODO/FIXME marker in shipping code \u2014 apps/web/src/routes/_dashboard/browse.tsx:89", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/routes/_dashboard/browse.tsx:89"}, "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-9450c4fc51a1a37a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/puzzles/$id.tsx:372", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/puzzles/$id.tsx:372"}, "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-7a6659dac1a2cbac", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/collections/index.tsx:365", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/collections/index.tsx:365"}, "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-3bd88d64c7cb153a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/my-puzzles/add/new.tsx:358", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/my-puzzles/add/new.tsx:358"}, "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-85969b7f0ee026be", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/circles/index.tsx:210", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/circles/index.tsx:210"}, "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-4f7371f7c6cbed5f", "name": "Stray `console.log` in TS/JS \u2014 packages/backend/convex/http.ts:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/backend/convex/http.ts:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f32a18ede54e99cf", "name": "Stray `console.log` in TS/JS \u2014 packages/backend/convex/lib/logEvent.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 packages/backend/convex/lib/logEvent.ts:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52c68e90408e41ab", "name": "TODO/FIXME marker in shipping code \u2014 packages/domain/src/index.ts:9", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 packages/domain/src/index.ts:9"}, "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-42fe3d1908e96d05", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/chart.tsx:83", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/chart.tsx:83"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-697fb81af3878cd4", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/design-reference/add-puzzle/ui.jsx:14", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/design-reference/add-puzzle/ui.jsx:14"}, "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-f7df5a68d262e162", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c452e439f0ebddc8", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f774525e35947738", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f79cb61f8c523c02", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f863cd83f6637fcd", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "110 tests / 907 src (ratio 0.12)."}, "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-40209380d552b619", "name": "Node manifest has dependencies but no lockfile: packages/gateway/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/gateway/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-f85d8f0719e22fa8", "name": "Node manifest has dependencies but no lockfile: packages/contracts/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/contracts/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-7c42017861a56bdd", "name": "Node manifest has dependencies but no lockfile: packages/backend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 13 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 193 placeholder/mock markers across 58 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-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-1bd0c17b30417b2f", "name": "Agent authority lacks a verifier contract: .cursor/mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .cursor/mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eff60a450e74c879", "name": "Agent authority lacks a verifier contract: .cursor/rules/rules.mdc", "shortDescription": {"text": "Agent authority lacks a verifier contract: .cursor/rules/rules.mdc"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-13e4bf400c82160e", "name": "Commented-code block (6 lines) in apps/web/vite.config.ts:29", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/vite.config.ts:29"}, "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-cf18272d2dc80c10", "name": "Commented-code block (5 lines) in apps/web/src/compat/image.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/compat/image.tsx:3"}, "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-a7615b89dead51d8", "name": "Commented-code block (5 lines) in apps/web/src/compat/clerk.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/compat/clerk.tsx:4"}, "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-92c1a7707f389e92", "name": "Commented-code block (6 lines) in apps/web/src/components/notifications/channel-matrix.tsx:26", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/notifications/channel-matrix.tsx:26"}, "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-2761e422154640a9", "name": "Commented-code block (5 lines) in apps/web/src/components/notifications/push-device-section.tsx:17", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/notifications/push-device-section.tsx:17"}, "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-f72c02b20458b80b", "name": "Commented-code block (6 lines) in apps/web/src/components/browse/query-builder.tsx:8", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/browse/query-builder.tsx:8"}, "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-b98026baf83056d8", "name": "Commented-code block (8 lines) in apps/web/src/components/common/puzzle-plank.tsx:4", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/src/components/common/puzzle-plank.tsx:4"}, "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-3a99808b46438b45", "name": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/mobile-top-bar.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/mobile-top-bar.tsx:3"}, "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-af26f42fdb2fec18", "name": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/user-footer.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/user-footer.tsx: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-654a917c0b47d431", "name": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/shell.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/shell.tsx:3"}, "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-cae76e250786b02b", "name": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/mobile-tab-bar.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/mobile-tab-bar.tsx:3"}, "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-8cea942d8c30fbad", "name": "Commented-code block (8 lines) in apps/web/src/components/dashboard-layout/page-head.tsx:3", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/src/components/dashboard-layout/page-head.tsx:3"}, "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-13edd725852e2efa", "name": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/top-bar.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/top-bar.tsx:3"}, "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-489536f8ddfc56ea", "name": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/preferences.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/preferences.tsx:3"}, "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-22d9af1e6cda67bb", "name": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/page-header-slot.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/page-header-slot.tsx:3"}, "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-84bf85ede53b61ea", "name": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/group-landing.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/group-landing.tsx:3"}, "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-871d97772e8a6bc6", "name": "Commented-code block (5 lines) in apps/web/src/components/marketing/home/hero.tsx:286", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/marketing/home/hero.tsx:286"}, "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-21deb388ec3dcc9b", "name": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/scene.tsx:38", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/scene.tsx:38"}, "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-4b7de0aceecdb218", "name": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/palette.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/palette.ts:3"}, "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-ee2e2876cebdb553", "name": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/box.tsx:27", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/box.tsx:27"}, "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-e7cce29b49931e67", "name": "Commented-code block (7 lines) in apps/web/src/components/marketing/plank-3d/box-art.ts:273", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/components/marketing/plank-3d/box-art.ts:273"}, "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-164889b0b0e535ed", "name": "Commented-code block (6 lines) in apps/web/src/components/community/primitives.tsx:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/components/community/primitives.tsx:3"}, "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-752556c8c43249d6", "name": "Commented-code block (5 lines) in apps/web/src/components/social/member-tile.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/social/member-tile.tsx:3"}, "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-406309f27f3a9d04", "name": "Commented-code block (5 lines) in apps/web/src/components/dashboard-home/briefing-hero.tsx:45", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-home/briefing-hero.tsx:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99feffc9cf01412c", "name": "Commented-code block (5 lines) in apps/web/src/components/profile/identity-header.tsx:13", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/profile/identity-header.tsx:13"}, "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-d83f787c5908330c", "name": "Commented-code block (5 lines) in apps/web/src/components/reputation/reputation-section.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/components/reputation/reputation-section.tsx:11"}, "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-83f5ac48dfd98f6f", "name": "Commented-code block (7 lines) in apps/web/src/lib/page-title.ts:1", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/src/lib/page-title.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea19baef24dcf53d", "name": "Commented-code block (8 lines) in apps/web/src/routes/__root.tsx:34", "shortDescription": {"text": "Commented-code block (8 lines) in apps/web/src/routes/__root.tsx:34"}, "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-db25af9a7bc6256c", "name": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/dashboard.tsx:9", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/dashboard.tsx: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-4576e9461a984f1d", "name": "Commented-code block (6 lines) in apps/web/src/routes/_dashboard/route.tsx:7", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/src/routes/_dashboard/route.tsx: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-36c99185deb192f8", "name": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/browse.tsx:86", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/browse.tsx:86"}, "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-3f5ff36596260b27", "name": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/my-puzzles/add/new.tsx:152", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/my-puzzles/add/new.tsx:152"}, "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-dcd3e9317818d262", "name": "Commented-code block (7 lines) in packages/contracts/src/library/views.ts:227", "shortDescription": {"text": "Commented-code block (7 lines) in packages/contracts/src/library/views.ts:227"}, "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-e6e20444067fc2ae", "name": "Commented-code block (7 lines) in packages/backend/test-setup.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in packages/backend/test-setup.ts:3"}, "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-20868cc5ef1a58d4", "name": "Legacy-named symbol `by_copy` in packages/backend/convex/schema.ts:620", "shortDescription": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/schema.ts:620"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-78caefd356d7ae73", "name": "Commented-code block (6 lines) in packages/backend/convex/schema.ts:236", "shortDescription": {"text": "Commented-code block (6 lines) in packages/backend/convex/schema.ts:236"}, "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-2160b8292181c795", "name": "Commented-code block (5 lines) in packages/backend/convex/browseOwnedPuzzles.test.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/browseOwnedPuzzles.test.ts:16"}, "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-90189ef0ac90c23e", "name": "Commented-code block (5 lines) in packages/backend/convex/library/setCopyCover.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/library/setCopyCover.ts:11"}, "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-ff9e4da76b5808b3", "name": "Commented-code block (6 lines) in packages/backend/convex/library/getPuzzleDefinitionView.ts:64", "shortDescription": {"text": "Commented-code block (6 lines) in packages/backend/convex/library/getPuzzleDefinitionView.ts:64"}, "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-535cc1ec3d0eb63c", "name": "Legacy-named symbol `by_copy` in packages/backend/convex/library/getCopyLoanHistory.ts:14", "shortDescription": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/library/getCopyLoanHistory.ts:14"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5eb471befdc57be6", "name": "Commented-code block (8 lines) in packages/backend/convex/library/backfill.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in packages/backend/convex/library/backfill.ts:3"}, "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-ba84f70663d2a16c", "name": "Legacy-named symbol `by_copy` in packages/backend/convex/library/getCopyInstanceView.ts:78", "shortDescription": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/library/getCopyInstanceView.ts:78"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8fc132d0d6ab381f", "name": "Commented-code block (10 lines) in packages/backend/convex/library/getCopyInstanceView.ts:38", "shortDescription": {"text": "Commented-code block (10 lines) in packages/backend/convex/library/getCopyInstanceView.ts:38"}, "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-17c4793e883e655f", "name": "Commented-code block (6 lines) in packages/backend/convex/library/moderatePhoto.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in packages/backend/convex/library/moderatePhoto.ts:18"}, "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-3dc02fe47bb05fab", "name": "Commented-code block (5 lines) in packages/backend/convex/library/addCopyPhoto.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/library/addCopyPhoto.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-787186d1bccc04c3", "name": "Commented-code block (5 lines) in packages/backend/convex/library/browseOwnedPuzzles.ts:72", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/library/browseOwnedPuzzles.ts:72"}, "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-f5238800cc2c6ddb", "name": "Commented-code block (5 lines) in packages/backend/convex/library/adapters/convexCatalogSnapshotProvider.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/library/adapters/convexCatalogSnapshotProvider.ts:11"}, "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-640ffb260aaed690", "name": "Commented-code block (7 lines) in packages/backend/convex/library/adapters/photoModeration.ts:5", "shortDescription": {"text": "Commented-code block (7 lines) in packages/backend/convex/library/adapters/photoModeration.ts:5"}, "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-6f759577b575a6ea", "name": "Commented-code block (5 lines) in packages/backend/convex/notifications/sendEmail.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/sendEmail.ts:5"}, "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-84051a3c05ab270c", "name": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/email.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/email.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-244b0bb8c8b6af82", "name": "Commented-code block (7 lines) in packages/backend/convex/notifications/adapters/webPush.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in packages/backend/convex/notifications/adapters/webPush.ts:6"}, "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-14c3fb530e26031d", "name": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/notificationDelivery.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/notificationDelivery.ts:11"}, "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-2effbd97b3d974dc", "name": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/channels/emailChannel.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/channels/emailChannel.ts:6"}, "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-1b6d3afa243aff8f", "name": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/channels/pushChannel.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/channels/pushChannel.ts:6"}, "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-4d96809c2d828d54", "name": "Commented-code block (5 lines) in packages/backend/convex/events/makeEventPublisher.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/events/makeEventPublisher.ts:10"}, "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-9dff5a3ac1ff9768", "name": "Commented-code block (5 lines) in packages/backend/convex/events/recordAndSchedule.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/events/recordAndSchedule.ts:17"}, "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-5ce857e706def8a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/backend/convex/catalog/importPuzzleImage.ts:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/backend/convex/catalog/importPuzzleImage.ts:55"}, "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-743114c8f86d08b2", "name": "Commented-code block (5 lines) in packages/backend/convex/catalog/findPuzzleByBarcode.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/catalog/findPuzzleByBarcode.ts:5"}, "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-4598b95a27548b39", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/backend/convex/catalog/adapters/browserStorePageFetcher.ts:91", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/backend/convex/catalog/adapters/browserStorePageFetcher.ts:91"}, "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-9b582ea0c35469f0", "name": "Commented-code block (5 lines) in packages/backend/convex/catalog/adapters/htmlFallback.ts:88", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/catalog/adapters/htmlFallback.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-1713e49b88890174", "name": "Commented-code block (5 lines) in packages/backend/convex/insights/getCommunityAvatars.ts:45", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/insights/getCommunityAvatars.ts:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-792008b72e8e1a28", "name": "Commented-code block (7 lines) in packages/backend/convex/search/globalSearch.ts:9", "shortDescription": {"text": "Commented-code block (7 lines) in packages/backend/convex/search/globalSearch.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-18c23a028e21e25f", "name": "Commented-code block (5 lines) in packages/backend/convex/social/postPuzzleComment.ts:19", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/postPuzzleComment.ts:19"}, "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-a6c4105985cd4877", "name": "Commented-code block (5 lines) in packages/backend/convex/social/listPuzzleReviews.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/listPuzzleReviews.ts:6"}, "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-b94ce7f2ad1bf8ac", "name": "Commented-code block (6 lines) in packages/backend/convex/social/setProfileVisibility.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in packages/backend/convex/social/setProfileVisibility.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0341542119b9416e", "name": "Commented-code block (5 lines) in packages/backend/convex/social/getActivityFeed.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/getActivityFeed.ts:14"}, "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-f97968de278d9509", "name": "Legacy-named symbol `by_copy` in packages/backend/convex/social/listPuzzleComments.ts:19", "shortDescription": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/social/listPuzzleComments.ts:19"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ae9bf5ebdbd4cd6", "name": "Commented-code block (5 lines) in packages/backend/convex/social/listPuzzleComments.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/listPuzzleComments.ts:6"}, "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-8a8737c6fe349f88", "name": "Commented-code block (5 lines) in packages/backend/convex/social/postPuzzleReview.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/postPuzzleReview.ts:17"}, "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-1d46ac9a9a9943e5", "name": "Commented-code block (5 lines) in packages/backend/convex/solving/recordCompletion.ts:18", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/solving/recordCompletion.ts:18"}, "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-0a843769b3214bf7", "name": "Commented-code block (6 lines) in packages/backend/convex/solving/adapters/inProcessEventPublisher.ts:17", "shortDescription": {"text": "Commented-code block (6 lines) in packages/backend/convex/solving/adapters/inProcessEventPublisher.ts:17"}, "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-ffa324e92b293471", "name": "Legacy-named symbol `by_copy` in packages/backend/convex/custody/getCopyCustodyTimeline.ts:23", "shortDescription": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/custody/getCopyCustodyTimeline.ts:23"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e637a94ac4bf375e", "name": "Commented-code block (5 lines) in packages/backend/convex/custody/getCopyCustodyTimeline.ts:10", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/custody/getCopyCustodyTimeline.ts:10"}, "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-38d9d325cf878ce4", "name": "Commented-code block (7 lines) in packages/backend/convex/reputation/submitPartnerReview.ts:21", "shortDescription": {"text": "Commented-code block (7 lines) in packages/backend/convex/reputation/submitPartnerReview.ts:21"}, "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-f2eb486ab28fb7b8", "name": "Commented-code block (8 lines) in packages/backend/convex/reputation/backfill.ts:8", "shortDescription": {"text": "Commented-code block (8 lines) in packages/backend/convex/reputation/backfill.ts:8"}, "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-018d49d4b87e1187", "name": "Commented-code block (5 lines) in packages/backend/convex/reputation/adapters/inProcessEventPublisher.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/reputation/adapters/inProcessEventPublisher.ts:5"}, "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-324c4fcf34fad364", "name": "Commented-code block (6 lines) in packages/backend/convex/reputation/adapters/convexExchangeCompletionPort.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in packages/backend/convex/reputation/adapters/convexExchangeCompletionPort.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-1ac8bc81064e21b7", "name": "Commented-code block (5 lines) in packages/backend/convex/reputation/adapters/partnerReviewMapper.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in packages/backend/convex/reputation/adapters/partnerReviewMapper.ts:13"}, "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-a3ba2473cf1d31ea", "name": "Legacy-named symbol `by_circle_copy` in packages/backend/convex/sharing/adapters/inProcessEventPublisher.ts:34", "shortDescription": {"text": "Legacy-named symbol `by_circle_copy` in packages/backend/convex/sharing/adapters/inProcessEventPublisher.ts:34"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0133f53271b29b92", "name": "Commented-code block (9 lines) in packages/domain/src/index.ts:1", "shortDescription": {"text": "Commented-code block (9 lines) in packages/domain/src/index.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0f95f043e7ecc052", "name": "Commented-code block (5 lines) in packages/domain/src/library/domain/ids.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/library/domain/ids.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-b44377a271c4e25e", "name": "Commented-code block (6 lines) in packages/domain/src/library/domain/collection.ts:17", "shortDescription": {"text": "Commented-code block (6 lines) in packages/domain/src/library/domain/collection.ts:17"}, "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-83f04bcdc509d511", "name": "Commented-code block (10 lines) in packages/domain/src/library/domain/sharing-setting.ts:8", "shortDescription": {"text": "Commented-code block (10 lines) in packages/domain/src/library/domain/sharing-setting.ts:8"}, "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-a11d8ba4f854a8c1", "name": "Commented-code block (6 lines) in packages/domain/src/library/domain/condition.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in packages/domain/src/library/domain/condition.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d808172d9d0a2ad", "name": "Commented-code block (5 lines) in packages/domain/src/notifications/domain/ids.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/notifications/domain/ids.ts:11"}, "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-c7b13669762820d0", "name": "Commented-code block (5 lines) in packages/domain/src/notifications/domain/notification-type.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/notifications/domain/notification-type.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc52420499b391f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/make-fallback-store-page-fetcher.s", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/make-fallback-store-page-fetcher.spec.ts:22"}, "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-f94da08bf9d1ca0f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/make-fallback-store-page-fetcher.t", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/make-fallback-store-page-fetcher.ts:75"}, "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-64d800f297970fcf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/testing/fake-store-page-fetcher.ts", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/testing/fake-store-page-fetcher.ts:19"}, "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-22bd4aca210a731b", "name": "Commented-code block (5 lines) in packages/domain/src/catalog/application/use-cases/import-puzzle-from-url.ts:74", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/catalog/application/use-cases/import-puzzle-from-url.ts:74"}, "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-de459f46c1692e91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/use-cases/import-puzzle-from-url.t", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/use-cases/import-puzzle-from-url.ts:64"}, "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-72208ec04e69117a", "name": "Commented-code block (5 lines) in packages/domain/src/catalog/domain/is-private-ip.spec.ts:47", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/catalog/domain/is-private-ip.spec.ts:47"}, "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-9d5af4c0cc9096e6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/domain/store-page-fetch-error.ts:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/domain/store-page-fetch-error.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-29bbb9fd47af7c04", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/domain/store-page-fetch-error.spec.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/domain/store-page-fetch-error.spec.ts:49"}, "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-98d31c2ccc5c9d60", "name": "Commented-code block (5 lines) in packages/domain/src/insights/recommendations.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/insights/recommendations.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-48bfb51e12a1e2ac", "name": "Commented-code block (5 lines) in packages/domain/src/conversation/domain/ids.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/conversation/domain/ids.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-257f4a351b8dfd92", "name": "Commented-code block (6 lines) in packages/domain/src/conversation/domain/errors.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in packages/domain/src/conversation/domain/errors.ts:3"}, "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-c798e7f4c48589c2", "name": "Commented-code block (5 lines) in packages/domain/src/identity/domain/errors.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/identity/domain/errors.ts:3"}, "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-21264dfbeaec5bd5", "name": "Commented-code block (6 lines) in packages/domain/src/social/domain/photo-comment.ts:29", "shortDescription": {"text": "Commented-code block (6 lines) in packages/domain/src/social/domain/photo-comment.ts:29"}, "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-9a769e2fd2402636", "name": "Commented-code block (5 lines) in packages/domain/src/social/domain/ids.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/social/domain/ids.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-99fa33e384a8c182", "name": "Commented-code block (5 lines) in packages/domain/src/social/domain/errors.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/social/domain/errors.ts:3"}, "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-129f1ab671dd6585", "name": "Commented-code block (6 lines) in packages/domain/src/solving/domain/ids.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in packages/domain/src/solving/domain/ids.ts:8"}, "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-8c23a3afe6782e08", "name": "Commented-code block (5 lines) in packages/domain/src/solving/domain/completion.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/solving/domain/completion.ts:49"}, "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-df9a2fce211ce9a6", "name": "Commented-code block (5 lines) in packages/domain/src/solving/domain/goal.ts:35", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/solving/domain/goal.ts:35"}, "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-d0ea47cf27669a43", "name": "Commented-code block (5 lines) in packages/domain/src/exchange/domain/exchange-kind.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/exchange/domain/exchange-kind.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e6133127ec9a5815", "name": "Commented-code block (8 lines) in packages/domain/src/exchange/domain/exchange-status.ts:1", "shortDescription": {"text": "Commented-code block (8 lines) in packages/domain/src/exchange/domain/exchange-status.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e69cbe7e0ec4ddf", "name": "Commented-code block (5 lines) in packages/domain/src/reputation/application/use-cases/submit-partner-review.ts:38", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/reputation/application/use-cases/submit-partner-review.ts:38"}, "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-a4a5028cd1ba35f2", "name": "Commented-code block (5 lines) in packages/domain/src/reputation/domain/errors.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/reputation/domain/errors.ts:3"}, "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-224ea7a13be40681", "name": "Commented-code block (6 lines) in packages/domain/src/shared-kernel/branded-ids.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in packages/domain/src/shared-kernel/branded-ids.ts:3"}, "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-08a12523015adfc8", "name": "Commented-code block (5 lines) in packages/domain/src/sharing/domain/visibility-policy.ts:17", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/sharing/domain/visibility-policy.ts:17"}, "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-d4538b01e2c6dc7e", "name": "Commented-code block (6 lines) in packages/domain/src/sharing/domain/visibility-scope.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in packages/domain/src/sharing/domain/visibility-scope.ts:5"}, "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-dbcf2cebfb336aa2", "name": "Commented-code block (5 lines) in packages/domain/src/sharing/domain/errors.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/domain/src/sharing/domain/errors.ts:3"}, "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-ad1f2c0971b89ce0", "name": "10 env vars used in code but missing from .env.example", "shortDescription": {"text": "10 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ANALYZE`, `AXIOM_API_KEY`, `AXIOM_DATASET`, `AXIOM_EDGE`, `CONVEX_CLOUD_URL`, `DEV`, `FIRECRAWL_API_KEY`, `GIT_COMMIT` + 2 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/18901"}, "properties": {"repository": "SanderVerkuil/JigSwap", "repoUrl": "https://github.com/SanderVerkuil/JigSwap", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-4d58ece902f00730", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/src/components/notifications/push-device-section.tsx:74"}, "properties": {"repobilityId": "b034f8325351ecc7", "scanner": "scanner-primary", "fingerprint": "4d58ece902f00730", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-78fb286d3d803c4f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/puzzles/puzzle-card.tsx:52"}, "properties": {"repobilityId": "27204042da061301", "scanner": "scanner-primary", "fingerprint": "78fb286d3d803c4f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a05aa66d35894e2e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/common/user-profile/index.tsx:36"}, "properties": {"repobilityId": "427a0c8fe3cd9c0b", "scanner": "scanner-primary", "fingerprint": "a05aa66d35894e2e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c92af2ad0c2ba714", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/emoji-picker.tsx:146"}, "properties": {"repobilityId": "c40d623ac7f6ec3a", "scanner": "scanner-primary", "fingerprint": "c92af2ad0c2ba714", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-743694b79fa8977f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/src/components/ui/chart.tsx:83"}, "properties": {"repobilityId": "a3f6aa8e227cbb83", "scanner": "scanner-primary", "fingerprint": "743694b79fa8977f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-ef0eeb3766d31650", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/ui/extension/tags-input.tsx:279"}, "properties": {"repobilityId": "692a9c8e31ca8b44", "scanner": "scanner-primary", "fingerprint": "ef0eeb3766d31650", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-16a6b9a188d759ae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/user-footer.tsx:51"}, "properties": {"repobilityId": "f2eb961b386eb648", "scanner": "scanner-primary", "fingerprint": "16a6b9a188d759ae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e574a6c10274d9c2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/command-palette.tsx:165"}, "properties": {"repobilityId": "4a0ea4a542713ca0", "scanner": "scanner-primary", "fingerprint": "e574a6c10274d9c2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4882c1acf09832e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/page-head.tsx:111"}, "properties": {"repobilityId": "a843a9648df6a2c1", "scanner": "scanner-primary", "fingerprint": "4882c1acf09832e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1c2ed7a9d94aec80", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/top-bar.tsx:41"}, "properties": {"repobilityId": "964e1780f259beb2", "scanner": "scanner-primary", "fingerprint": "1c2ed7a9d94aec80", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46121ae35834b7e0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-layout/group-landing.tsx:36"}, "properties": {"repobilityId": "b257140ffcafa268", "scanner": "scanner-primary", "fingerprint": "46121ae35834b7e0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5977ae43b1e56a39", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/marketing/home/feature-rows.tsx:189"}, "properties": {"repobilityId": "c0042c06d8797f43", "scanner": "scanner-primary", "fingerprint": "5977ae43b1e56a39", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b06e214f1b9d91be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/social/member-tile.tsx:58"}, "properties": {"repobilityId": "6ce90ff3c1aed5b1", "scanner": "scanner-primary", "fingerprint": "b06e214f1b9d91be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8db5d5cf73120b71", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-home/pulse-section.tsx:221"}, "properties": {"repobilityId": "e59d16f922526a82", "scanner": "scanner-primary", "fingerprint": "8db5d5cf73120b71", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a96fd74f857a5afa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/components/dashboard-home/section-head.tsx:35"}, "properties": {"repobilityId": "cea86570b04dd6f0", "scanner": "scanner-primary", "fingerprint": "a96fd74f857a5afa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-caf14311285bec79", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/trades.tsx:265"}, "properties": {"repobilityId": "6bb8f3294b3cb286", "scanner": "scanner-primary", "fingerprint": "caf14311285bec79", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4d99c99b84eb041", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/web/src/routes/_dashboard/browse.tsx:89"}, "properties": {"repobilityId": "f77beea4151fb175", "scanner": "scanner-primary", "fingerprint": "c4d99c99b84eb041", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-9450c4fc51a1a37a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/puzzles/$id.tsx:372"}, "properties": {"repobilityId": "f406af81c4225105", "scanner": "scanner-primary", "fingerprint": "9450c4fc51a1a37a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a6659dac1a2cbac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/collections/index.tsx:365"}, "properties": {"repobilityId": "5588cfa682e093ef", "scanner": "scanner-primary", "fingerprint": "7a6659dac1a2cbac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3bd88d64c7cb153a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/my-puzzles/add/new.tsx:358"}, "properties": {"repobilityId": "5b9b2d9eb1ea9f0d", "scanner": "scanner-primary", "fingerprint": "3bd88d64c7cb153a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-85969b7f0ee026be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/src/routes/_dashboard/circles/index.tsx:210"}, "properties": {"repobilityId": "5091ad9deaf7f19c", "scanner": "scanner-primary", "fingerprint": "85969b7f0ee026be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f7371f7c6cbed5f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/backend/convex/http.ts:33"}, "properties": {"repobilityId": "194a3d27d4694ca2", "scanner": "scanner-primary", "fingerprint": "4f7371f7c6cbed5f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f32a18ede54e99cf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 packages/backend/convex/lib/logEvent.ts:39"}, "properties": {"repobilityId": "4712cc5f250289ad", "scanner": "scanner-primary", "fingerprint": "f32a18ede54e99cf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52c68e90408e41ab", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 packages/domain/src/index.ts:9"}, "properties": {"repobilityId": "22f260506d8800ec", "scanner": "scanner-primary", "fingerprint": "52c68e90408e41ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-42fe3d1908e96d05", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/src/components/ui/chart.tsx:83"}, "properties": {"repobilityId": "96fca721b4362b9f", "scanner": "scanner-primary", "fingerprint": "42fe3d1908e96d05", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/src/components/ui/chart.tsx"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-697fb81af3878cd4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/superpowers/design-reference/add-puzzle/ui.jsx:14"}, "properties": {"repobilityId": "59291a8f7d3ac22a", "scanner": "scanner-primary", "fingerprint": "697fb81af3878cd4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/superpowers/design-reference/add-puzzle/ui.jsx"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-f7df5a68d262e162", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6f59f2f48928ddf9", "scanner": "scanner-primary", "fingerprint": "f7df5a68d262e162", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/reports.yml"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-f7df5a68d262e162", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "7cc479750d1e5069", "scanner": "scanner-primary", "fingerprint": "f7df5a68d262e162", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/reports.yml"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-f7df5a68d262e162", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "da2f9ab01ffe2573", "scanner": "scanner-primary", "fingerprint": "f7df5a68d262e162", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/reports.yml"}, "region": {"startLine": 125}}}]}, {"ruleId": "scanner-c452e439f0ebddc8", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "ce8dfd26f2ae6e27", "scanner": "scanner-primary", "fingerprint": "c452e439f0ebddc8", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/reports.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-f774525e35947738", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "1b7e17b24d4a8667", "scanner": "scanner-primary", "fingerprint": "f774525e35947738", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/mutation.yml"}, "region": {"startLine": 51}}}]}, {"ruleId": "scanner-f774525e35947738", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6f4edc2dcad8b54b", "scanner": "scanner-primary", "fingerprint": "f774525e35947738", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/mutation.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-f774525e35947738", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "a8a7dc0b9c01ecb5", "scanner": "scanner-primary", "fingerprint": "f774525e35947738", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/mutation.yml"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-f79cb61f8c523c02", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "089e98fde5d0b284", "scanner": "scanner-primary", "fingerprint": "f79cb61f8c523c02", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/mutation.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f863cd83f6637fcd", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a786501b13768897", "scanner": "scanner-primary", "fingerprint": "f863cd83f6637fcd", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/pages-maintenance.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"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-40209380d552b619", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/gateway/package.json"}, "properties": {"repobilityId": "7dae41bc8ba48acd", "scanner": "scanner-primary", "fingerprint": "40209380d552b619", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/gateway/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f85d8f0719e22fa8", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/contracts/package.json"}, "properties": {"repobilityId": "9533b27beaa7d171", "scanner": "scanner-primary", "fingerprint": "f85d8f0719e22fa8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/contracts/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7c42017861a56bdd", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/backend/package.json"}, "properties": {"repobilityId": "6f48d6c86d4600d9", "scanner": "scanner-primary", "fingerprint": "7c42017861a56bdd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/backend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "99e7cabd9d1a8694", "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": "00919009217e4911", "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": "f6fc9f7502164866", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "37403b8595a2364c", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "b0dfdfff8fdba5a7", "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": "8a10c18c9d43e7c0", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-1bd0c17b30417b2f", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .cursor/mcp.json"}, "properties": {"repobilityId": "dd739e66f2986b13", "scanner": "scanner-primary", "fingerprint": "1bd0c17b30417b2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-eff60a450e74c879", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .cursor/rules/rules.mdc"}, "properties": {"repobilityId": "b4431f769c502a90", "scanner": "scanner-primary", "fingerprint": "eff60a450e74c879", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "cursor_rule"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".cursor/rules/rules.mdc"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-13e4bf400c82160e", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/vite.config.ts:29"}, "properties": {"repobilityId": "a8f261ad06f73f50", "scanner": "scanner-primary", "fingerprint": "13e4bf400c82160e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf18272d2dc80c10", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/compat/image.tsx:3"}, "properties": {"repobilityId": "8232268b869df011", "scanner": "scanner-primary", "fingerprint": "cf18272d2dc80c10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7615b89dead51d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/compat/clerk.tsx:4"}, "properties": {"repobilityId": "f846801a49d5c235", "scanner": "scanner-primary", "fingerprint": "a7615b89dead51d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92c1a7707f389e92", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/notifications/channel-matrix.tsx:26"}, "properties": {"repobilityId": "1fa1d7d34c92e2dd", "scanner": "scanner-primary", "fingerprint": "92c1a7707f389e92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2761e422154640a9", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/notifications/push-device-section.tsx:17"}, "properties": {"repobilityId": "1fe64d0bbb40f766", "scanner": "scanner-primary", "fingerprint": "2761e422154640a9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f72c02b20458b80b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/browse/query-builder.tsx:8"}, "properties": {"repobilityId": "db4e19314b097c17", "scanner": "scanner-primary", "fingerprint": "f72c02b20458b80b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b98026baf83056d8", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/src/components/common/puzzle-plank.tsx:4"}, "properties": {"repobilityId": "eee35f145fce652f", "scanner": "scanner-primary", "fingerprint": "b98026baf83056d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a99808b46438b45", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/mobile-top-bar.tsx:3"}, "properties": {"repobilityId": "359ecc253e763110", "scanner": "scanner-primary", "fingerprint": "3a99808b46438b45", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af26f42fdb2fec18", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/user-footer.tsx:7"}, "properties": {"repobilityId": "77e0fcd3deb61803", "scanner": "scanner-primary", "fingerprint": "af26f42fdb2fec18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-654a917c0b47d431", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/shell.tsx:3"}, "properties": {"repobilityId": "031b1de6d0c24cf4", "scanner": "scanner-primary", "fingerprint": "654a917c0b47d431", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cae76e250786b02b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/mobile-tab-bar.tsx:3"}, "properties": {"repobilityId": "584b5c14fb2c7ceb", "scanner": "scanner-primary", "fingerprint": "cae76e250786b02b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8cea942d8c30fbad", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/src/components/dashboard-layout/page-head.tsx:3"}, "properties": {"repobilityId": "6ca55e23da559f48", "scanner": "scanner-primary", "fingerprint": "8cea942d8c30fbad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13edd725852e2efa", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/top-bar.tsx:3"}, "properties": {"repobilityId": "0e550f9d458cd86c", "scanner": "scanner-primary", "fingerprint": "13edd725852e2efa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-489536f8ddfc56ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/preferences.tsx:3"}, "properties": {"repobilityId": "bede3a457696f152", "scanner": "scanner-primary", "fingerprint": "489536f8ddfc56ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-22d9af1e6cda67bb", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/dashboard-layout/page-header-slot.tsx:3"}, "properties": {"repobilityId": "1baaeea0e389b65f", "scanner": "scanner-primary", "fingerprint": "22d9af1e6cda67bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84bf85ede53b61ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-layout/group-landing.tsx:3"}, "properties": {"repobilityId": "8e9cc860023eb510", "scanner": "scanner-primary", "fingerprint": "84bf85ede53b61ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-871d97772e8a6bc6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/marketing/home/hero.tsx:286"}, "properties": {"repobilityId": "b182ec7385a9364c", "scanner": "scanner-primary", "fingerprint": "871d97772e8a6bc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21deb388ec3dcc9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/scene.tsx:38"}, "properties": {"repobilityId": "d73ba32020e5f6b6", "scanner": "scanner-primary", "fingerprint": "21deb388ec3dcc9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b7de0aceecdb218", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/palette.ts:3"}, "properties": {"repobilityId": "186a31ccf895577b", "scanner": "scanner-primary", "fingerprint": "4b7de0aceecdb218", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee2e2876cebdb553", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/marketing/plank-3d/box.tsx:27"}, "properties": {"repobilityId": "b7e4eaa4d9886416", "scanner": "scanner-primary", "fingerprint": "ee2e2876cebdb553", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e7cce29b49931e67", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/components/marketing/plank-3d/box-art.ts:273"}, "properties": {"repobilityId": "d3799e3cc8c1158f", "scanner": "scanner-primary", "fingerprint": "e7cce29b49931e67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-164889b0b0e535ed", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/components/community/primitives.tsx:3"}, "properties": {"repobilityId": "ad3d21d1c6c18713", "scanner": "scanner-primary", "fingerprint": "164889b0b0e535ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-752556c8c43249d6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/social/member-tile.tsx:3"}, "properties": {"repobilityId": "30c8ac514fcd5cbe", "scanner": "scanner-primary", "fingerprint": "752556c8c43249d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-406309f27f3a9d04", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/dashboard-home/briefing-hero.tsx:45"}, "properties": {"repobilityId": "dcee32a8e6e277ce", "scanner": "scanner-primary", "fingerprint": "406309f27f3a9d04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99feffc9cf01412c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/profile/identity-header.tsx:13"}, "properties": {"repobilityId": "2c86d1543aacd5bf", "scanner": "scanner-primary", "fingerprint": "99feffc9cf01412c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d83f787c5908330c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/components/reputation/reputation-section.tsx:11"}, "properties": {"repobilityId": "c6d9095270a5a762", "scanner": "scanner-primary", "fingerprint": "d83f787c5908330c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83f5ac48dfd98f6f", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/src/lib/page-title.ts:1"}, "properties": {"repobilityId": "5fcedb483c4597eb", "scanner": "scanner-primary", "fingerprint": "83f5ac48dfd98f6f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea19baef24dcf53d", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/web/src/routes/__root.tsx:34"}, "properties": {"repobilityId": "87eacaaa5ad6d6b8", "scanner": "scanner-primary", "fingerprint": "ea19baef24dcf53d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-db25af9a7bc6256c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/dashboard.tsx:9"}, "properties": {"repobilityId": "9938ecd4aacc8bf0", "scanner": "scanner-primary", "fingerprint": "db25af9a7bc6256c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4576e9461a984f1d", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/src/routes/_dashboard/route.tsx:7"}, "properties": {"repobilityId": "24169c4c487bd394", "scanner": "scanner-primary", "fingerprint": "4576e9461a984f1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36c99185deb192f8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/browse.tsx:86"}, "properties": {"repobilityId": "d27446f829fd270d", "scanner": "scanner-primary", "fingerprint": "36c99185deb192f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f5ff36596260b27", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/src/routes/_dashboard/my-puzzles/add/new.tsx:152"}, "properties": {"repobilityId": "3016da2db5f61ac7", "scanner": "scanner-primary", "fingerprint": "3f5ff36596260b27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcd3e9317818d262", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/contracts/src/library/views.ts:227"}, "properties": {"repobilityId": "27f531693fed9e82", "scanner": "scanner-primary", "fingerprint": "dcd3e9317818d262", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6e20444067fc2ae", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/backend/test-setup.ts:3"}, "properties": {"repobilityId": "077b58d1917b7a25", "scanner": "scanner-primary", "fingerprint": "e6e20444067fc2ae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20868cc5ef1a58d4", "level": "note", "message": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/schema.ts:620"}, "properties": {"repobilityId": "3188de4383ed270d", "scanner": "scanner-primary", "fingerprint": "20868cc5ef1a58d4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-78caefd356d7ae73", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/backend/convex/schema.ts:236"}, "properties": {"repobilityId": "54b2d8b3af547637", "scanner": "scanner-primary", "fingerprint": "78caefd356d7ae73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2160b8292181c795", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/browseOwnedPuzzles.test.ts:16"}, "properties": {"repobilityId": "5e1f91d75bf6dc03", "scanner": "scanner-primary", "fingerprint": "2160b8292181c795", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-90189ef0ac90c23e", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/library/setCopyCover.ts:11"}, "properties": {"repobilityId": "fd790e0b105b8c18", "scanner": "scanner-primary", "fingerprint": "90189ef0ac90c23e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff9e4da76b5808b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/backend/convex/library/getPuzzleDefinitionView.ts:64"}, "properties": {"repobilityId": "05907983f5ae2a17", "scanner": "scanner-primary", "fingerprint": "ff9e4da76b5808b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-535cc1ec3d0eb63c", "level": "note", "message": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/library/getCopyLoanHistory.ts:14"}, "properties": {"repobilityId": "5a53062d70c528a7", "scanner": "scanner-primary", "fingerprint": "535cc1ec3d0eb63c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5eb471befdc57be6", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/backend/convex/library/backfill.ts:3"}, "properties": {"repobilityId": "1d5a233da7865dd2", "scanner": "scanner-primary", "fingerprint": "5eb471befdc57be6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba84f70663d2a16c", "level": "note", "message": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/library/getCopyInstanceView.ts:78"}, "properties": {"repobilityId": "e8c3a736905a3784", "scanner": "scanner-primary", "fingerprint": "ba84f70663d2a16c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8fc132d0d6ab381f", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/backend/convex/library/getCopyInstanceView.ts:38"}, "properties": {"repobilityId": "330bfa94abae2aa9", "scanner": "scanner-primary", "fingerprint": "8fc132d0d6ab381f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17c4793e883e655f", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/backend/convex/library/moderatePhoto.ts:18"}, "properties": {"repobilityId": "90222e754b16fd05", "scanner": "scanner-primary", "fingerprint": "17c4793e883e655f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dc02fe47bb05fab", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/library/addCopyPhoto.ts:7"}, "properties": {"repobilityId": "744e10677f85c5d7", "scanner": "scanner-primary", "fingerprint": "3dc02fe47bb05fab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-787186d1bccc04c3", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/library/browseOwnedPuzzles.ts:72"}, "properties": {"repobilityId": "d8a76e3bd68dc983", "scanner": "scanner-primary", "fingerprint": "787186d1bccc04c3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5238800cc2c6ddb", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/library/adapters/convexCatalogSnapshotProvider.ts:11"}, "properties": {"repobilityId": "d6191273d5844ad2", "scanner": "scanner-primary", "fingerprint": "f5238800cc2c6ddb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-640ffb260aaed690", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/backend/convex/library/adapters/photoModeration.ts:5"}, "properties": {"repobilityId": "76bd4e62923ee6d8", "scanner": "scanner-primary", "fingerprint": "640ffb260aaed690", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f759577b575a6ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/sendEmail.ts:5"}, "properties": {"repobilityId": "f0fce50e0eb34589", "scanner": "scanner-primary", "fingerprint": "6f759577b575a6ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84051a3c05ab270c", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/email.ts:1"}, "properties": {"repobilityId": "5eee2d8b50441656", "scanner": "scanner-primary", "fingerprint": "84051a3c05ab270c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-244b0bb8c8b6af82", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/backend/convex/notifications/adapters/webPush.ts:6"}, "properties": {"repobilityId": "29c37effb68e5d5f", "scanner": "scanner-primary", "fingerprint": "244b0bb8c8b6af82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14c3fb530e26031d", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/notificationDelivery.ts:11"}, "properties": {"repobilityId": "f805536985d11533", "scanner": "scanner-primary", "fingerprint": "14c3fb530e26031d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2effbd97b3d974dc", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/channels/emailChannel.ts:6"}, "properties": {"repobilityId": "98a05eefbfb337df", "scanner": "scanner-primary", "fingerprint": "2effbd97b3d974dc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b6d3afa243aff8f", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/notifications/adapters/channels/pushChannel.ts:6"}, "properties": {"repobilityId": "d5e4a7523c5bcc2e", "scanner": "scanner-primary", "fingerprint": "1b6d3afa243aff8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d96809c2d828d54", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/events/makeEventPublisher.ts:10"}, "properties": {"repobilityId": "a21ce0798d682a2a", "scanner": "scanner-primary", "fingerprint": "4d96809c2d828d54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9dff5a3ac1ff9768", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/events/recordAndSchedule.ts:17"}, "properties": {"repobilityId": "856c66a501cfcb25", "scanner": "scanner-primary", "fingerprint": "9dff5a3ac1ff9768", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5ce857e706def8a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/backend/convex/catalog/importPuzzleImage.ts:55"}, "properties": {"repobilityId": "952644d058dc6d03", "scanner": "scanner-primary", "fingerprint": "5ce857e706def8a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-743114c8f86d08b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/catalog/findPuzzleByBarcode.ts:5"}, "properties": {"repobilityId": "ea042688a24a0d2e", "scanner": "scanner-primary", "fingerprint": "743114c8f86d08b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4598b95a27548b39", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/backend/convex/catalog/adapters/browserStorePageFetcher.ts:91"}, "properties": {"repobilityId": "768b28f6951b18d2", "scanner": "scanner-primary", "fingerprint": "4598b95a27548b39", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b582ea0c35469f0", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/catalog/adapters/htmlFallback.ts:88"}, "properties": {"repobilityId": "f192dd9644990708", "scanner": "scanner-primary", "fingerprint": "9b582ea0c35469f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1713e49b88890174", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/insights/getCommunityAvatars.ts:45"}, "properties": {"repobilityId": "71ed69864ff7aee1", "scanner": "scanner-primary", "fingerprint": "1713e49b88890174", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-792008b72e8e1a28", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/backend/convex/search/globalSearch.ts:9"}, "properties": {"repobilityId": "a4b9252a8bbf46f9", "scanner": "scanner-primary", "fingerprint": "792008b72e8e1a28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-18c23a028e21e25f", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/postPuzzleComment.ts:19"}, "properties": {"repobilityId": "f21f48689da330cd", "scanner": "scanner-primary", "fingerprint": "18c23a028e21e25f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6c4105985cd4877", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/listPuzzleReviews.ts:6"}, "properties": {"repobilityId": "efb9cbcead85d272", "scanner": "scanner-primary", "fingerprint": "a6c4105985cd4877", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b94ce7f2ad1bf8ac", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/backend/convex/social/setProfileVisibility.ts:12"}, "properties": {"repobilityId": "0065a877e199d9ba", "scanner": "scanner-primary", "fingerprint": "b94ce7f2ad1bf8ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0341542119b9416e", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/getActivityFeed.ts:14"}, "properties": {"repobilityId": "489390056b7c0344", "scanner": "scanner-primary", "fingerprint": "0341542119b9416e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f97968de278d9509", "level": "note", "message": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/social/listPuzzleComments.ts:19"}, "properties": {"repobilityId": "eb1086cc63cb2de5", "scanner": "scanner-primary", "fingerprint": "f97968de278d9509", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3ae9bf5ebdbd4cd6", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/listPuzzleComments.ts:6"}, "properties": {"repobilityId": "1a0a830b6b165c5c", "scanner": "scanner-primary", "fingerprint": "3ae9bf5ebdbd4cd6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a8737c6fe349f88", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/social/postPuzzleReview.ts:17"}, "properties": {"repobilityId": "be4cb6f160d6190a", "scanner": "scanner-primary", "fingerprint": "8a8737c6fe349f88", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1d46ac9a9a9943e5", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/solving/recordCompletion.ts:18"}, "properties": {"repobilityId": "cddcd9cf1fe37776", "scanner": "scanner-primary", "fingerprint": "1d46ac9a9a9943e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a843769b3214bf7", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/backend/convex/solving/adapters/inProcessEventPublisher.ts:17"}, "properties": {"repobilityId": "049e20859fc13cff", "scanner": "scanner-primary", "fingerprint": "0a843769b3214bf7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ffa324e92b293471", "level": "note", "message": {"text": "Legacy-named symbol `by_copy` in packages/backend/convex/custody/getCopyCustodyTimeline.ts:23"}, "properties": {"repobilityId": "08f05b21f89f77b3", "scanner": "scanner-primary", "fingerprint": "ffa324e92b293471", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e637a94ac4bf375e", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/custody/getCopyCustodyTimeline.ts:10"}, "properties": {"repobilityId": "91a960d8c0dd5170", "scanner": "scanner-primary", "fingerprint": "e637a94ac4bf375e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38d9d325cf878ce4", "level": "none", "message": {"text": "Commented-code block (7 lines) in packages/backend/convex/reputation/submitPartnerReview.ts:21"}, "properties": {"repobilityId": "679507993b7d469e", "scanner": "scanner-primary", "fingerprint": "38d9d325cf878ce4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f2eb486ab28fb7b8", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/backend/convex/reputation/backfill.ts:8"}, "properties": {"repobilityId": "e816682e0dce97db", "scanner": "scanner-primary", "fingerprint": "f2eb486ab28fb7b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-018d49d4b87e1187", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/reputation/adapters/inProcessEventPublisher.ts:5"}, "properties": {"repobilityId": "5942bb5945d929aa", "scanner": "scanner-primary", "fingerprint": "018d49d4b87e1187", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-324c4fcf34fad364", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/backend/convex/reputation/adapters/convexExchangeCompletionPort.ts:9"}, "properties": {"repobilityId": "6fb848fa9b9c1284", "scanner": "scanner-primary", "fingerprint": "324c4fcf34fad364", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ac8bc81064e21b7", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/backend/convex/reputation/adapters/partnerReviewMapper.ts:13"}, "properties": {"repobilityId": "089e8c7c0cd65d65", "scanner": "scanner-primary", "fingerprint": "1ac8bc81064e21b7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3ba2473cf1d31ea", "level": "note", "message": {"text": "Legacy-named symbol `by_circle_copy` in packages/backend/convex/sharing/adapters/inProcessEventPublisher.ts:34"}, "properties": {"repobilityId": "f8b9be960fcd5c31", "scanner": "scanner-primary", "fingerprint": "a3ba2473cf1d31ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0133f53271b29b92", "level": "none", "message": {"text": "Commented-code block (9 lines) in packages/domain/src/index.ts:1"}, "properties": {"repobilityId": "5770fe8312100162", "scanner": "scanner-primary", "fingerprint": "0133f53271b29b92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0f95f043e7ecc052", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/library/domain/ids.ts:9"}, "properties": {"repobilityId": "9c003d3db13b5d86", "scanner": "scanner-primary", "fingerprint": "0f95f043e7ecc052", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b44377a271c4e25e", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/domain/src/library/domain/collection.ts:17"}, "properties": {"repobilityId": "25f423c139c28bc7", "scanner": "scanner-primary", "fingerprint": "b44377a271c4e25e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83f04bcdc509d511", "level": "none", "message": {"text": "Commented-code block (10 lines) in packages/domain/src/library/domain/sharing-setting.ts:8"}, "properties": {"repobilityId": "51574d6e83d63727", "scanner": "scanner-primary", "fingerprint": "83f04bcdc509d511", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a11d8ba4f854a8c1", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/domain/src/library/domain/condition.ts:1"}, "properties": {"repobilityId": "d87920b331f32ca8", "scanner": "scanner-primary", "fingerprint": "a11d8ba4f854a8c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d808172d9d0a2ad", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/notifications/domain/ids.ts:11"}, "properties": {"repobilityId": "3851e6ee7e2faa03", "scanner": "scanner-primary", "fingerprint": "8d808172d9d0a2ad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c7b13669762820d0", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/notifications/domain/notification-type.ts:1"}, "properties": {"repobilityId": "f168ec09c807694b", "scanner": "scanner-primary", "fingerprint": "c7b13669762820d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc52420499b391f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/make-fallback-store-page-fetcher.spec.ts:22"}, "properties": {"repobilityId": "b749ed1d6e06ec60", "scanner": "scanner-primary", "fingerprint": "bc52420499b391f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f94da08bf9d1ca0f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/make-fallback-store-page-fetcher.ts:75"}, "properties": {"repobilityId": "c371addce08d4e74", "scanner": "scanner-primary", "fingerprint": "f94da08bf9d1ca0f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-64d800f297970fcf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/testing/fake-store-page-fetcher.ts:19"}, "properties": {"repobilityId": "1320da25d09c93ae", "scanner": "scanner-primary", "fingerprint": "64d800f297970fcf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22bd4aca210a731b", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/catalog/application/use-cases/import-puzzle-from-url.ts:74"}, "properties": {"repobilityId": "a514f8ac3e917a89", "scanner": "scanner-primary", "fingerprint": "22bd4aca210a731b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de459f46c1692e91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/application/use-cases/import-puzzle-from-url.ts:64"}, "properties": {"repobilityId": "b977de61d3eab44b", "scanner": "scanner-primary", "fingerprint": "de459f46c1692e91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-72208ec04e69117a", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/catalog/domain/is-private-ip.spec.ts:47"}, "properties": {"repobilityId": "aa7243ec2fc71bb6", "scanner": "scanner-primary", "fingerprint": "72208ec04e69117a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d5af4c0cc9096e6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/domain/store-page-fetch-error.ts:37"}, "properties": {"repobilityId": "99875a64fbe659ab", "scanner": "scanner-primary", "fingerprint": "9d5af4c0cc9096e6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-29bbb9fd47af7c04", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/domain/src/catalog/domain/store-page-fetch-error.spec.ts:49"}, "properties": {"repobilityId": "fc25c4cc15c861a8", "scanner": "scanner-primary", "fingerprint": "29bbb9fd47af7c04", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98d31c2ccc5c9d60", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/insights/recommendations.ts:1"}, "properties": {"repobilityId": "a6293af3913f373a", "scanner": "scanner-primary", "fingerprint": "98d31c2ccc5c9d60", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-48bfb51e12a1e2ac", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/conversation/domain/ids.ts:7"}, "properties": {"repobilityId": "3eab373c52090bc9", "scanner": "scanner-primary", "fingerprint": "48bfb51e12a1e2ac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-257f4a351b8dfd92", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/domain/src/conversation/domain/errors.ts:3"}, "properties": {"repobilityId": "a4fe2f723fa7befd", "scanner": "scanner-primary", "fingerprint": "257f4a351b8dfd92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c798e7f4c48589c2", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/identity/domain/errors.ts:3"}, "properties": {"repobilityId": "27c70787a56edf04", "scanner": "scanner-primary", "fingerprint": "c798e7f4c48589c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21264dfbeaec5bd5", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/domain/src/social/domain/photo-comment.ts:29"}, "properties": {"repobilityId": "4d3b302993a22565", "scanner": "scanner-primary", "fingerprint": "21264dfbeaec5bd5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a769e2fd2402636", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/social/domain/ids.ts:9"}, "properties": {"repobilityId": "38c55ef92c4e8f8d", "scanner": "scanner-primary", "fingerprint": "9a769e2fd2402636", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-99fa33e384a8c182", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/social/domain/errors.ts:3"}, "properties": {"repobilityId": "de991d26b713f711", "scanner": "scanner-primary", "fingerprint": "99fa33e384a8c182", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-129f1ab671dd6585", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/domain/src/solving/domain/ids.ts:8"}, "properties": {"repobilityId": "a0f7ec4a820be901", "scanner": "scanner-primary", "fingerprint": "129f1ab671dd6585", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c23a3afe6782e08", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/solving/domain/completion.ts:49"}, "properties": {"repobilityId": "9a2ff0b82e57e0fa", "scanner": "scanner-primary", "fingerprint": "8c23a3afe6782e08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df9a2fce211ce9a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/solving/domain/goal.ts:35"}, "properties": {"repobilityId": "1a5046137f010660", "scanner": "scanner-primary", "fingerprint": "df9a2fce211ce9a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0ea47cf27669a43", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/exchange/domain/exchange-kind.ts:1"}, "properties": {"repobilityId": "7fd5bfcab7b5aeae", "scanner": "scanner-primary", "fingerprint": "d0ea47cf27669a43", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6133127ec9a5815", "level": "none", "message": {"text": "Commented-code block (8 lines) in packages/domain/src/exchange/domain/exchange-status.ts:1"}, "properties": {"repobilityId": "9fed86f51e6fe90c", "scanner": "scanner-primary", "fingerprint": "e6133127ec9a5815", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e69cbe7e0ec4ddf", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/reputation/application/use-cases/submit-partner-review.ts:38"}, "properties": {"repobilityId": "57623087ff9ae49c", "scanner": "scanner-primary", "fingerprint": "8e69cbe7e0ec4ddf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4a5028cd1ba35f2", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/reputation/domain/errors.ts:3"}, "properties": {"repobilityId": "74c5b74c5f308df4", "scanner": "scanner-primary", "fingerprint": "a4a5028cd1ba35f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-224ea7a13be40681", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/domain/src/shared-kernel/branded-ids.ts:3"}, "properties": {"repobilityId": "ce45bedb575f9716", "scanner": "scanner-primary", "fingerprint": "224ea7a13be40681", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08a12523015adfc8", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/sharing/domain/visibility-policy.ts:17"}, "properties": {"repobilityId": "6644f26fb0809b1d", "scanner": "scanner-primary", "fingerprint": "08a12523015adfc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4538b01e2c6dc7e", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/domain/src/sharing/domain/visibility-scope.ts:5"}, "properties": {"repobilityId": "e37a1dbe5572d4f4", "scanner": "scanner-primary", "fingerprint": "d4538b01e2c6dc7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dbcf2cebfb336aa2", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/domain/src/sharing/domain/errors.ts:3"}, "properties": {"repobilityId": "15793b9172411137", "scanner": "scanner-primary", "fingerprint": "dbcf2cebfb336aa2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad1f2c0971b89ce0", "level": "note", "message": {"text": "10 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "3bfdc60c61f1870e", "scanner": "scanner-primary", "fingerprint": "ad1f2c0971b89ce0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}