cometchat-ios-features — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited cometchat-ios-features (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
cometchat-ios-core owns setup and the default surface. This skill ADDS one capability at a time. The feature list is features.ios-v5.json; never claim a feature that is not in it."add reactions", "enable polls", "turn on smart replies", "add message search", "let people report a message".
| Kind | What it needs | Examples |
|---|---|---|
| Already on | nothing — say so | text, media, receipts, typing, reactions, mentions |
| Code-wired | a callback + a destination screen | threads, search, mark-as-unread, quoted reply |
| Dashboard extension | a toggle in the Dashboard; no code | polls, stickers, whiteboard, document, translation, link preview, thumbnails |
| AI | a Dashboard AI toggle, then wire the surface | conversation starters, smart replies, summary, assistant history |
| SDK fallback | no kit component — call the SDK | AI agents, campaigns, add-members, moderation actions |
Never re-suggest something already on. Reactions and mentions are core messaging in v5; offering them as "add a feature" is the AUDIT-077 mistake. The legacy moderation filters (profanity, data masking, image moderation) route to legacy docs — never offer them.
The Dashboard toggle is the whole job for extensions: "Code required: None — extensions work out of the box." Use the CLI to flip it (skills-cli features enable <id>), then confirm it appears. If it does not, that is a Dashboard/plan issue, not a code one — say so rather than hand-rolling a replacement.
A feature that opens something must also close it. Threads: set(onThreadRepliesClick:) → thread screen (header `set(parentMessage:)`; LIST `set(user:parentMessage:withParent:)` — parent in the SAME call as the target, or the thread shows the whole conversation; composer `set(user:)` + `set(parentMessageId:)`). Search: set conversations.hideSearch = false FIRST — it is true by default, so wiring only conversations.onSearchClick (property) renders no search field at all → CometChatSearch, with onConversationClicked / onMessageClicked assigned or results dead-end.
If no component exists, drop to the Chat SDK and look the method up in the SDK docs via docs-map.md — never guess a signature. Worked example: adding group members has no component → CometChat.addMembersToGroup(guid:groupMembers:bannedUIDs:onSuccess:onError:).
The feature appears in the running app, its entry point leads somewhere and back, and nothing you added duplicates what the kit already does.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.