{"data":{"skill":{"slug":"babakbar-mobile-testing","name":"Mobile Testing","icon":"📦","repo":"https://github.com/BabakBar/VibeKeeper/tree/main/.claude/skills/testing","status":"approved","author":"BabakBar","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"7d5eed3e-25d6-416d-9cab-9f900a73a3ed","skill_id":"15f39f6c-b161-4a09-8232-c21d550d6e15","version":7,"content_hash":"v2:5ab1d37e83436c6eef84de88573e142b94f2a4ad:fa878a54307ffdc62d8759ee413dbd4c8569e1fd03f8f4449c986dc835545ad7:cbaba1f1cde645d8c8518fccfb51fb0c31631845b143088c8b91b784ba69765a:6276f1e3635b756e0ce11643948c9370","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"The detected external command patterns are markdown fences, inline formatting, and Jest examples, not executable Ruby backtick calls. The two hardcoded URLs are documentation links, and the blocker detections are normal invalid-input test examples; no semantic prompt injection or malicious intent was found.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":33,"line_start":21},{"file":"SKILL.md","line_end":37,"line_start":33},{"file":"SKILL.md","line_end":57,"line_start":37},{"file":"SKILL.md","line_end":61,"line_start":57},{"file":"SKILL.md","line_end":76,"line_start":61},{"file":"SKILL.md","line_end":80,"line_start":76},{"file":"SKILL.md","line_end":93,"line_start":80},{"file":"SKILL.md","line_end":98,"line_start":93},{"file":"SKILL.md","line_end":102,"line_start":98},{"file":"SKILL.md","line_end":105,"line_start":102},{"file":"SKILL.md","line_end":112,"line_start":105},{"file":"SKILL.md","line_end":115,"line_start":112},{"file":"SKILL.md","line_end":122,"line_start":115},{"file":"SKILL.md","line_end":126,"line_start":122},{"file":"SKILL.md","line_end":141,"line_start":126},{"file":"SKILL.md","line_end":146,"line_start":141},{"file":"SKILL.md","line_end":150,"line_start":146},{"file":"SKILL.md","line_end":150,"line_start":150},{"file":"SKILL.md","line_end":160,"line_start":155},{"file":"SKILL.md","line_end":163,"line_start":160},{"file":"SKILL.md","line_end":172,"line_start":163},{"file":"SKILL.md","line_end":175,"line_start":172},{"file":"SKILL.md","line_end":182,"line_start":175},{"file":"SKILL.md","line_end":187,"line_start":182},{"file":"SKILL.md","line_end":189,"line_start":187},{"file":"SKILL.md","line_end":189,"line_start":189}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":193,"line_start":193},{"file":"SKILL.md","line_end":194,"line_start":194}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":1,"total_lines":195,"audit_model":"codex","audited_at":"2026-07-05T04:59:18.21+00:00","created_at":"2026-07-05T05:47:42.262728+00:00","static_findings":[{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":33,"severity":"medium","line_start":21},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":37,"severity":"medium","line_start":33},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":57,"severity":"medium","line_start":37},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":61,"severity":"medium","line_start":57},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":76,"severity":"medium","line_start":61},{"id":"external_commands:SKILL.md:76:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":80,"severity":"medium","line_start":76},{"id":"external_commands:SKILL.md:80:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":93,"severity":"medium","line_start":80},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":98,"severity":"medium","line_start":93},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":102,"severity":"medium","line_start":98},{"id":"external_commands:SKILL.md:102:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":105,"severity":"medium","line_start":102},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":112,"severity":"medium","line_start":105},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":115,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:115:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":122,"severity":"medium","line_start":115},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":126,"severity":"medium","line_start":122},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":141,"severity":"medium","line_start":126},{"id":"external_commands:SKILL.md:141:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":146,"severity":"medium","line_start":141},{"id":"external_commands:SKILL.md:146:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. **Use `testID` for Selection**: More reliable than text matching","category":"external_commands","line_end":150,"severity":"medium","line_start":146},{"id":"external_commands:SKILL.md:150:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"6. **Clean Up**: Use `beforeEach`/`afterEach` for setup/teardown","category":"external_commands","line_end":150,"severity":"medium","line_start":150},{"id":"external_commands:SKILL.md:155:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":160,"severity":"medium","line_start":155},{"id":"external_commands:SKILL.md:160:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":163,"severity":"medium","line_start":160},{"id":"external_commands:SKILL.md:163:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":172,"severity":"medium","line_start":163},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":175,"severity":"medium","line_start":172},{"id":"external_commands:SKILL.md:175:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":182,"severity":"medium","line_start":175},{"id":"external_commands:SKILL.md:182:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":187,"severity":"medium","line_start":182},{"id":"external_commands:SKILL.md:187:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Can't find element**: Use `screen.debug()` to see rendered output","category":"external_commands","line_end":189,"severity":"medium","line_start":187},{"id":"external_commands:SKILL.md:189:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **Async issues**: Use `waitFor` or `findBy` queries","category":"external_commands","line_end":189,"severity":"medium","line_start":189},{"id":"network:SKILL.md:193:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- [Jest Docs](https://jestjs.io/)","category":"network","line_end":193,"severity":"low","line_start":193},{"id":"network:SKILL.md:194:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- [React Native Testing Library](https://callstack.github.io/react-native-testing-library/)","category":"network","line_end":194,"severity":"low","line_start":194},{"id":"blocker:SKILL.md:89:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"it('handles invalid input', () => {","category":"blocker","line_end":89,"severity":"low","line_start":89},{"id":"blocker:SKILL.md:170:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"expect(getByText('Invalid email')).toBeTruthy();","category":"blocker","line_end":170,"severity":"low","line_start":170}],"finding_verdicts":[{"id":"external_commands:SKILL.md:21:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:57:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:76:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:80:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:102:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:105:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:115:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:126:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:141:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:146:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:150:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:155:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:160:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:163:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:172:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:175:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:182:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:187:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"external_commands:SKILL.md:189:ruby-shell-backtick-execution","reason":"The flagged content is markdown backtick formatting around bash or TypeScript examples. It is not Ruby shell execution or dynamic command construction.","verdict":"false_positive","confidence":0.96},{"id":"network:SKILL.md:193:hardcoded-url","reason":"The hardcoded URL is a public documentation link in the Resources section. It does not transmit data or trigger a network request by itself.","verdict":"false_positive","confidence":0.95},{"id":"network:SKILL.md:194:hardcoded-url","reason":"The hardcoded URL is a public documentation link in the Resources section. It does not transmit data or trigger a network request by itself.","verdict":"false_positive","confidence":0.95},{"id":"blocker:SKILL.md:89:system-reconnaissance","reason":"The flagged text is part of a normal Jest invalid-input test example. It is not system reconnaissance or a request to inspect the host environment.","verdict":"false_positive","confidence":0.94},{"id":"blocker:SKILL.md:170:system-reconnaissance","reason":"The flagged text is part of a normal Jest invalid-input test example. It is not system reconnaissance or a request to inspect the host environment.","verdict":"false_positive","confidence":0.94}],"semantic_findings":[],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"confirmed_risk_level does not match the canonical trust resolver"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}