{"data":{"skill":{"slug":"wshobson-react-state-management","name":"react-state-management","icon":"📦","repo":"https://github.com/wshobson/agents/tree/main/plugins/frontend-mobile-development/skills/react-state-management","status":"approved","author":"wshobson","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"cbc75043-40a9-44fd-a309-3619755b8d81","skill_id":"804c032f-e5c6-4560-9ab3-3f99d77e7d99","version":4,"content_hash":"8869cad8133a9c7ef0fa190b9492f556","risk_level":"medium","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":null,"manual_install_policy":null,"summary":"AI analysis failed after multiple attempts - MANUAL REVIEW REQUIRED before publishing. This skill cannot be auto-published until reviewed by a human.","remediation":[],"risk_factor_evidence":[{"factor":"network","evidence":[{"file":"SKILL.md","line_end":142,"line_start":142},{"file":"SKILL.md","line_end":254,"line_start":254},{"file":"SKILL.md","line_end":426,"line_start":426},{"file":"SKILL.md","line_end":427,"line_start":427},{"file":"SKILL.md","line_end":428,"line_start":428},{"file":"SKILL.md","line_end":429,"line_start":429}]},{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":38,"line_start":33},{"file":"SKILL.md","line_end":44,"line_start":38},{"file":"SKILL.md","line_end":82,"line_start":44},{"file":"SKILL.md","line_end":88,"line_start":82},{"file":"SKILL.md","line_end":114,"line_start":88},{"file":"SKILL.md","line_end":116,"line_start":114},{"file":"SKILL.md","line_end":142,"line_start":116},{"file":"SKILL.md","line_end":183,"line_start":142},{"file":"SKILL.md","line_end":187,"line_start":183},{"file":"SKILL.md","line_end":232,"line_start":187},{"file":"SKILL.md","line_end":236,"line_start":232},{"file":"SKILL.md","line_end":254,"line_start":236},{"file":"SKILL.md","line_end":277,"line_start":254},{"file":"SKILL.md","line_end":281,"line_start":277},{"file":"SKILL.md","line_end":344,"line_start":281},{"file":"SKILL.md","line_end":348,"line_start":344},{"file":"SKILL.md","line_end":376,"line_start":348},{"file":"SKILL.md","line_end":398,"line_start":376},{"file":"SKILL.md","line_end":422,"line_start":398}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":426,"line_start":426},{"file":"SKILL.md","line_end":427,"line_start":427},{"file":"SKILL.md","line_end":428,"line_start":428},{"file":"SKILL.md","line_end":429,"line_start":429}],"description":"Hardcoded URL detected in code"},{"title":"Weak cryptographic algorithm","locations":[{"file":"SKILL.md","line_end":3,"line_start":3},{"file":"SKILL.md","line_end":23,"line_start":23},{"file":"SKILL.md","line_end":394,"line_start":394}],"description":"Weak cryptographic algorithm detected in code"},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":38,"line_start":33},{"file":"SKILL.md","line_end":44,"line_start":38},{"file":"SKILL.md","line_end":82,"line_start":44},{"file":"SKILL.md","line_end":88,"line_start":82},{"file":"SKILL.md","line_end":114,"line_start":88},{"file":"SKILL.md","line_end":116,"line_start":114},{"file":"SKILL.md","line_end":142,"line_start":116},{"file":"SKILL.md","line_end":183,"line_start":142},{"file":"SKILL.md","line_end":187,"line_start":183},{"file":"SKILL.md","line_end":232,"line_start":187},{"file":"SKILL.md","line_end":236,"line_start":232},{"file":"SKILL.md","line_end":254,"line_start":236},{"file":"SKILL.md","line_end":277,"line_start":254},{"file":"SKILL.md","line_end":281,"line_start":277},{"file":"SKILL.md","line_end":344,"line_start":281},{"file":"SKILL.md","line_end":348,"line_start":344},{"file":"SKILL.md","line_end":376,"line_start":348},{"file":"SKILL.md","line_end":398,"line_start":376},{"file":"SKILL.md","line_end":422,"line_start":398}],"description":"Ruby/shell backtick execution detected in code"},{"title":"Fetch API call","locations":[{"file":"SKILL.md","line_end":142,"line_start":142},{"file":"SKILL.md","line_end":254,"line_start":254}],"description":"Fetch API call detected in code"},{"title":"Browser storage access","locations":[{"file":"SKILL.md","line_end":247,"line_start":247},{"file":"SKILL.md","line_end":262,"line_start":262}],"description":"Browser storage access detected in code"},{"title":"System reconnaissance","locations":[{"file":"SKILL.md","line_end":53,"line_start":52},{"file":"SKILL.md","line_end":54,"line_start":53},{"file":"SKILL.md","line_end":196,"line_start":195},{"file":"SKILL.md","line_end":310,"line_start":309}],"description":"System reconnaissance detected in code"},{"title":"[HEURISTIC] DANGEROUS COMBINATION: Code execution + Network + Credential access","locations":[{"file":"multiple","line_end":1,"line_start":1}],"description":"[HEURISTIC] DANGEROUS COMBINATION: Code execution + Network + Credential access detected in code"}],"files_scanned":2,"total_lines":622,"audit_model":"claude","audited_at":"2026-01-17T09:43:49.202+00:00","created_at":"2026-01-21T01:53:54.164672+00:00","static_findings":[],"finding_verdicts":[],"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":"canonical install advisories are incomplete"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":null,"manualInstallPolicy":null,"artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}