RikkaHub is an Android APP that supports for multiple LLM providers.
This report summarizes scanner evidence for rikkahub/rikkahub, a Kotlin project with 8,569 GitHub stars. SynthScan examined 297,960 lines of code across 1255 source files, recording 166 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 1.5 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 120 finding(s).
Are imports declared and package/API names verified? 38 finding(s).
Are wrappers, guards, and repeated structures necessary? 21 finding(s).
Which changes need focused human review? 166 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 166 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …e/rikkahub/ui/pages/chat/VoiceSessionControllerTest.kt | 163 | rig.queue.remove(rig.queue.state.value.messages.single().id) | CODE |
| CRITICAL | …e/rikkahub/ui/pages/chat/VoiceSessionControllerTest.kt | 180 | assertEquals("final", (rig.queue.state.value.messages.single().parts.single() as UIMessagePart.Text).text) | CODE |
| CRITICAL | …e/rikkahub/ui/pages/chat/VoiceSessionControllerTest.kt | 244 | val removed = rig.queue.state.value.messages.last() | CODE |
| CRITICAL | app/src/main/java/me/rerere/rikkahub/web/dto/WebDto.kt | 334 | fun me.rerere.rikkahub.data.model.Folder.toDto() = FolderDto( | CODE |
| CRITICAL | …rc/main/java/me/rerere/rikkahub/service/ChatService.kt | 383 | if (session.messageQueue.state.value.messages.isEmpty()) session.messageQueue.resume() | CODE |
| CRITICAL | …rc/main/java/me/rerere/rikkahub/service/ChatService.kt | 395 | check(!session.messageQueue.state.value.paused || session.messageQueue.state.value.messages.isEmpty()) { | CODE |
| CRITICAL | …rc/main/java/me/rerere/rikkahub/service/ChatService.kt | 401 | if (session.messageQueue.state.value.messages.isEmpty()) session.messageQueue.resume() | CODE |
| CRITICAL | …ain/java/me/rerere/rikkahub/data/remote/ProxyConfig.kt | 80 | settingsStore.settingsFlow.value.networkSetting.proxyUrl.toProxyOrNull()?.let { proxy -> | CODE |
| CRITICAL | …ain/java/me/rerere/rikkahub/data/remote/ProxyConfig.kt | 90 | if (settingsStore.settingsFlow.value.networkSetting.proxyUrl.toProxyOrNull() == null) { | CODE |
| CRITICAL⚡ | .agents/skills/claude-api/shared/admin-api.md | 115 | client.beta.organization.workspaces.members.add( | CODE |
| CRITICAL⚡ | .agents/skills/claude-api/shared/admin-api.md | 124 | client.beta.organization.workspaces.rate_limits.list("wrkspc_...") | CODE |
| CRITICAL⚡ | .agents/skills/claude-api/shared/admin-api.md | 128 | issuer = client.beta.organization.federation.issuers.create( | CODE |
| CRITICAL⚡ | .agents/skills/claude-api/shared/admin-api.md | 133 | client.beta.organization.federation.rules.create( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 56 | // Step 1: Interpret the pixels while taking into account the screen density | COMMENT |
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 60 | // Step 2: Create a container to hold the ComposeView temporarily | COMMENT |
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 66 | // Step 3: Create and configure the ComposeView using the activity | COMMENT |
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 79 | // Step 4: Attach container to the root decor view | COMMENT |
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 83 | // Step 5: Create measure specifications for the ComposeView | COMMENT |
| LOW | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 99 | // Step 5: Wait for the ComposeView to be drawn and capture the bitmap | COMMENT |
| LOW | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 138 | // Step 6: Clean up - remove the container | COMMENT |
| LOW | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 12 | ## Step 0: Confirm scope, current version, and target | COMMENT |
| LOW | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 22 | ## Step 1: Inventory the call sites | COMMENT |
| LOW | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 47 | ## Step 2: Environment - Python >= 3.10 and the dependency pins | COMMENT |
| LOW | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 143 | ## Step 5: Text Completions -> Messages (the one non-mechanical change) | COMMENT |
| LOW | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 174 | ## Step 6: Removed request parameters | COMMENT |
| LOW | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 197 | ## Step 7: Renamed and removed names (pure renames) | COMMENT |
| LOW | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 208 | ## Step 8: Removed helper arguments and behaviour | COMMENT |
| LOW⚡ | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 249 | ## Step 9: Header names are matched case-insensitively | COMMENT |
| LOW⚡ | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 253 | ## Step 10: Bedrock - a region is required | COMMENT |
| LOW⚡ | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 259 | ## Step 11: Verify | COMMENT |
| LOW⚡ | …nts/skills/claude-api/python/claude-api/sdk-upgrade.md | 265 | ## Step 12: Report | COMMENT |
| LOW | .agents/skills/claude-api/shared/cost-optimization.md | 18 | ## Step 0: Establish scope, quality bar, and baseline | COMMENT |
| LOW | .agents/skills/claude-api/shared/cost-optimization.md | 32 | ## Step 1: Profile where the tokens go | COMMENT |
| LOW | .agents/skills/claude-api/shared/cost-optimization.md | 93 | ## Step 2: Work the levers in order | COMMENT |
| LOW | .agents/skills/claude-api/shared/cost-optimization.md | 189 | ## Step 3: Apply, measure, keep or revert - one lever at a time | COMMENT |
| LOW | .agents/skills/claude-api/shared/cost-optimization.md | 222 | ## Step 4: Deliverables | COMMENT |
| LOW | …ills/claude-api/shared/preserved-thinking-migration.md | 32 | ## Step 0: Establish scope, quality bar, and baseline | COMMENT |
| LOW | …ills/claude-api/shared/preserved-thinking-migration.md | 57 | ## Step 1: Find the edits | COMMENT |
| LOW | …ills/claude-api/shared/preserved-thinking-migration.md | 114 | ## Step 2: Measure with `drop_block` on a test slice | COMMENT |
| LOW | …ills/claude-api/shared/preserved-thinking-migration.md | 185 | ## Step 3: Fix one cause per diff, re-measure, keep or revert | COMMENT |
| LOW | …ills/claude-api/shared/preserved-thinking-migration.md | 223 | ## Step 4: Deliverables | COMMENT |
| LOW | .agents/skills/claude-api/shared/model-migration.md | 54 | ## Step 0: Confirm the migration scope | COMMENT |
| LOW | .agents/skills/claude-api/shared/model-migration.md | 106 | ## Step 1: Classify each file | COMMENT |
| LOW | .agents/skills/claude-api/shared/prompt-audit.md | 20 | ## Step 0: Establish scope and target model | COMMENT |
| LOW | .agents/skills/claude-api/shared/prompt-audit.md | 27 | ## Step 1: Inventory the prompt surface | COMMENT |
| LOW⚡ | .agents/skills/claude-api/shared/prompt-audit.md | 39 | ## Step 2: Establish provenance | COMMENT |
| LOW⚡ | .agents/skills/claude-api/shared/prompt-audit.md | 45 | ## Step 3: Classify every line - the deletion rule | COMMENT |
| LOW⚡ | .agents/skills/claude-api/shared/prompt-audit.md | 54 | ## Step 4: Scan for the anti-pattern groups | COMMENT |
| LOW | .agents/skills/claude-api/shared/prompt-audit.md | 205 | ## Step 5: Produce the audit report | COMMENT |
| LOW | .agents/skills/claude-api/shared/prompt-audit.md | 222 | ## Step 6: Produce the proposed diff | COMMENT |
| LOW | .agents/skills/claude-api/shared/prompt-audit.md | 231 | ## Step 7: Verify - removal is a hypothesis, not a conclusion | COMMENT |
| LOW | .agents/skills/claude-api/shared/evals/build-eval.md | 19 | ## Step 0: Understand what's being evaluated | COMMENT |
| LOW | .agents/skills/claude-api/shared/evals/build-eval.md | 39 | ## Step 1: Find or build the input set | COMMENT |
| LOW | .agents/skills/claude-api/shared/evals/build-eval.md | 68 | ## Step 2: Decide how to grade | COMMENT |
| LOW | .agents/skills/claude-api/shared/evals/build-eval.md | 103 | ## Step 3: Make it runnable | COMMENT |
| LOW | .agents/skills/claude-api/shared/evals/build-eval.md | 193 | ## Step 4: Hand it over | COMMENT |
| LOW | …gents/skills/claude-api/shared/evals/eval-hillclimb.md | 17 | ## Step 0: Confirm there's a runnable eval | COMMENT |
| LOW | …gents/skills/claude-api/shared/evals/eval-hillclimb.md | 53 | ## Step 1: Agree on the goal, what to change, and how it's wired in | COMMENT |
| LOW | …gents/skills/claude-api/shared/evals/eval-hillclimb.md | 86 | ## Step 2: Agree on a stopping condition (and a budget, if cost matters) | COMMENT |
| LOW | …gents/skills/claude-api/shared/evals/eval-hillclimb.md | 124 | ## Step 3: Set up state, split the data, and take a baseline | COMMENT |
| LOW | …gents/skills/claude-api/shared/evals/eval-hillclimb.md | 223 | ## Step 4: The loop | COMMENT |
| LOW | …gents/skills/claude-api/shared/evals/eval-hillclimb.md | 304 | ## Step 5: Report and hand back | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/i18n/README.md | 15 | OPENAI_API_KEY=your_api_key | CODE |
| HIGH | …ub/ui/pages/setting/components/ASRProviderConfigure.kt | 285 | placeholder = { Text("your-api-key") } | CODE |
| HIGH | .agents/skills/claude-api/go/claude-api/README.md | 24 | option.WithAPIKey("your-api-key"), | CODE |
| HIGH | .agents/skills/claude-api/go/managed-agents/README.md | 28 | option.WithAPIKey("your-api-key"), | CODE |
| HIGH | .agents/skills/claude-api/python/claude-api/README.md | 20 | client = anthropic.Anthropic(api_key="your-api-key") | CODE |
| HIGH | …ents/skills/claude-api/python/managed-agents/README.md | 24 | client = anthropic.Anthropic(api_key="your-api-key") | CODE |
| HIGH | …ents/skills/claude-api/typescript/claude-api/README.md | 26 | const client = new Anthropic({ apiKey: "your-api-key" }); | CODE |
| HIGH | …/skills/claude-api/typescript/managed-agents/README.md | 24 | const client = new Anthropic({ apiKey: "your-api-key" }); | CODE |
| HIGH | .agents/skills/claude-api/java/claude-api/README.md | 71 | .apiKey("your-api-key") | CODE |
| HIGH | .agents/skills/claude-api/php/managed-agents/README.md | 22 | $client = new Client(apiKey: 'your-api-key'); | CODE |
| HIGH | .agents/skills/claude-api/curl/examples.md | 8 | export ANTHROPIC_API_KEY="your-api-key" | CODE |
| HIGH | .agents/skills/claude-api/curl/managed-agents.md | 8 | export ANTHROPIC_API_KEY="your-api-key" | CODE |
| HIGH | .agents/skills/claude-api/ruby/claude-api/README.md | 20 | client = Anthropic::Client.new(api_key: "your-api-key") | CODE |
| HIGH | .agents/skills/claude-api/ruby/managed-agents/README.md | 22 | client = Anthropic::Client.new(api_key: "your-api-key") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …-compose-performance/references/state-and-stability.md | 109 | ### Common patterns: backwards writes versus event-driven updates | COMMENT |
| MEDIUM | .agents/skills/claude-api/python/claude-api/tool-use.md | 28 | # The tool runner handles the agentic loop automatically | COMMENT |
| MEDIUM | …ts/skills/claude-api/typescript/claude-api/tool-use.md | 31 | // The tool runner handles the agentic loop and returns the final message | COMMENT |
| MEDIUM | .agents/skills/claude-api/shared/model-migration.md | 1751 | output_config={"effort": "high"}, # or "xhigh" for the hardest coding/agentic tasks | CODE |
| MEDIUM | …ude-api/shared/managed-agents-self-hosted-sandboxes.md | 206 | ## Container orchestration (mid-level) | COMMENT |
| MEDIUM | .agents/skills/claude-api/shared/tool-use-concepts.md | 135 | # Handle pause_turn in your agentic loop | COMMENT |
| MEDIUM | .agents/skills/claude-api/shared/models.md | 13 | m.max_input_tokens # context window (int) | CODE |
| MEDIUM | …api/shared/preserved-thinking-migration/prefix_diff.py | 1385 | # Each lead: (title, line pattern, context pattern or None, context window in lines, scope) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 118 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 248 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 381 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 398 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 432 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 494 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 570 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 626 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 732 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 855 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 1128 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 1291 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 1453 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 129 | CODE | |
| LOW | …api/shared/preserved-thinking-migration/prefix_diff.py | 259 | CODE | |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 144 | CODE | |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 197 | CODE | |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 254 | CODE | |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 442 | CODE | |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 613 | CODE | |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 771 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …api/shared/preserved-thinking-migration/prefix_diff.py | 78 | except (AttributeError, ValueError): # a non-TextIOWrapper stand-in; nothing to configure | CODE |
| HIGH | …hared/preserved-thinking-migration/drop_block_probe.py | 110 | except (AttributeError, ValueError): # a non-TextIOWrapper stand-in; nothing to configure | CODE |
| HIGH | …hared/preserved-thinking-migration/drop_block_probe.py | 1030 | except OSError: | CODE |
| HIGH | …hared/preserved-thinking-migration/drop_block_probe.py | 389 | except ValueError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/src/main/java/me/rerere/rikkahub/ui/theme/Type.kt | 21 | // ), | COMMENT |
| LOW | app/src/main/java/me/rerere/rikkahub/ui/theme/Type.kt | 41 | // ), | COMMENT |
| LOW | app/src/main/java/me/rerere/rikkahub/ui/theme/Type.kt | 61 | // ), | COMMENT |
| LOW | …src/main/java/me/rerere/rikkahub/ui/hooks/Lifecycle.kt | 21 | */ | COMMENT |
| LOW | …src/main/java/me/rerere/rikkahub/utils/DatabaseUtil.kt | 21 | // val field = | COMMENT |
| LOW | workspace/src/main/cpp/CMakeLists.txt | 1 | COMMENT | |
| LOW | workspace/src/main/cpp/CMakeLists.txt | 21 | # the target library name; in the sub-module's CMakeLists.txt, ${PROJECT_NAME} | COMMENT |
| LOW | workspace/src/main/cpp/workspace.cpp | 1 | // Write C++ code here. | COMMENT |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 481 | out[k.strip()] = v.strip() | COMMENT |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 501 | # indices carry the same six-digit budget as shareable_field_path and | COMMENT |
| LOW | …/src/test/java/com/termux/terminal/KeyHandlerTest.java | 61 | // K3=Upper right of keypad (xterm sends "<ESC>[5~" = Page Up). | COMMENT |
| LOW | …src/test/java/com/termux/terminal/TerminalRowTest.java | 381 | for (int point : points) { | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 901 | // names. | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 921 | // Xterm response in normal cursor mode: | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 1201 | // mouse report. | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 1221 | // (4) allows modification of function-keys, overrides use of Shift-modifier for UDK. | COMMENT |
| LOW | …rc/main/java/com/termux/terminal/TerminalEmulator.java | 1241 | // - Set it to 2 to force the modifier to be the second parameter if it would otherwise be the first. | COMMENT |
| LOW | terminal/src/main/cpp/termux_pty.cpp | 1 | #include <jni.h> | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | …hared/preserved-thinking-migration/drop_block_probe.py | 332 | # No tool may run during a replay, server-side or the harness's own: tool_choice is outside the compared | COMMENT |
| MEDIUM⚡ | …hared/preserved-thinking-migration/drop_block_probe.py | 341 | # part of the compared tool set, so removing the entry would read as a tool_set_changed break the harness | COMMENT |
| MEDIUM⚡ | …hared/preserved-thinking-migration/drop_block_probe.py | 342 | # never made. validate() warns when the entry carries an authorization_token (it goes out as the harness | COMMENT |
| MEDIUM | …hared/preserved-thinking-migration/drop_block_probe.py | 690 | # a thinking block whose text was changed is a different 400 ("cannot be modified"): a harness finding, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | web-ui/app/components/conversation-quick-jump.tsx | 8 | export function getConversationMessageAnchorId(messageId: string): string { | CODE |
| LOW | web-ui/app/components/markdown/code-block.tsx | 338 | export function CodeBlockLanguageSelector(props: CodeBlockLanguageSelectorProps) { | CODE |
| LOW | web-ui/app/components/markdown/code-block.tsx | 344 | export function CodeBlockLanguageSelectorTrigger({ | CODE |
| LOW⚡ | web-ui/app/components/markdown/code-block.tsx | 359 | export function CodeBlockLanguageSelectorValue(props: CodeBlockLanguageSelectorValueProps) { | CODE |
| LOW⚡ | web-ui/app/components/markdown/code-block.tsx | 365 | export function CodeBlockLanguageSelectorContent({ | CODE |
| LOW⚡ | web-ui/app/components/markdown/code-block.tsx | 374 | export function CodeBlockLanguageSelectorItem(props: CodeBlockLanguageSelectorItemProps) { | CODE |
| LOW | …ui/app/components/message/chat-message-annotations.tsx | 25 | export function ChatMessageAnnotationsRow({ | CODE |
| LOW | web-ui/app/components/message/chain-of-thought.tsx | 117 | function ControlledChainOfThoughtStep({ | CODE |
| LOW | web-ui/app/components/message/chain-of-thought.tsx | 139 | function ChainOfThoughtStepContent({ | CODE |
| LOW | web-ui/app/hooks/use-conversation-list.ts | 290 | export function toConversationSummaryUpdate( | CODE |
| LOW | web-ui/app/lib/export-markdown.ts | 31 | export function convertConversationToMarkdown( | CODE |
| LOW | web-ui/app/routes/conversations.tsx | 203 | function shouldDeleteAttachmentFileOnRemove(part: UIMessagePart): boolean { | CODE |
| LOW | …ents/skills/claude-api/shared/managed-agents-events.md | 259 | def connect_with_consolidation(client, session_id): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 56 | // Step 1: Interpret the pixels while taking into account the screen density | COMMENT |
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 60 | // Step 2: Create a container to hold the ComposeView temporarily | COMMENT |
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 66 | // Step 3: Create and configure the ComposeView using the activity | COMMENT |
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 79 | // Step 4: Attach container to the root decor view | COMMENT |
| LOW⚡ | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 83 | // Step 5: Create measure specifications for the ComposeView | COMMENT |
| LOW | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 99 | // Step 5: Wait for the ComposeView to be drawn and capture the bitmap | COMMENT |
| LOW | …rc/main/java/me/rerere/ui/components/BitmapComposer.kt | 138 | // Step 6: Clean up - remove the container | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …/me/rerere/rikkahub/data/ai/account/ChatGPTAuthTest.kt | 22 | "email": "user@example.com", | STRING |
| LOW | …/me/rerere/rikkahub/data/ai/account/ChatGPTAuthTest.kt | 48 | assertEquals("user@example.com", credential.email) | CODE |
| LOW | …/me/rerere/rikkahub/data/ai/account/ChatGPTAuthTest.kt | 69 | email = "user@example.com", | CODE |
| LOW | …/me/rerere/rikkahub/data/ai/account/ChatGPTAuthTest.kt | 82 | assertEquals("user@example.com", credential.email) | CODE |
| LOW | …n/java/me/rerere/rikkahub/ui/components/ui/UIAvatar.kt | 376 | name = "John Doe", | CODE |
| LOW | …n/java/me/rerere/rikkahub/ui/components/ui/UIAvatar.kt | 382 | name = "John Doe", | CODE |
| LOW | …main/java/me/rerere/rikkahub/ui/pages/debug/DebugVM.kt | 111 | append("Lorem ipsum dolor sit amet, consectetur adipiscing elit. ") | CODE |
| LOW | …main/java/me/rerere/rikkahub/ui/pages/debug/DebugVM.kt | 111 | append("Lorem ipsum dolor sit amet, consectetur adipiscing elit. ") | CODE |
| LOW | .agents/skills/claude-api/python/claude-api/tool-use.md | 530 | print(contact.name) # "Jane Doe" | CODE |
| LOW | …ts/skills/claude-api/typescript/claude-api/tool-use.md | 594 | console.log(response.parsed_output!.name); // "Jane Doe" | CODE |
| LOW⚡ | .agents/skills/claude-api/shared/admin-api.md | 111 | client.beta.organization.invites.create(email="user@example.com", role="developer") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .agents/skills/claude-api/python/claude-api/tool-use.md | 439 | print(f"Error: {result.stderr}") | CODE |
| LOW | …ts/skills/claude-api/shared/managed-agents-webhooks.md | 50 | except Exception: | CODE |
| MEDIUM | …ts/skills/claude-api/shared/managed-agents-webhooks.md | 44 | def webhook(): | CODE |
| LOW | …hared/preserved-thinking-migration/drop_block_probe.py | 116 | except Exception: # pragma: no cover | CODE |