{"data":{"skill":{"slug":"sickn33-kotlin-coroutines-expert","name":"kotlin-coroutines-expert","icon":"📦","repo":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/kotlin-coroutines-expert","status":"approved","author":"sickn33","authorVersion":null,"skillstoreRevision":2},"audit":{"id":"fb1f9c4c-dc5b-4fd2-af64-6bc177b67358","skill_id":"8d1a63a4-8a65-466c-b4df-36bb57232456","version":5,"content_hash":"v3:87d2ca82d84d07dae06405ce317bfeec8945441b:8e61a5ce1344b01f7c1bac623a9189cb889ab9c20156242224a172225d69d91b:4e2e2ce175fe68633f0dc8e47795ad7cfb52a0c674db3bab2d1c2eb6e6ff4f22:736b696c6c732f7369636b6e33332f6b6f746c696e2d636f726f7574696e65732d657870657274:b7cb3407f266ecbf765bc2639f1f9e1d","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 19 static findings are false positives caused by Markdown backticks used for Kotlin identifiers and fenced Kotlin examples. The skill contains no command execution instructions, prompt injection, or intent-level security concerns.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":13,"line_start":13},{"file":"SKILL.md","line_end":18,"line_start":18},{"file":"SKILL.md","line_end":26,"line_start":26},{"file":"SKILL.md","line_end":38,"line_start":28},{"file":"SKILL.md","line_end":42,"line_start":38},{"file":"SKILL.md","line_end":42,"line_start":42},{"file":"SKILL.md","line_end":56,"line_start":44},{"file":"SKILL.md","line_end":60,"line_start":56},{"file":"SKILL.md","line_end":60,"line_start":60},{"file":"SKILL.md","line_end":71,"line_start":62},{"file":"SKILL.md","line_end":77,"line_start":71},{"file":"SKILL.md","line_end":88,"line_start":77},{"file":"SKILL.md","line_end":92,"line_start":88},{"file":"SKILL.md","line_end":93,"line_start":92},{"file":"SKILL.md","line_end":94,"line_start":93},{"file":"SKILL.md","line_end":94,"line_start":94},{"file":"SKILL.md","line_end":96,"line_start":95},{"file":"SKILL.md","line_end":101,"line_start":96},{"file":"SKILL.md","line_end":101,"line_start":101}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":107,"audit_model":"codex","audited_at":"2026-08-05T02:10:28.903+00:00","created_at":"2026-08-05T02:18:03.034175+00:00","static_findings":[{"id":"external_commands:SKILL.md:13:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"A guide to mastering asynchronous programming with Kotlin Coroutines. Covers advanced topics like st","category":"external_commands","line_end":13,"severity":"medium","line_start":13},{"id":"external_commands:SKILL.md:18:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Use when designing reactive data streams with `Flow`.","category":"external_commands","line_end":18,"severity":"medium","line_start":18},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Always launch coroutines within a defined `CoroutineScope`. Use `coroutineScope` or `supervisorScope","category":"external_commands","line_end":26,"severity":"medium","line_start":26},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```kotlin","category":"external_commands","line_end":38,"severity":"medium","line_start":28},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":42,"severity":"medium","line_start":38},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Use `CoroutineExceptionHandler` for top-level scopes, but rely on `try-catch` within suspending func","category":"external_commands","line_end":42,"severity":"medium","line_start":42},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```kotlin","category":"external_commands","line_end":56,"severity":"medium","line_start":44},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":60,"severity":"medium","line_start":56},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Use `StateFlow` for state that needs to be retained, and `SharedFlow` for events.","category":"external_commands","line_end":60,"severity":"medium","line_start":60},{"id":"external_commands:SKILL.md:62:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```kotlin","category":"external_commands","line_end":71,"severity":"medium","line_start":62},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":77,"severity":"medium","line_start":71},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```kotlin","category":"external_commands","line_end":88,"severity":"medium","line_start":77},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":92,"severity":"medium","line_start":88},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- ✅ **Do:** Use `Dispatchers.IO` for blocking I/O operations.","category":"external_commands","line_end":93,"severity":"medium","line_start":92},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- ✅ **Do:** Cancel scopes when they are no longer needed (e.g., `ViewModel.onCleared`).","category":"external_commands","line_end":94,"severity":"medium","line_start":93},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- ✅ **Do:** Use `TestScope` and `runTest` for unit testing coroutines.","category":"external_commands","line_end":94,"severity":"medium","line_start":94},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- ❌ **Don't:** Use `GlobalScope`. It breaks structured concurrency and can lead to leaks.","category":"external_commands","line_end":96,"severity":"medium","line_start":95},{"id":"external_commands:SKILL.md:96:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- ❌ **Don't:** Catch `CancellationException` unless you rethrow it.","category":"external_commands","line_end":101,"severity":"medium","line_start":96},{"id":"external_commands:SKILL.md:101:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"**Solution:** Ensure you are using `runTest` and injecting `TestDispatcher` into your classes so you","category":"external_commands","line_end":101,"severity":"medium","line_start":101}],"finding_verdicts":[{"id":"external_commands:SKILL.md:13:ruby-shell-backtick-execution","reason":"Line 13 uses Markdown backticks to format the Kotlin Flow type. It does not contain a shell command or execution instruction.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:18:ruby-shell-backtick-execution","reason":"Line 18 uses Markdown backticks around the Kotlin Flow type. No Ruby or shell execution is present.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","reason":"Line 26 formats Kotlin API names with inline Markdown code. The text provides coroutine guidance and executes nothing.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","reason":"Lines 28 through 38 are a fenced Kotlin example showing coroutineScope and async. The backticks are Markdown delimiters, not command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","reason":"Line 38 closes a fenced Kotlin example. The backticks only delimit documentation and have no execution semantics.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","reason":"Line 42 formats Kotlin exception-handling identifiers as inline code. It neither invokes an external process nor recommends doing so.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:44:ruby-shell-backtick-execution","reason":"Lines 44 through 56 contain a fenced Kotlin exception-handling example. Markdown backticks label the code block and do not execute it.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:56:ruby-shell-backtick-execution","reason":"Line 56 is the closing delimiter for a Kotlin code fence. It is documentation syntax without shell behavior.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:60:ruby-shell-backtick-execution","reason":"Line 60 formats the Kotlin StateFlow and SharedFlow types. No command, subprocess, or executable payload appears.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:62:ruby-shell-backtick-execution","reason":"Lines 62 through 71 are a fenced Kotlin Flow example. The detected backticks are Markdown syntax rather than Ruby or shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","reason":"Line 71 closes the Kotlin Flow code fence. It cannot invoke an external command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","reason":"Lines 77 through 88 show Kotlin supervisorScope and async usage in a fenced block. The block contains no shell integration.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","reason":"Line 88 is only the closing Markdown fence for a Kotlin example. No external command is executed.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","reason":"Line 92 uses inline code formatting for the Kotlin Dispatchers.IO API. The recommendation concerns thread dispatching, not operating-system commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","reason":"Line 93 formats the Android ViewModel.onCleared lifecycle method. There is no command execution or user-controlled input.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","reason":"Line 94 formats Kotlin coroutine testing APIs with Markdown backticks. The text recommends unit-testing utilities only.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","reason":"Line 95 formats the Kotlin GlobalScope identifier while warning against it. This is documentation, not shell command substitution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:96:ruby-shell-backtick-execution","reason":"Line 96 formats the Kotlin CancellationException type. The surrounding advice addresses cancellation handling and contains no external command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:101:ruby-shell-backtick-execution","reason":"Line 101 formats the Kotlin runTest and TestDispatcher APIs. The troubleshooting guidance does not invoke commands or external processes.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[],"subject_marketplace_commit_sha":"87d2ca82d84d07dae06405ce317bfeec8945441b","subject_content_hash":"8e61a5ce1344b01f7c1bac623a9189cb889ab9c20156242224a172225d69d91b","subject_tree_hash":"4e2e2ce175fe68633f0dc8e47795ad7cfb52a0c674db3bab2d1c2eb6e6ff4f22","subject_plugin_path":"skills/sickn33/kotlin-coroutines-expert","audit_payload_hash":"b7cb3407f266ecbf765bc2639f1f9e1d","confirmed_risk_level":"safe","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"87d2ca82d84d07dae06405ce317bfeec8945441b","contentHash":"8e61a5ce1344b01f7c1bac623a9189cb889ab9c20156242224a172225d69d91b","treeHash":"4e2e2ce175fe68633f0dc8e47795ad7cfb52a0c674db3bab2d1c2eb6e6ff4f22","pluginPath":"skills/sickn33/kotlin-coroutines-expert","auditPayloadHash":"b7cb3407f266ecbf765bc2639f1f9e1d"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/sickn33-kotlin-coroutines-expert/audits/5/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}