Testing & Quality skills

Browse reusable Agent Skills, each with a clear purpose and practical guidance.

macos-tcc-sigkill-missing-usage-description

Fix macOS app hard crashes (EXC_CRASH / SIGKILL) caused by accessing TCC-protected APIs without the matching Info.plist usage description key. Use when: (1) App crashes immediately when touching Photos, Contacts, Calendar, Reminders, Location, Microphone, Camera, Screen Recording, etc., (2) Crash report shows `Exception: EXC_CRASH (SIGKILL)` with `Termination namespace: TCC`, (3) Crash stack includes `TCC.__TCC_CRASHING_DUE_TO_PRIVACY_VIOLATION__`, (4) Termination details contain "This app has crashed because it attempted to access privacy-sensitive data without a usage description", (5) Flutter macOS publish / gallery-save flow crashes on Gal.putVideo, PHPhotoLibrary, CNContactStore, etc. Critical distinction: macOS does NOT return a deny error — it SIGKILLs the process. This skill also covers the NSPhotoLibraryUsageDescription vs NSPhotoLibraryAddUsageDescription distinction that trips many apps.

257 repo starsObserved in 1 repos
Testing & Quality

media-kit-macos-codesign-crash

Fix Flutter macOS app crash at launch due to media_kit library loading failure. Use when: (1) macOS app builds successfully but crashes immediately on launch, (2) Crash log shows "Library not loaded: @rpath/Ass.framework" or similar media_kit framework, (3) Error says "code signature not valid for use in process: Trying to load an unsigned library", (4) Problem appears after flutter clean or fresh clone, (5) Codesign script exists in Podfile but frameworks are still unsigned after build - check build phase ORDER. Fixes unsigned media_kit native frameworks (Ass.framework, Avcodec.framework, etc.) by adding post-build codesigning AND ensuring correct build phase ordering.

257 repo starsObserved in 1 repos
Testing & Quality

microservice-api-endpoint-routing-404

Debug 404 errors for API endpoints in microservice architectures where code exists but routing sends requests to wrong service. Use when: (1) API endpoint returns 404 despite code being deployed, (2) Multiple services share same hostname via HTTPRoute/Ingress, (3) Service logs show "Health server" but you expected API endpoints, (4) Monorepo deploys multiple images and endpoint might be in different service than expected. Covers: verifying which service handles which paths, HTTPRoute path precedence, testing endpoints directly from inside cluster, matching image tags across services.

257 repo starsObserved in 1 repos
Testing & Quality

mock-call-count-retry-fallback

Fix test failures when adding retry/fallback logic causes mock call count mismatches. Use when: (1) Test fails with "Expected: <1>, Actual: <2>" or similar call count errors after adding retry or fallback mechanisms, (2) MissingStubError appears for methods in new fallback code paths, (3) Mockito verify().called(N) assertions fail after behavior changes. Applies to Dart/Flutter with Mockito, but pattern is universal.

257 repo starsObserved in 1 repos
Testing & Quality

mockito-stale-mock-silent-trycatch-failure

Fix misleading Flutter/Dart test failures where expected data is empty ([]) or default values instead of the mocked response, caused by stale Mockito generated mocks or missing stubs being silently swallowed by try/catch in provider/repository code. Use when: (1) Test expects non-empty data but gets [], (2) Mock stubs for a method are set up but the code under test returns fallback/empty results, (3) A PR added new methods to a service class and tests that previously passed now fail with misleading "expected X, actual: empty" assertions, (4) "Generated files are out of date" CI error alongside test failures. The root cause is MissingStubError thrown by unstubbed mock methods, caught by production try/catch blocks, causing silent fallback to empty state.

257 repo starsObserved in 1 repos
Testing & Quality

nostr-addressable-event-dual-tag-query

Fix "count shows X but list shows empty" bugs when querying related events (comments, reactions, zaps, reposts) for Nostr addressable events (Kind 30000-39999). Use when: (1) REST API shows engagement count > 0 but WebSocket query returns empty, (2) Comments/reactions exist but app shows "No comments yet" or similar, (3) Working with NIP-22 comments, NIP-25 reactions, or NIP-18 reposts on Kind 34235/34236 video events or other addressable events. Root cause: clients may reference addressable events using either E tag (event ID) or A tag (kind:pubkey:d-tag format), and querying only one tag misses events tagged with the other.

257 repo starsObserved in 1 repos
Testing & Quality

nostr-replaceable-event-mutation-overwrite

Fix silent data loss when mutating Nostr replaceable events (Kind 0 profile, Kind 3 contact/follow list, Kind 10002 relay list, etc.) in client apps. Use when: (1) Following someone wipes the user's entire follow list, (2) Updating profile metadata loses existing fields, (3) Fresh browser session or mobile login causes data loss on first action, (4) Replaceable event mutation uses stale or null cached state. Root cause: Nostr replaceable events are full-replace (no partial update), so publishing based on stale/unloaded cache overwrites the canonical version. Applies to any Nostr client using React, Flutter, or similar reactive frameworks where query state may not be loaded when a mutation fires.

257 repo starsObserved in 1 repos
Testing & Quality

proxy-range-header-forwarding

Fix iOS AVPlayer "CoreMediaErrorDomain error -12939 - byte range length mismatch" or similar video streaming failures when a proxy/edge/CDN service sits between the client and object storage (GCS, S3, R2). Use when: (1) iOS video fails with -12939 "byte range length mismatch - should be length 2 is length N", (2) curl with Range: bytes=0-1 returns full file instead of 2 bytes, (3) one URL path works with Range but another path to the same storage doesn't, (4) proxy advertises Accept-Ranges: bytes but returns 200 with full file for range requests. The root cause is typically a proxy handler that constructs a new request to the backend without forwarding the client's Range header.

257 repo starsObserved in 1 repos
Testing & Quality

rest-api-optimistic-update-race-condition

Fix "content disappears after publishing" bugs caused by REST API indexing lag. Use when: (1) User publishes content but it doesn't appear in their feed/profile, (2) REST API returns stale data immediately after write operations, (3) Async indexing backends (ClickHouse, Elasticsearch, etc.) haven't processed new events, (4) Content shows briefly then vanishes on refresh. Applies to any system with separate write path (WebSocket/direct DB) and read path (REST API with async indexing).

257 repo starsObserved in 1 repos
Testing & Quality

review-before-commit

Review all uncommitted changes before pushing. Checks for dead code, stale comments, CLAUDE.md rule violations, unused imports, and inconsistencies introduced during the current session. Invoke with /review-before-commit.

257 repo starsObserved in 1 repos
Testing & Quality