{"id":"88fa1e74-c604-4e35-8efa-d98e8c3a0216","shortId":"PH6a5x","kind":"skill","title":"deliver-edge-cases","tagline":"Documents edge cases, error states, boundary conditions, and recovery paths for a feature. Use during specification to ensure comprehensive coverage, or during QA planning to identify test scenarios.","description":"<!-- PM-Skills | https://github.com/product-on-purpose/pm-skills | Apache 2.0 -->\n# Edge Cases\n\nAn edge cases document systematically catalogs the unusual, boundary, and error scenarios for a feature. While happy-path flows are typically well-specified, edge cases often get discovered in production . causing bugs, poor user experience, and support burden. Documenting edge cases upfront ensures engineering handles them intentionally and QA knows what to test.\n\n## When to Use\n\n- During feature specification before engineering begins\n- When preparing QA test plans\n- After discovering production bugs to prevent similar issues\n- When reviewing PRDs or user stories for completeness\n- Before launch to ensure error states have been designed\n\n## Instructions\n\nWhen asked to document edge cases, follow these steps:\n\n1. **Define the Feature Scope**\n   Clearly describe what feature or flow you're analyzing. Edge cases are specific to context . the same input might be valid in one feature and invalid in another.\n\n2. **Walk Through Input Validation**\n   Consider every user input: What if it's empty? Too long? Wrong format? Contains special characters? What are the minimum and maximum valid values?\n\n3. **Explore Boundary Conditions**\n   Find the edges of acceptable ranges. If a field accepts 1-100, test 0, 1, 100, and 101. Consider pagination boundaries, timeout thresholds, and rate limits.\n\n4. **Map Error States**\n   Identify what can go wrong: network failures, permission denied, resource not found, concurrent modifications, expired sessions. Document both the scenario and expected behavior.\n\n5. **Consider Concurrency Issues**\n   What if two users act simultaneously? What if the user double-clicks? What if data changes between load and save? Race conditions often cause subtle bugs.\n\n6. **Define Recovery Paths**\n   For each error, specify how users recover. What message do they see? Can they retry? Is data preserved? Good error handling turns frustration into confidence.\n\n7. **Prioritize by Likelihood and Impact**\n   Not all edge cases need the same attention. High-likelihood + high-impact cases need robust handling; rare + low-impact cases might just need graceful failure.\n\n## Output Format\n\nUse the template in `references/TEMPLATE.md` to structure the output.\n\n## Quality Checklist\n\nBefore finalizing, verify:\n\n- [ ] All user inputs have validation edge cases documented\n- [ ] Boundary conditions are explicitly listed\n- [ ] Network/system failure scenarios are covered\n- [ ] Each error state has a defined user-facing message\n- [ ] Recovery paths are specified (not just error detection)\n- [ ] Edge cases are prioritized by likelihood and impact\n\n## Examples\n\nSee `references/EXAMPLE.md` for a completed example.","tags":["deliver","edge","cases","skills","product-on-purpose","agent-skills","ai-skills","claude-code","claude-desktop","openskills","product-management","skill-families"],"capabilities":["skill","source-product-on-purpose","skill-deliver-edge-cases","topic-agent-skills","topic-ai-skills","topic-claude-code","topic-claude-desktop","topic-openskills","topic-product-management","topic-skill-families","topic-triple-diamond"],"categories":["pm-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/product-on-purpose/pm-skills/deliver-edge-cases","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add product-on-purpose/pm-skills","source_repo":"https://github.com/product-on-purpose/pm-skills","install_from":"skills.sh"}},"qualityScore":"0.538","qualityRationale":"deterministic score 0.54 from registry signals: · indexed on github topic:agent-skills · 176 github stars · SKILL.md body (2,740 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:54:11.187Z","embedding":null,"createdAt":"2026-04-18T22:09:09.379Z","updatedAt":"2026-05-02T12:54:11.187Z","lastSeenAt":"2026-05-02T12:54:11.187Z","tsv":"'-100':216 '0':218 '1':139,215,219 '100':220 '101':222 '2':172 '3':201 '4':231 '5':258 '6':289 '7':318 'accept':209,214 'act':266 'analyz':152 'anoth':171 'ask':131 'attent':331 'begin':98 'behavior':257 'boundari':10,43,203,225,376 'bug':68,107,288 'burden':74 'case':4,7,34,37,61,77,135,154,327,338,346,374,405 'catalog':40 'caus':67,286 'chang':278 'charact':192 'checklist':364 'clear':144 'click':274 'complet':119,417 'comprehens':23 'concurr':247,260 'condit':11,204,284,377 'confid':317 'consid':177,223,259 'contain':190 'context':158 'cover':385 'coverag':24 'data':277,309 'defin':140,290,391 'deliv':2 'deliver-edge-cas':1 'deni':243 'describ':145 'design':128 'detect':403 'discov':64,105 'document':5,38,75,133,251,375 'doubl':273 'double-click':272 'edg':3,6,33,36,60,76,134,153,207,326,373,404 'empti':185 'engin':80,97 'ensur':22,79,123 'error':8,45,124,233,295,312,387,402 'everi':178 'exampl':412,418 'expect':256 'experi':71 'expir':249 'explicit':379 'explor':202 'face':394 'failur':241,351,382 'featur':17,49,94,142,147,167 'field':213 'final':366 'find':205 'flow':54,149 'follow':136 'format':189,353 'found':246 'frustrat':315 'get':63 'go':238 'good':311 'grace':350 'handl':81,313,341 'happi':52 'happy-path':51 'high':333,336 'high-impact':335 'high-likelihood':332 'identifi':30,235 'impact':323,337,345,411 'input':161,175,180,370 'instruct':129 'intent':83 'invalid':169 'issu':111,261 'know':86 'launch':121 'likelihood':321,334,409 'limit':230 'list':380 'load':280 'long':187 'low':344 'low-impact':343 'map':232 'maximum':198 'messag':301,395 'might':162,347 'minimum':196 'modif':248 'need':328,339,349 'network':240 'network/system':381 'often':62,285 'one':166 'output':352,362 'pagin':224 'path':14,53,292,397 'permiss':242 'plan':28,103 'poor':69 'prds':114 'prepar':100 'preserv':310 'prevent':109 'priorit':319,407 'product':66,106 'qa':27,85,101 'qualiti':363 'race':283 'rang':210 'rare':342 'rate':229 're':151 'recov':299 'recoveri':13,291,396 'references/example.md':414 'references/template.md':358 'resourc':244 'retri':307 'review':113 'robust':340 'save':282 'scenario':32,46,254,383 'scope':143 'see':304,413 'session':250 'similar':110 'simultan':267 'skill' 'skill-deliver-edge-cases' 'source-product-on-purpose' 'special':191 'specif':20,95,156 'specifi':59,296,399 'state':9,125,234,388 'step':138 'stori':117 'structur':360 'subtl':287 'support':73 'systemat':39 'templat':356 'test':31,89,102,217 'threshold':227 'timeout':226 'topic-agent-skills' 'topic-ai-skills' 'topic-claude-code' 'topic-claude-desktop' 'topic-openskills' 'topic-product-management' 'topic-skill-families' 'topic-triple-diamond' 'turn':314 'two':264 'typic':56 'unusu':42 'upfront':78 'use':18,92,354 'user':70,116,179,265,271,298,369,393 'user-fac':392 'valid':164,176,199,372 'valu':200 'verifi':367 'walk':173 'well':58 'well-specifi':57 'wrong':188,239","prices":[{"id":"4d3171d7-b434-4a5e-9960-17cbee11f43c","listingId":"88fa1e74-c604-4e35-8efa-d98e8c3a0216","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"product-on-purpose","category":"pm-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:09:09.379Z"}],"sources":[{"listingId":"88fa1e74-c604-4e35-8efa-d98e8c3a0216","source":"github","sourceId":"product-on-purpose/pm-skills/deliver-edge-cases","sourceUrl":"https://github.com/product-on-purpose/pm-skills/tree/main/skills/deliver-edge-cases","isPrimary":false,"firstSeenAt":"2026-04-18T22:09:09.379Z","lastSeenAt":"2026-05-02T12:54:11.187Z"}],"details":{"listingId":"88fa1e74-c604-4e35-8efa-d98e8c3a0216","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"product-on-purpose","slug":"deliver-edge-cases","github":{"repo":"product-on-purpose/pm-skills","stars":176,"topics":["agent-skills","ai-skills","claude-code","claude-desktop","openskills","product-management","skill-families","triple-diamond"],"license":"apache-2.0","html_url":"https://github.com/product-on-purpose/pm-skills","pushed_at":"2026-04-24T22:54:13Z","description":"Curated, plug-and-play product management skills for AI agents. 38 skills across Triple Diamond phases plus foundation (lean canvas, persona, meeting lifecycle family) and utility (create, validate, iterate). Templates, workflows, thread-aligned samples, CI-enforced skill-family contracts. Apache 2.0.","skill_md_sha":"db073e885774be6e9f08c47ba91c136ef3a7c36f","skill_md_path":"skills/deliver-edge-cases/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/product-on-purpose/pm-skills/tree/main/skills/deliver-edge-cases"},"layout":"multi","source":"github","category":"pm-skills","frontmatter":{"name":"deliver-edge-cases","license":"Apache-2.0","description":"Documents edge cases, error states, boundary conditions, and recovery paths for a feature. Use during specification to ensure comprehensive coverage, or during QA planning to identify test scenarios."},"skills_sh_url":"https://skills.sh/product-on-purpose/pm-skills/deliver-edge-cases"},"updatedAt":"2026-05-02T12:54:11.187Z"}}