{"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": "foundry_unresolved_feedback", "name": "Foundry mined unresolved feedback: VaMitrofanov/Guess_shop", "shortDescription": {"text": "Foundry mined unresolved feedback: VaMitrofanov/Guess_shop"}, "fullDescription": {"text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: VaMitrofanov/Guess_shop#1\nRepo: VaMitrofanov/Guess_shop\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 107\nEdges: 133\nNode types: {'pr_file': 98, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outco"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "foundry_assumption_check", "name": "Foundry mined assumption checks: VaMitrofanov/Guess_shop", "shortDescription": {"text": "Foundry mined assumption checks: VaMitrofanov/Guess_shop"}, "fullDescription": {"text": "Comment chain pattern product: assumption_checks\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: VaMitrofanov/Guess_shop#1\nRepo: VaMitrofanov/Guess_shop\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 98\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {'docs_or_claims': 2, 'source_or_other': 41, 'api_or_backend': 17, 'schema_or_data': 4, 'ui_or_frontend': 33, 'dependency_or_build': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f5af485249f32e50\",\n    \"kind\": \"pull_request_body"}, "properties": {"scanner": "foundry_dataset", "category": "practices", "severity": "medium", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "foundry_schema_ui_api_gap", "name": "Foundry mined schema ui api mismatch: VaMitrofanov/Guess_shop", "shortDescription": {"text": "Foundry mined schema ui api mismatch: VaMitrofanov/Guess_shop"}, "fullDescription": {"text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: VaMitrofanov/Guess_shop#1\nRepo: VaMitrofanov/Guess_shop\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 107\nEdges: 133\nNode types: {'pr_file': 98, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 98, 'c"}, "properties": {"scanner": "foundry_dataset", "category": "quality", "severity": "high", "confidence": 0.76, "cwe": "", "owasp": ""}}, {"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-e18b20db682e63cd", "name": "Stray `console.log` in TS/JS \u2014 scripts/refresh-database.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/refresh-database.ts:112"}, "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-69070252baff2140", "name": "Stray `console.log` in TS/JS \u2014 scripts/check_order.ts:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check_order.ts:15"}, "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-9fd2f5ae31c06b92", "name": "Stray `console.log` in TS/JS \u2014 scripts/load-wb-codes.js:22", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/load-wb-codes.js:22"}, "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-32f9c8f3df25d7c5", "name": "Stray `console.log` in TS/JS \u2014 scripts/reject_gamepass.ts:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reject_gamepass.ts:46"}, "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-9bbbb9ea8f8cd63c", "name": "Stray `console.log` in TS/JS \u2014 scripts/grant-review-bonus.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/grant-review-bonus.ts:52"}, "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-79497eb6b25e8f02", "name": "Stray `console.log` in TS/JS \u2014 scripts/push-wb-codes.js:105", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/push-wb-codes.js:105"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b6a84d431e6b42c3", "name": "Stray `console.log` in TS/JS \u2014 scripts/accept_gamepass.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/accept_gamepass.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9eaa6b0b9a28ab4c", "name": "Stray `console.log` in TS/JS \u2014 scripts/enrich-tg-usernames.ts:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enrich-tg-usernames.ts:52"}, "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-c984e8bce59c484d", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.js:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20bed58fdf96e518", "name": "Stray `console.log` in TS/JS \u2014 bots/shared/bridge.ts:112", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bots/shared/bridge.ts:112"}, "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-22d664554e2096b1", "name": "Stray `console.log` in TS/JS \u2014 bots/shared/roblox.ts:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bots/shared/roblox.ts:71"}, "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-f62a7606e736d302", "name": "Stray `console.log` in TS/JS \u2014 bots/tg/crons.ts:214", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bots/tg/crons.ts:214"}, "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-c53b287b2cde9e4a", "name": "Stray `console.log` in TS/JS \u2014 bots/tg/bot.ts:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bots/tg/bot.ts:29"}, "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-edd5d4c5d21b8fce", "name": "Stray `console.log` in TS/JS \u2014 bots/tg/handlers.ts:150", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bots/tg/handlers.ts:150"}, "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-8472f92559c2c7c3", "name": "Stray `console.log` in TS/JS \u2014 bots/tg/admin/wb-client.ts:418", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bots/tg/admin/wb-client.ts:418"}, "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-7cb1852a5aa5165b", "name": "Stray `console.log` in TS/JS \u2014 bots/vk/bot.ts:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bots/vk/bot.ts:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ed845fb0629ab31", "name": "Stray `console.log` in TS/JS \u2014 bots/vk/handlers.ts:353", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 bots/vk/handlers.ts:353"}, "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-8de332e3728327c0", "name": "Stray `console.log` in TS/JS \u2014 src/auth.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/auth.ts:36"}, "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-759d5966f08aad9a", "name": "Stray `console.log` in TS/JS \u2014 src/components/auth/VKAuthButton.tsx:108", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/auth/VKAuthButton.tsx:108"}, "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-f79abda445c04eaa", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/spotlight-card.tsx:169", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/spotlight-card.tsx:169"}, "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-425d2a73ef459fef", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sidebar.tsx:74", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sidebar.tsx:74"}, "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-a0553eba20f83953", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/order-list.tsx:79", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/order-list.tsx:79"}, "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-4fb0fdef85e3b20a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:50", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:50"}, "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-6b6ce7822a7d7ea0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/bot/update-order/route.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/bot/update-order/route.ts:64"}, "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-efd34446521cda1b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/orders/create/route.ts:125", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/orders/create/route.ts:125"}, "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-8a94e02934db9d00", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/orders/webhook-to-automation/route.ts:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/orders/webhook-to-automation/route.ts:64"}, "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-e2668b0109af43e0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/twa/bossrobux/route.ts:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twa/bossrobux/route.ts:12"}, "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-5a02467d3f9ea47b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/tinkoff/route.ts:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/tinkoff/route.ts:31"}, "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-d0bd23e4ec73c45a", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:134", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:134"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0062ce59452885f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/twa/page.tsx:11", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/twa/page.tsx:11"}, "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-b6d23650219a137d", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/twa/layout.tsx:4", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/twa/layout.tsx:4"}, "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-096f2a653c7e1b56", "name": "Icon-only button without accessible name \u2014 src/app/twa/_components/screens/BossrobuxScreen.tsx:529", "shortDescription": {"text": "Icon-only button without accessible name \u2014 src/app/twa/_components/screens/BossrobuxScreen.tsx:529"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85149688fdfb103c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/checkout/page.tsx:278", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/checkout/page.tsx:278"}, "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-e97265200dfb7b76", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/payment/status/page.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/payment/status/page.tsx:80"}, "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-ea0769065ed41804", "name": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0023b29883b64ae1", "name": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c6db5852112c86d", "name": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30d3d865135c596c", "name": "Insecure pattern 'direct_innerhtml_assignment' in src/components/auth/VKAuthButton.tsx:65", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/auth/VKAuthButton.tsx:65"}, "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-986d20b061b043ae", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/spotlight-card.tsx:169", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/spotlight-card.tsx:169"}, "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-a267942e55a71235", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:50", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:50"}, "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-5e37c5b4d5ae44cd", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/twa/page.tsx:11", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/twa/page.tsx:11"}, "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-8164a53c906d5ac3", "name": "Insecure pattern 'dangerous_innerhtml' in src/app/twa/layout.tsx:4", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/twa/layout.tsx:4"}, "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-c0abfd2b3657cc1b", "name": "Insecure pattern 'local_storage_auth_token' in src/app/twa/_components/TwaApp.tsx:116", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in src/app/twa/_components/TwaApp.tsx:116"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1bb761b9a18c6b79", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ac87cf2443d42210", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-91e30c255283d202", "name": "Very large file: bots/tg/handlers.ts (3201 lines)", "shortDescription": {"text": "Very large file: bots/tg/handlers.ts (3201 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb8e14aacddf4844", "name": "Very large file: bots/tg/admin/hub-wildberries.ts (1454 lines)", "shortDescription": {"text": "Very large file: bots/tg/admin/hub-wildberries.ts (1454 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ecd0bb973f5aff2b", "name": "Very large file: bots/vk/handlers.ts (1930 lines)", "shortDescription": {"text": "Very large file: bots/vk/handlers.ts (1930 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09670cdac0f1ffc0", "name": "Very large file: src/app/twa/_components/screens/OrdersScreen.tsx (1358 lines)", "shortDescription": {"text": "Very large file: src/app/twa/_components/screens/OrdersScreen.tsx (1358 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2575e1f3ca34b5ba", "name": "Very large file: src/app/guide/GuideClient.tsx (2976 lines)", "shortDescription": {"text": "Very large file: src/app/guide/GuideClient.tsx (2976 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "2 test file(s) for 172 source file(s) (ratio 0.01). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1f7a25b73776e62", "name": "Node manifest has dependencies but no lockfile: bots/vk/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: bots/vk/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 113 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 42 placeholder/mock markers across 17 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, 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-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-832f8218232616fd", "name": "Commented-code block (5 lines) in next.config.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in next.config.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-70433a686126d4f0", "name": "Commented-code block (6 lines) in scripts/refresh-database.ts:146", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/refresh-database.ts:146"}, "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-ddc1ef2510fc876d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/reject_gamepass.ts:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/reject_gamepass.ts:39"}, "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-fe2a4f787c7494b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/grant-review-bonus.ts:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/grant-review-bonus.ts:45"}, "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-00ed2f2b763eecd4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-tg-usernames.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-tg-usernames.ts:40"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e7baeb6b7f1f8f78", "name": "Commented-code block (5 lines) in bots/shared/bridge.ts:74", "shortDescription": {"text": "Commented-code block (5 lines) in bots/shared/bridge.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-cc93ada291620aaa", "name": "Commented-code block (10 lines) in bots/shared/roblox.ts:453", "shortDescription": {"text": "Commented-code block (10 lines) in bots/shared/roblox.ts:453"}, "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-343cc04ad18761a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 bots/shared/notify.ts:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 bots/shared/notify.ts:116"}, "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-73fc5e3ebee65c02", "name": "Commented-code block (7 lines) in bots/tg/handlers.ts:765", "shortDescription": {"text": "Commented-code block (7 lines) in bots/tg/handlers.ts:765"}, "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-5a57b6c6d35ae4cc", "name": "Commented-code block (7 lines) in bots/vk/handlers.ts:200", "shortDescription": {"text": "Commented-code block (7 lines) in bots/vk/handlers.ts:200"}, "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-47818cbc996275ff", "name": "Commented-code block (6 lines) in src/auth.ts:193", "shortDescription": {"text": "Commented-code block (6 lines) in src/auth.ts:193"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4ae7f0977d74664", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/connectivity-assistant.tsx:115", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/connectivity-assistant.tsx:115"}, "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-19994a8fcff53e52", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/order-list.tsx:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/order-list.tsx:123"}, "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-73735cb22bf7f608", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/product-list.tsx:37", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/product-list.tsx: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-5e3cff1e274282bd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/login/page.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/login/page.tsx:35"}, "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-fe28307afcf25b4d", "name": "Commented-code block (5 lines) in src/app/api/orders/create/route.ts:168", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/orders/create/route.ts:168"}, "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-019b02a40c4316fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/twa/orders/route.ts:265", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/twa/orders/route.ts:265"}, "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-40c6eb9172aeef1d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/twa/system/route.ts:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/twa/system/route.ts:111"}, "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-e48d9fda5dc9ae04", "name": "Commented-code block (5 lines) in src/app/api/webhooks/tinkoff/route.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/webhooks/tinkoff/route.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-6f8a0fc028e59171", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/tinkoff/route.ts:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/tinkoff/route.ts:24"}, "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-4123646e2d0c710f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/CalcScreen.tsx:567", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/CalcScreen.tsx:567"}, "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-f69cf4ccf340f81d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/StocksScreen.tsx:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/StocksScreen.tsx:190"}, "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-441f82f44dee102a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/SettingsScreen.tsx:169", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/SettingsScreen.tsx:169"}, "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-77e667b8fea501c1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/AnalyticsScreen.tsx:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/AnalyticsScreen.tsx:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2652801943647935", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/OrdersScreen.tsx:971", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/OrdersScreen.tsx:971"}, "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-975b76103e277ad4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/BossrobuxScreen.tsx:447", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/BossrobuxScreen.tsx:447"}, "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-af7cdb67c0f573d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/CodesScreen.tsx:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/CodesScreen.tsx: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-50bce1ce2574f444", "name": "Commented-code block (5 lines) in src/app/guide/GuideClient.tsx:547", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/guide/GuideClient.tsx:547"}, "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-1908164290984f1d", "name": "Commented-code block (6 lines) in src/app/guide/page.tsx:25", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/guide/page.tsx:25"}, "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-73581e3769303d85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/telegram.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/telegram.ts:29"}, "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}}]}}, "automationDetails": {"id": "repobility/22055"}, "properties": {"repository": "VaMitrofanov/Guess_shop", "repoUrl": "https://github.com/VaMitrofanov/Guess_shop", "branch": "main"}, "results": [{"ruleId": "foundry_unresolved_feedback", "level": "warning", "message": {"text": "Foundry mined unresolved feedback: VaMitrofanov/Guess_shop"}, "properties": {"repobilityId": 423507, "scanner": "foundry_dataset", "fingerprint": "f3e32a8f86738aa84cd238d2d459b9e2b8a9b2e3c6ce05ea8671925250c4faa1", "category": "practices", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Human feedback without linked fix evidence", "intent": "Negative/unresolved examples that should not be hallucinated into fixes.", "labels": {"api_or_backend": 17, "docs_or_claims": 2, "schema_or_data": 4, "ui_or_frontend": 33, "source_or_other": 41, "dependency_or_build": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3}, "source": "graph_query_export", "motif_id": "unlinked_feedback_needs_evidence", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "unresolved_feedback", "severity": "medium", "ci_labels": {}, "synthetic": false, "edge_count": 133, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 98, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 107, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 98, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "VaMitrofanov/Guess_shop#1", "issue_number": "1", "quality_tiers": {"unresolved": 3}, "repo_full_name": "VaMitrofanov/Guess_shop", "training_usage": "negative_or_unresolved", "source_motif_id": "graph-pattern-motif-thread-7bb6b46a8864f366", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 68, "docs_or_claims": 8, "schema_or_data": 16, "ui_or_frontend": 132, "source_or_other": 164, "dependency_or_build": 4}}, "text": "Graph query export: Human feedback without linked fix evidence\nQuery id: unresolved_feedback\nQuery type: motif_query\nIntent: Negative/unresolved examples that should not be hallucinated into fixes.\nMotif: unlinked_feedback_needs_evidence\nTraining usage: negative_or_unresolved\nGraph gold label: needs_more_evidence\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nEvidence:\nGraph motif: Human feedback exists without a linked fix\nMotif id: unlinked_feedback_needs_evidence\nPolarity: bad\nTraining usage: negative_or_unresolved\nSeverity: medium\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: VaMitrofanov/Guess_shop#1\nRepo: VaMitrofanov/Guess_shop\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 107\nEdges: 133\nNode types: {'pr_file': 98, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 98, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 41, 'ui_or_frontend': 33, 'api_or_backend': 17, 'schema_or_data': 4, 'ambiguous_needs_more_evidence': 3, 'docs_or_claims': 2, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'dependency_or_build': 1, 'unlinked_human_feedback': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Teach models to preserve unresolved human feedback instead of hallucinating fixes.\n- Build issue-to-regression examples where no accepted fix exists yet.\nAssumption checks:\n- Can a commit be linked by issue number, SHA, changed path, or time window?\n- If no link exists, is this explicitly labelled unresolved?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/VaMitrofanov/Guess_shop", "source_id": "graph-query-motif_query-08f3f560c906a83c", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/unresolved_feedback/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "VaMitrofanov/Guess_shop", "source_dataset": "graph_queries/unresolved_feedback", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_assumption_check", "level": "warning", "message": {"text": "Foundry mined assumption checks: VaMitrofanov/Guess_shop"}, "properties": {"repobilityId": 374496, "scanner": "foundry_dataset", "fingerprint": "b8a362ff6223f47952b6cbe772b127d22ad2c88c257273ca2dcd9463a85488ed", "category": "practices", "severity": "medium", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "comment_chain_pattern_product", "source": "comment_chain_pattern_miner", "product": "assumption_checks", "synthetic": false, "thread_key": "VaMitrofanov/Guess_shop#1", "human_labels": ["api_or_backend", "dependency_or_build", "docs_or_claims", "human_feedback_general", "schema_or_data", "source_or_other", "ui_or_frontend"], "issue_number": "1", "thread_label": "thread_needs_classification", "outcome_label": "ambiguous_needs_more_evidence", "source_backed": true, "max_confidence": 0.0, "repo_full_name": "VaMitrofanov/Guess_shop", "training_usage": "negative_or_unresolved", "confidence_tier": "unresolved", "source_chain_id": "evidence-chain-issue_chain-30284009e7ab231b", "helicopter_views": {"schemas": 2}, "artifact_families": {"ci": 2, "docs": 5, "generated_claims": 1}, "source_chain_kind": "issue_chain", "changed_file_count": 98, "source_graph_label": "source_backed_multi_signal_graph", "changed_file_labels": {"api_or_backend": 17, "docs_or_claims": 2, "schema_or_data": 4, "ui_or_frontend": 33, "source_or_other": 41, "dependency_or_build": 1}, "linked_commit_count": 0, "helicopter_view_count": 2, "source_artifact_count": 8, "classification_reasons": ["source_graph_has_real_artifacts", "source_graph_has_verification_artifacts", "repo_has_isolated_helicopter_views", "link_quality_unresolved"], "linked_ci_commit_count": 0, "verification_artifact_count": 2, "design_schema_api_artifact_count": 0}, "text": "Comment chain pattern product: assumption_checks\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nOutcome: ambiguous_needs_more_evidence\nThread label: thread_needs_classification\nSource graph label: source_backed_multi_signal_graph\nReasons: source_graph_has_real_artifacts, source_graph_has_verification_artifacts, repo_has_isolated_helicopter_views, link_quality_unresolved\nChain evidence:\nIssue/PR evidence chain: VaMitrofanov/Guess_shop#1\nRepo: VaMitrofanov/Guess_shop\nThread label: thread_needs_classification\nOutcome: ambiguous_needs_more_evidence\nComment count: 1\nLinked commit count: 0\nLinked CI commit count: 0\nLinked CI labels: {}\nChanged file count: 98\nLabels: {'human_feedback_general': 1}\nPolarities: {'neutral': 1}\nChanged file labels: {'docs_or_claims': 2, 'source_or_other': 41, 'api_or_backend': 17, 'schema_or_data': 4, 'ui_or_frontend': 33, 'dependency_or_build': 1}\nExamples:\n[\n  {\n    \"id\": \"github-feedback-comment-f5af485249f32e50\",\n    \"kind\": \"pull_request_body\",\n    \"label\": \"human_feedback_general\",\n    \"polarity\": \"neutral\",\n    \"url\": \"https://github.com/VaMitrofanov/Guess_shop/pull/1\",\n    \"text\": \"GitHub feedback: human_feedback_general\\nPolarity: neutral\\nKind: pull_request_body\\nRepo: VaMitrofanov/Guess_shop\\nAuthor: VaMitrofanov (User)\\nURL: https://github.com/VaMitrofanov/Guess_shop/pull/1\\nTitle: Test\\nBody:\\n\"\n  }\n]\nChanged files:\n[\n  {\n    \"id\": \"github-pr-file-file-4f5e47570437319f\",\n    \"filename\": \"HANDOFF.md\",\n    \"label\": \"docs_or_claims\",\n    \"status\": \"modified\",\n    \"additions\": 3685,\n    \"deletions\": 147,\n    \"changes\": 3832,\n    \"blob_url\": \"https://github.com/VaMitrofanov/Guess_shop/blob/ee8d7324ac63d5c8ec66d64e6a5e9ff08a353061/HANDOFF.md\"\n  },\n  {\n    \"id\": \"github-pr-file-file-5d95cb6a37e7a9f3\",\n    \"filename\": \"bots/shared/admin.ts\",\n    \"label\": \"source_or_other\",\n    \"status\": \"modified\",\n    \"additions\": 271,\n    \"deletions\": 19,\n    \"changes\": 290,\n    \"blob_url\": \"https://github.com/VaMitrofanov/Guess_shop/blob/ee8d7324ac63d5c8ec66d64e6a5e9ff08a353061/bots%2Fshared%2Fadmin.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-b01245d8468796e5\",\n    \"filename\": \"bots/shared/bossrobux.ts\",\n    \"label\": \"source_or_other\",\n    \"status\": \"added\",\n    \"additions\": 121,\n    \"deletions\": 0,\n    \"changes\": 121,\n    \"blob_url\": \"https://github.com/VaMitrofanov/Guess_shop/blob/ee8d7324ac63d5c8ec66d64e6a5e9ff08a353061/bots%2Fshared%2Fbossrobux.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-72c44d412c092e5e\",\n    \"filename\": \"bots/shared/bridge.ts\",\n    \"label\": \"source_or_other\",\n    \"status\": \"modified\",\n    \"additions\": 59,\n    \"deletions\": 4,\n    \"changes\": 63,\n    \"blob_url\": \"https://github.com/VaMitrofanov/Guess_shop/blob/ee8d7324ac63d5c8ec66d64e6a5e9ff08a353061/bots%2Fshared%2Fbridge.ts\"\n  },\n  {\n    \"id\": \"github-pr-file-file-b99768465b4959e7\",\n    \"filename\": \"bots/shared/db.ts\",\n    \"label\": \"source_or_other\",\n    \"status\": \"modified\",\n    \"additions\": 10,\n    \"deletions\":\n[truncated by importer]", "source": "foundry_mined_dataset", "repo_url": "https://github.com/VaMitrofanov/Guess_shop", "source_id": "comment-chain-pattern-assumption_checks-67a394f800c05ddb", "synthetic": false, "gold_label": "", "graph_label": "source_backed_multi_signal_graph", "source_path": "/data/distillate/foundry_data/comment_chain_patterns/assumption_checks/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "VaMitrofanov/Guess_shop", "source_dataset": "comment_chain_patterns/assumption_checks", "training_usage": "negative_or_unresolved"}}}, {"ruleId": "foundry_schema_ui_api_gap", "level": "error", "message": {"text": "Foundry mined schema ui api mismatch: VaMitrofanov/Guess_shop"}, "properties": {"repobilityId": 409287, "scanner": "foundry_dataset", "fingerprint": "8ad497524f6e8dba66ea5c0c8a22313d3eeccb5c6c482473e4f6708b272e3868", "category": "quality", "severity": "high", "confidence": 0.76, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Imported from mined Foundry/Fable5 evidence with real GitHub/source provenance. Review source_id before acting.", "evidence": {"meta": {"kind": "graph_query_record", "title": "Schema, UI, and API mismatch", "intent": "Assumption-check examples for data-path consistency across layers.", "labels": {"api_or_backend": 17, "docs_or_claims": 2, "schema_or_data": 4, "ui_or_frontend": 33, "source_or_other": 41, "dependency_or_build": 1, "human_feedback_general": 1, "unlinked_human_feedback": 1, "thread_needs_classification": 2, "issue_or_pull_request_thread": 1, "ambiguous_needs_more_evidence": 3}, "source": "graph_query_export", "motif_id": "schema_ui_api_mismatch", "outcomes": {"ambiguous_needs_more_evidence": 6}, "polarity": "bad", "query_id": "schema_ui_api_mismatch", "severity": "high", "ci_labels": {}, "synthetic": false, "edge_count": 133, "edge_types": {"repo_has_thread": 1, "comment_has_chain": 1, "thread_has_comment": 1, "thread_touches_file": 98, "chain_has_link_quality": 3, "thread_has_fix_outcome": 1, "thread_has_issue_chain": 1, "issue_chain_touches_file": 12, "thread_has_comment_chain": 1, "comment_chain_touches_file": 12, "issue_chain_has_fix_outcome": 1, "issue_chain_has_comment_chain": 1}, "node_count": 107, "node_types": {"repo": 1, "thread": 1, "comment": 1, "pr_file": 98, "fix_outcome": 1, "issue_chain": 1, "link_quality": 3, "comment_chain": 1}, "query_type": "motif_query", "thread_key": "VaMitrofanov/Guess_shop#1", "issue_number": "1", "quality_tiers": {"unresolved": 3}, "repo_full_name": "VaMitrofanov/Guess_shop", "training_usage": "assumption_check", "source_motif_id": "graph-pattern-motif-thread-7f65511d0b6227c7", "graph_gold_label": "needs_more_evidence", "changed_file_labels": {"api_or_backend": 68, "docs_or_claims": 8, "schema_or_data": 16, "ui_or_frontend": 132, "source_or_other": 164, "dependency_or_build": 4}}, "text": "Graph query export: Schema, UI, and API mismatch\nQuery id: schema_ui_api_mismatch\nQuery type: motif_query\nIntent: Assumption-check examples for data-path consistency across layers.\nMotif: schema_ui_api_mismatch\nTraining usage: assumption_check\nGraph gold label: needs_more_evidence\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nEvidence:\nGraph motif: Schema, UI, and API evidence do not line up\nMotif id: schema_ui_api_mismatch\nPolarity: bad\nTraining usage: assumption_check\nSeverity: high\nRepo: VaMitrofanov/Guess_shop\nThread: VaMitrofanov/Guess_shop#1\nGraph gold label: needs_more_evidence\nThread graph evidence:\nGitHub issue/PR evidence subgraph\nThread: VaMitrofanov/Guess_shop#1\nRepo: VaMitrofanov/Guess_shop\nIssue/PR number: 1\nGraph consistency label: needs_more_evidence\nNodes: 107\nEdges: 133\nNode types: {'pr_file': 98, 'link_quality': 3, 'thread': 1, 'repo': 1, 'comment': 1, 'comment_chain': 1, 'issue_chain': 1, 'fix_outcome': 1}\nEdge types: {'thread_touches_file': 98, 'comment_chain_touches_file': 12, 'issue_chain_touches_file': 12, 'chain_has_link_quality': 3, 'repo_has_thread': 1, 'thread_has_comment': 1, 'thread_has_comment_chain': 1, 'comment_has_chain': 1, 'thread_has_issue_chain': 1, 'issue_chain_has_comment_chain': 1, 'thread_has_fix_outcome': 1, 'issue_chain_has_fix_outcome': 1}\nLabels: {'source_or_other': 41, 'ui_or_frontend': 33, 'api_or_backend': 17, 'schema_or_data': 4, 'ambiguous_needs_more_evidence': 3, 'docs_or_claims': 2, 'thread_needs_classification': 2, 'issue_or_pull_request_thread': 1, 'human_feedback_general': 1, 'dependency_or_build': 1, 'unlinked_human_feedback': 1}\nOutcomes: {'ambiguous_needs_more_evidence': 6}\nQuality tiers: {'unresolved': 3}\nCI labels: {}\nCurriculum targets:\n- Create schema-to-API-to-UI consistency tasks with migrations and tests.\n- Teach models to verify persistence, route contracts, and UI state together.\nAssumption checks:\n- Do schema changes have matching API and UI handling?\n- Are migrations and tests present for the data path?", "source": "foundry_mined_dataset", "repo_url": "https://github.com/VaMitrofanov/Guess_shop", "source_id": "graph-query-motif_query-46016068a1e24ba3", "synthetic": false, "gold_label": "", "graph_label": "", "source_path": "/data/distillate/foundry_data/graph_queries/schema_ui_api_mismatch/shard-0.jsonl", "bundle_label": "", "priority_band": "", "priority_score": 0, "repo_full_name": "VaMitrofanov/Guess_shop", "source_dataset": "graph_queries/schema_ui_api_mismatch", "training_usage": "assumption_check"}}}, {"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-e18b20db682e63cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/refresh-database.ts:112"}, "properties": {"repobilityId": "e6562027d65697fb", "scanner": "scanner-primary", "fingerprint": "e18b20db682e63cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69070252baff2140", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check_order.ts:15"}, "properties": {"repobilityId": "7e808e47c36119a6", "scanner": "scanner-primary", "fingerprint": "69070252baff2140", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9fd2f5ae31c06b92", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/load-wb-codes.js:22"}, "properties": {"repobilityId": "512c2cfee288f6b4", "scanner": "scanner-primary", "fingerprint": "9fd2f5ae31c06b92", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-32f9c8f3df25d7c5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reject_gamepass.ts:46"}, "properties": {"repobilityId": "b70a78f42292bece", "scanner": "scanner-primary", "fingerprint": "32f9c8f3df25d7c5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9bbbb9ea8f8cd63c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/grant-review-bonus.ts:52"}, "properties": {"repobilityId": "182ed2b8242b5803", "scanner": "scanner-primary", "fingerprint": "9bbbb9ea8f8cd63c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-79497eb6b25e8f02", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/push-wb-codes.js:105"}, "properties": {"repobilityId": "48a6869779609f62", "scanner": "scanner-primary", "fingerprint": "79497eb6b25e8f02", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b6a84d431e6b42c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/accept_gamepass.ts:32"}, "properties": {"repobilityId": "d81a827ffeb2fd2f", "scanner": "scanner-primary", "fingerprint": "b6a84d431e6b42c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9eaa6b0b9a28ab4c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/enrich-tg-usernames.ts:52"}, "properties": {"repobilityId": "64d60f94d4e496d0", "scanner": "scanner-primary", "fingerprint": "9eaa6b0b9a28ab4c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c984e8bce59c484d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.js:56"}, "properties": {"repobilityId": "811c4f12ca772b62", "scanner": "scanner-primary", "fingerprint": "c984e8bce59c484d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-20bed58fdf96e518", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bots/shared/bridge.ts:112"}, "properties": {"repobilityId": "94a4d6f3bea6ff01", "scanner": "scanner-primary", "fingerprint": "20bed58fdf96e518", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-22d664554e2096b1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bots/shared/roblox.ts:71"}, "properties": {"repobilityId": "2febf47ffa6181d2", "scanner": "scanner-primary", "fingerprint": "22d664554e2096b1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f62a7606e736d302", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bots/tg/crons.ts:214"}, "properties": {"repobilityId": "7ba513e4033a56f2", "scanner": "scanner-primary", "fingerprint": "f62a7606e736d302", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c53b287b2cde9e4a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bots/tg/bot.ts:29"}, "properties": {"repobilityId": "c6e1bdc33eccd457", "scanner": "scanner-primary", "fingerprint": "c53b287b2cde9e4a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-edd5d4c5d21b8fce", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bots/tg/handlers.ts:150"}, "properties": {"repobilityId": "925988336990d46e", "scanner": "scanner-primary", "fingerprint": "edd5d4c5d21b8fce", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8472f92559c2c7c3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bots/tg/admin/wb-client.ts:418"}, "properties": {"repobilityId": "a0420b6d3b8ebe81", "scanner": "scanner-primary", "fingerprint": "8472f92559c2c7c3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cb1852a5aa5165b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bots/vk/bot.ts:32"}, "properties": {"repobilityId": "71a3287481a3c125", "scanner": "scanner-primary", "fingerprint": "7cb1852a5aa5165b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9ed845fb0629ab31", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 bots/vk/handlers.ts:353"}, "properties": {"repobilityId": "a4fc0068aa56967c", "scanner": "scanner-primary", "fingerprint": "9ed845fb0629ab31", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8de332e3728327c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/auth.ts:36"}, "properties": {"repobilityId": "6ab9c77a81ca0d35", "scanner": "scanner-primary", "fingerprint": "8de332e3728327c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-759d5966f08aad9a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/auth/VKAuthButton.tsx:108"}, "properties": {"repobilityId": "1a1f2dca4be27e01", "scanner": "scanner-primary", "fingerprint": "759d5966f08aad9a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f79abda445c04eaa", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/ui/spotlight-card.tsx:169"}, "properties": {"repobilityId": "94660410dca52a10", "scanner": "scanner-primary", "fingerprint": "f79abda445c04eaa", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-425d2a73ef459fef", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/sidebar.tsx:74"}, "properties": {"repobilityId": "54ced450dbbab79b", "scanner": "scanner-primary", "fingerprint": "425d2a73ef459fef", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a0553eba20f83953", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin/order-list.tsx:79"}, "properties": {"repobilityId": "75a01cd7c4992e18", "scanner": "scanner-primary", "fingerprint": "a0553eba20f83953", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4fb0fdef85e3b20a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/layout.tsx:50"}, "properties": {"repobilityId": "0d72350965068f5b", "scanner": "scanner-primary", "fingerprint": "4fb0fdef85e3b20a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-6b6ce7822a7d7ea0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/bot/update-order/route.ts:64"}, "properties": {"repobilityId": "c590f8b4cbccb2a4", "scanner": "scanner-primary", "fingerprint": "6b6ce7822a7d7ea0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-efd34446521cda1b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/orders/create/route.ts:125"}, "properties": {"repobilityId": "93ee6d6cd49301d7", "scanner": "scanner-primary", "fingerprint": "efd34446521cda1b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a94e02934db9d00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/orders/webhook-to-automation/route.ts:64"}, "properties": {"repobilityId": "4e672e8fc4e5748d", "scanner": "scanner-primary", "fingerprint": "8a94e02934db9d00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2668b0109af43e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/twa/bossrobux/route.ts:12"}, "properties": {"repobilityId": "642b6afc73f459c8", "scanner": "scanner-primary", "fingerprint": "e2668b0109af43e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a02467d3f9ea47b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/tinkoff/route.ts:31"}, "properties": {"repobilityId": "edbe8ef566a8b939", "scanner": "scanner-primary", "fingerprint": "5a02467d3f9ea47b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0bd23e4ec73c45a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/page.tsx:134"}, "properties": {"repobilityId": "8d313b2589100140", "scanner": "scanner-primary", "fingerprint": "d0bd23e4ec73c45a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0062ce59452885f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/twa/page.tsx:11"}, "properties": {"repobilityId": "ebaa3af05dc2e71c", "scanner": "scanner-primary", "fingerprint": "e0062ce59452885f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b6d23650219a137d", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/app/twa/layout.tsx:4"}, "properties": {"repobilityId": "ad392eeef17504f4", "scanner": "scanner-primary", "fingerprint": "b6d23650219a137d", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-096f2a653c7e1b56", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 src/app/twa/_components/screens/BossrobuxScreen.tsx:529"}, "properties": {"repobilityId": "9d7f0128ce15cd5e", "scanner": "scanner-primary", "fingerprint": "096f2a653c7e1b56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-85149688fdfb103c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/checkout/page.tsx:278"}, "properties": {"repobilityId": "27177db08dac7f3e", "scanner": "scanner-primary", "fingerprint": "85149688fdfb103c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e97265200dfb7b76", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/payment/status/page.tsx:80"}, "properties": {"repobilityId": "d922ec17760bb62a", "scanner": "scanner-primary", "fingerprint": "e97265200dfb7b76", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ea0769065ed41804", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "properties": {"repobilityId": "a176f8eef35af5cb", "scanner": "scanner-primary", "fingerprint": "ea0769065ed41804", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-ea0769065ed41804", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "properties": {"repobilityId": "d3e6ee07439ffd33", "scanner": "scanner-primary", "fingerprint": "ea0769065ed41804", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-ea0769065ed41804", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "properties": {"repobilityId": "3fca5159a2bb0ec0", "scanner": "scanner-primary", "fingerprint": "ea0769065ed41804", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-0023b29883b64ae1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "properties": {"repobilityId": "a36345b512f5c2cf", "scanner": "scanner-primary", "fingerprint": "0023b29883b64ae1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bots/tg/Dockerfile"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-0023b29883b64ae1", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "properties": {"repobilityId": "6ccea0c11f43d025", "scanner": "scanner-primary", "fingerprint": "0023b29883b64ae1", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bots/tg/Dockerfile"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-1c6db5852112c86d", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "properties": {"repobilityId": "b966ff7f46f81cd8", "scanner": "scanner-primary", "fingerprint": "1c6db5852112c86d", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bots/vk/Dockerfile"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-1c6db5852112c86d", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:${NODE_VERSION}"}, "properties": {"repobilityId": "5299dfbe5e6ed211", "scanner": "scanner-primary", "fingerprint": "1c6db5852112c86d", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bots/vk/Dockerfile"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-30d3d865135c596c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in src/components/auth/VKAuthButton.tsx:65"}, "properties": {"repobilityId": "37ac9666a7d6dd13", "scanner": "scanner-primary", "fingerprint": "30d3d865135c596c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/auth/VKAuthButton.tsx"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-986d20b061b043ae", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/ui/spotlight-card.tsx:169"}, "properties": {"repobilityId": "4fb19d50e0131d1d", "scanner": "scanner-primary", "fingerprint": "986d20b061b043ae", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/ui/spotlight-card.tsx"}, "region": {"startLine": 169}}}]}, {"ruleId": "scanner-a267942e55a71235", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/layout.tsx:50"}, "properties": {"repobilityId": "0bca654fa2052eb0", "scanner": "scanner-primary", "fingerprint": "a267942e55a71235", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/layout.tsx"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-5e37c5b4d5ae44cd", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/twa/page.tsx:11"}, "properties": {"repobilityId": "d2bb89335636620f", "scanner": "scanner-primary", "fingerprint": "5e37c5b4d5ae44cd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/twa/page.tsx"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-8164a53c906d5ac3", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/app/twa/layout.tsx:4"}, "properties": {"repobilityId": "87c25585b2cf8351", "scanner": "scanner-primary", "fingerprint": "8164a53c906d5ac3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/twa/layout.tsx"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-c0abfd2b3657cc1b", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in src/app/twa/_components/TwaApp.tsx:116"}, "properties": {"repobilityId": "d2d588294fa4352d", "scanner": "scanner-primary", "fingerprint": "c0abfd2b3657cc1b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/twa/_components/TwaApp.tsx"}, "region": {"startLine": 116}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1bb761b9a18c6b79", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "07099b3c11709572", "scanner": "scanner-primary", "fingerprint": "1bb761b9a18c6b79", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bots/tg/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac87cf2443d42210", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "4a24e67c69a33990", "scanner": "scanner-primary", "fingerprint": "ac87cf2443d42210", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bots/vk/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-91e30c255283d202", "level": "note", "message": {"text": "Very large file: bots/tg/handlers.ts (3201 lines)"}, "properties": {"repobilityId": "95f4112827bc1e0f", "scanner": "scanner-primary", "fingerprint": "91e30c255283d202", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fb8e14aacddf4844", "level": "note", "message": {"text": "Very large file: bots/tg/admin/hub-wildberries.ts (1454 lines)"}, "properties": {"repobilityId": "9908d388c03bc5de", "scanner": "scanner-primary", "fingerprint": "fb8e14aacddf4844", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ecd0bb973f5aff2b", "level": "note", "message": {"text": "Very large file: bots/vk/handlers.ts (1930 lines)"}, "properties": {"repobilityId": "6d9032679ca58a2a", "scanner": "scanner-primary", "fingerprint": "ecd0bb973f5aff2b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-09670cdac0f1ffc0", "level": "note", "message": {"text": "Very large file: src/app/twa/_components/screens/OrdersScreen.tsx (1358 lines)"}, "properties": {"repobilityId": "1d78cc5fa68cc843", "scanner": "scanner-primary", "fingerprint": "09670cdac0f1ffc0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2575e1f3ca34b5ba", "level": "note", "message": {"text": "Very large file: src/app/guide/GuideClient.tsx (2976 lines)"}, "properties": {"repobilityId": "769e3086e8bb36a7", "scanner": "scanner-primary", "fingerprint": "2575e1f3ca34b5ba", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "f1b39761a8efa74f", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-d1f7a25b73776e62", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: bots/vk/package.json"}, "properties": {"repobilityId": "cf2b642bbb682f23", "scanner": "scanner-primary", "fingerprint": "d1f7a25b73776e62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "bots/vk/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "868598e2bdbea27e", "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": "9050aa807e74b482", "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": "42e603ab620e8182", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "50eccc26e82d1fb0", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "0eff883651b6281d", "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": "32a806eec7d6fa56", "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": "e12723a66a22273f", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-832f8218232616fd", "level": "none", "message": {"text": "Commented-code block (5 lines) in next.config.ts:11"}, "properties": {"repobilityId": "4fdb806e7069ac58", "scanner": "scanner-primary", "fingerprint": "832f8218232616fd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70433a686126d4f0", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/refresh-database.ts:146"}, "properties": {"repobilityId": "accbea0ad4c43b60", "scanner": "scanner-primary", "fingerprint": "70433a686126d4f0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddc1ef2510fc876d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/reject_gamepass.ts:39"}, "properties": {"repobilityId": "cceb0a6469cc4dfd", "scanner": "scanner-primary", "fingerprint": "ddc1ef2510fc876d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe2a4f787c7494b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/grant-review-bonus.ts:45"}, "properties": {"repobilityId": "4757d504f68c0f34", "scanner": "scanner-primary", "fingerprint": "fe2a4f787c7494b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00ed2f2b763eecd4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/enrich-tg-usernames.ts:40"}, "properties": {"repobilityId": "a4ec7d79f6754643", "scanner": "scanner-primary", "fingerprint": "00ed2f2b763eecd4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e7baeb6b7f1f8f78", "level": "none", "message": {"text": "Commented-code block (5 lines) in bots/shared/bridge.ts:74"}, "properties": {"repobilityId": "dd4744ea17229cb1", "scanner": "scanner-primary", "fingerprint": "e7baeb6b7f1f8f78", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc93ada291620aaa", "level": "none", "message": {"text": "Commented-code block (10 lines) in bots/shared/roblox.ts:453"}, "properties": {"repobilityId": "eae0a8f51f80dfc1", "scanner": "scanner-primary", "fingerprint": "cc93ada291620aaa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-343cc04ad18761a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 bots/shared/notify.ts:116"}, "properties": {"repobilityId": "14da9e61aa5120d2", "scanner": "scanner-primary", "fingerprint": "343cc04ad18761a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-73fc5e3ebee65c02", "level": "none", "message": {"text": "Commented-code block (7 lines) in bots/tg/handlers.ts:765"}, "properties": {"repobilityId": "a78e528eff740f04", "scanner": "scanner-primary", "fingerprint": "73fc5e3ebee65c02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a57b6c6d35ae4cc", "level": "none", "message": {"text": "Commented-code block (7 lines) in bots/vk/handlers.ts:200"}, "properties": {"repobilityId": "6195c337be336f37", "scanner": "scanner-primary", "fingerprint": "5a57b6c6d35ae4cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-47818cbc996275ff", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/auth.ts:193"}, "properties": {"repobilityId": "d991fb9cbe821dca", "scanner": "scanner-primary", "fingerprint": "47818cbc996275ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a4ae7f0977d74664", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/connectivity-assistant.tsx:115"}, "properties": {"repobilityId": "45002c7e3a9c1edd", "scanner": "scanner-primary", "fingerprint": "a4ae7f0977d74664", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19994a8fcff53e52", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/order-list.tsx:123"}, "properties": {"repobilityId": "de5813b0c3d68069", "scanner": "scanner-primary", "fingerprint": "19994a8fcff53e52", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-73735cb22bf7f608", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin/product-list.tsx:37"}, "properties": {"repobilityId": "222142441bd02229", "scanner": "scanner-primary", "fingerprint": "73735cb22bf7f608", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5e3cff1e274282bd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/login/page.tsx:35"}, "properties": {"repobilityId": "ac35155eff73b80b", "scanner": "scanner-primary", "fingerprint": "5e3cff1e274282bd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fe28307afcf25b4d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/orders/create/route.ts:168"}, "properties": {"repobilityId": "bdd63eab53764ab2", "scanner": "scanner-primary", "fingerprint": "fe28307afcf25b4d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-019b02a40c4316fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/twa/orders/route.ts:265"}, "properties": {"repobilityId": "c9a164939f5b65c0", "scanner": "scanner-primary", "fingerprint": "019b02a40c4316fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-40c6eb9172aeef1d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/twa/system/route.ts:111"}, "properties": {"repobilityId": "254b40ce6fd8f9a5", "scanner": "scanner-primary", "fingerprint": "40c6eb9172aeef1d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e48d9fda5dc9ae04", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/webhooks/tinkoff/route.ts:21"}, "properties": {"repobilityId": "c7e8539c52e688ed", "scanner": "scanner-primary", "fingerprint": "e48d9fda5dc9ae04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6f8a0fc028e59171", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/webhooks/tinkoff/route.ts:24"}, "properties": {"repobilityId": "88638fbb746b7599", "scanner": "scanner-primary", "fingerprint": "6f8a0fc028e59171", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4123646e2d0c710f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/CalcScreen.tsx:567"}, "properties": {"repobilityId": "074e9d45ccae0325", "scanner": "scanner-primary", "fingerprint": "4123646e2d0c710f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f69cf4ccf340f81d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/StocksScreen.tsx:190"}, "properties": {"repobilityId": "b5deef7387415b8b", "scanner": "scanner-primary", "fingerprint": "f69cf4ccf340f81d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-441f82f44dee102a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/SettingsScreen.tsx:169"}, "properties": {"repobilityId": "9936c51e857842cb", "scanner": "scanner-primary", "fingerprint": "441f82f44dee102a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-77e667b8fea501c1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/AnalyticsScreen.tsx:30"}, "properties": {"repobilityId": "db4d042db0643e61", "scanner": "scanner-primary", "fingerprint": "77e667b8fea501c1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2652801943647935", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/OrdersScreen.tsx:971"}, "properties": {"repobilityId": "3b43dc9fd6936092", "scanner": "scanner-primary", "fingerprint": "2652801943647935", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-975b76103e277ad4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/BossrobuxScreen.tsx:447"}, "properties": {"repobilityId": "466a1044ca09c1ca", "scanner": "scanner-primary", "fingerprint": "975b76103e277ad4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af7cdb67c0f573d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/twa/_components/screens/CodesScreen.tsx:75"}, "properties": {"repobilityId": "3945bdf31f718d52", "scanner": "scanner-primary", "fingerprint": "af7cdb67c0f573d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50bce1ce2574f444", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/guide/GuideClient.tsx:547"}, "properties": {"repobilityId": "9c0e343fe270e076", "scanner": "scanner-primary", "fingerprint": "50bce1ce2574f444", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1908164290984f1d", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/guide/page.tsx:25"}, "properties": {"repobilityId": "36af04be6301e5f6", "scanner": "scanner-primary", "fingerprint": "1908164290984f1d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73581e3769303d85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/telegram.ts:29"}, "properties": {"repobilityId": "1df489a8db381f43", "scanner": "scanner-primary", "fingerprint": "73581e3769303d85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}