{"id":"bd37c483-7ee6-4704-91e2-dcc9aa630f23","shortId":"5gREuB","kind":"skill","title":"uat-story-writer","tagline":"Discover missing UAT test scenarios from the user's perspective, confirm requirements through guided interviews, and output user story files in story-craftsman template + Gherkin Given/When/Then format. Use when the user mentions \"add test cases\", \"missing tests for XX scenario\",","description":"# UAT Story Writer\n\nDiscover missing UAT test scenarios from real user usage contexts and output structured user story documents.\n\n**Core philosophy**: UAT tests start from user stories, not from technical implementation. \"Checking order status while on the go\" reveals real needs better than \"HTTP API test.\"\n\n## Rules\n\n1. **User perspective first**: Each scenario must correspond to a real user behavior or usage context, not a technical condition. Technical conditions are the scenario's background, not the scenario itself\n2. **Do not fabricate when information is lacking**: Key constraints like test environment capabilities and actual topology must be obtained through interviews, not assumed\n3. **Acceptance criteria must be executable**: Each AC uses Gherkin Given/When/Then format, ensuring automation tools can directly consume them\n4. **Output to cases/ directory**: User stories go in the project's `cases/` directory; `features/` directory is reserved for AI-generated executable automation cases\n5. **Follow story-craftsman template**: File structure strictly follows the story-craftsman template format (background, goals, roles, user stories, progress, update log)\n\n---\n\n## Execution Flow\n\n### Step 1: Explore Existing Test Coverage\n\nFirst understand the project's existing test cases and find coverage gaps:\n\n- Read related `.feature` files under `features/scenarios/` to understand existing scenarios\n- Read existing user story files under `cases/` to avoid duplication\n- List the currently covered scenario inventory and clearly indicate the missing dimensions\n\n### Step 2: Guided Interview (one question at a time, multiple-choice preferred)\n\nConfirm key constraints through questioning — ask only one question at a time, preferring multiple-choice options:\n\n| Dimension | Purpose | Example Question |\n|------|------|---------|\n| **Test environment capability** | Determine scenario granularity | \"Can your test environment simulate network conditions? A) Router/firewall control B) Physical switching only C) Both\" |\n| **Actual usage topology** | Determine coverage scope | \"Which of the following do you actually encounter? A) Local network B) Mobile remote C) Cross-network D) All of the above\" |\n| **Focus dimension** | Determine acceptance depth | \"Are you focused on functionality only or also on experience metrics? A) Functionality only B) Also experience C) Both\" |\n| **Variable control** | Determine what is under test | \"Which end is the variable you can control? Phone side? Device side? Or both?\" |\n\nInterview principles:\n- **One question at a time**: Do not ask multiple questions simultaneously — avoid information overload\n- **Multiple-choice preferred**: Provide options whenever possible to reduce the user's answering cost\n- **Stop promptly**: Stop asking when sufficient information is gathered — do not over-interview. Usually 2-4 questions suffice\n- **UAT course correction**: If the user's description leans toward technical perspective (e.g., \"test mobile network\"), guide back to user perspective (e.g., \"user operating remotely while away from home\")\n\n### Step 3: Scenario Brainstorming (User Story Perspective)\n\nBased on interview results, brainstorm scenarios starting from the user's real daily usage contexts.\n\nKey thinking framework — imagine a user's daily usage journey:\n- **Where is the user?** (home, office, on the go, at a friend's house...)\n- **What is the user doing?** (actively checking, checking after receiving a notification, glancing while doing something else...)\n- **What changed in the environment?** (went outside, entered an elevator, switched networks...)\n- **What went wrong unexpectedly?** (lost connectivity, poor signal, service unavailable...)\n\nPresent brainstorming results in table form, including: scenario number, user scenario description, corresponding environment/technical conditions.\n\nAfter presenting, ask the user: \"Is this coverage sufficient? Anything to add or remove?\"\n\n### Step 4: Generate User Story Files\n\nAfter confirmation, generate files following the story-craftsman template and save to the `cases/` directory.\n\n**File naming**: `{feature}-{dimension}.md` (lowercase kebab-case), e.g., `live-view-network-environments.md`\n\n**File structure**:\n\n```markdown\n# <Topic> - User Stories\n\n> Reference document: [related feature file](../features/scenarios/xxx.feature)\n\n(mermaid flow diagram: core flow + variable dimensions)\n\n## 1. Background (Why)\n## 2. Goals (What)\n## 3. Roles (Who)\n## 4. User Stories\n\n### 4.1 US-<MODULE>-<DIM>-01: <User Scenario Title> [P0/P1/P2]\n\n**As** <role>, **I want** <capability/need>, **so that** <value/purpose>.\n\n**Acceptance Criteria (AC):**\n- [ ] Given <precondition>, When <user action>, Then <expected result>\n- [ ] Given <precondition>, When <user action>, Then <expected result>\n\n## 5. Progress\n## 6. Update Log\n```\n\n**Key points for writing acceptance criteria**:\n- Given describes the user's situational context and environment state, not technical configuration\n- When describes the user's actual action\n- Then describes the user-observable result (UI feedback, status change)\n- Each User Story includes 2-4 ACs covering the core path and key exceptions\n\n**Priority criteria**:\n- **P0**: The most common core scenarios users encounter (e.g., placing an order online, remotely checking status while away)\n- **P1**: Scenarios users encounter fairly often but not every time (e.g., network switching, connectivity restoration)\n- **P2**: Extreme or low-frequency scenarios\n\n---\n\n## Examples\n\n### Bad — Writing UAT cases from a technical perspective\n\n```\nScenario: Order submission test under mobile network\n  Given phone connected to mobile network\n  When order submission request is initiated\n  Then request successfully reaches backend service through CDN gateway\n```\n\n### Good — Writing UAT cases from a user perspective\n\n```\n### US-ORDER-NET-02: Placing an order while away from home using mobile data [P0]\n\n**As** a MyApp user, **I want** to complete an order while away from home using mobile data,\n**so that** I can purchase what I need anytime, anywhere.\n\n**Acceptance Criteria (AC):**\n- [ ] Given the phone has WiFi turned off and is using mobile cellular network,\n      When the user taps the \"Submit Order\" button,\n      Then the order is submitted successfully and the confirmation page is displayed\n- [ ] Given an order has already been submitted on mobile network,\n      When the user views order details, cancels the order, and performs other actions,\n      Then all functions respond normally\n```\n\n### Good — Resource sharing permission scenario\n\n```\n### US-SHARE-PERM-01: Invited team member viewing a shared project [P0]\n\n**As** an invited team member, **I want** to view shared project content after joining via share link/invitation,\n**so that** team members can stay updated on project progress at any time.\n\n**Acceptance Criteria (AC):**\n- [ ] Given the project owner has shared the project with a team member's account,\n      When the team member logs into the App and enters the project list,\n      Then they can see the shared project and successfully view its details\n- [ ] Given a team member is viewing the content of a shared project,\n      When the owner revokes sharing permissions for that project,\n      Then the team member's access is interrupted with a no-permission prompt\n```\n\n---\n\n## Relationship with Other Skills\n\n- **story-craftsman**: This skill uses its template format but focuses on UAT scenario brainstorming and Gherkin AC writing\n- **testing-strategy**: This skill's outputs are L4 (UAT) layer user stories, aligned with the overall layered testing strategy\n- **Test automation tools**: This skill's outputs (user stories under `cases/`) serve as input for test automation tools to generate executable automation cases (`.feature` files under `features/`)","tags":["uat","story","writer","enterprise","harness","engineering","addxai","agent-skills","ai-agent","ai-engineering","claude-code","code-review"],"capabilities":["skill","source-addxai","skill-uat-story-writer","topic-agent-skills","topic-ai-agent","topic-ai-engineering","topic-claude-code","topic-code-review","topic-cursor","topic-devops","topic-enterprise","topic-sre","topic-windsurf"],"categories":["enterprise-harness-engineering"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/addxai/enterprise-harness-engineering/uat-story-writer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add addxai/enterprise-harness-engineering","source_repo":"https://github.com/addxai/enterprise-harness-engineering","install_from":"skills.sh"}},"qualityScore":"0.458","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 16 github stars · SKILL.md body (7,835 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-04-22T01:02:13.305Z","embedding":null,"createdAt":"2026-04-21T19:04:02.883Z","updatedAt":"2026-04-22T01:02:13.305Z","lastSeenAt":"2026-04-22T01:02:13.305Z","tsv":"'-01':656 '-4':445,721 '/features/scenarios/xxx.feature':634 '01':933 '02':821 '1':93,219,642 '2':124,269,444,645,720 '3':148,478,648 '4':167,592,651 '4.1':654 '5':192,674 '6':676 'ac':155,667,722,862,974,1070 'accept':149,356,665,683,860,972 'access':1040 'account':988 'action':704,918 'activ':528 'actual':139,324,336,703 'add':38,588 'ai':187 'ai-gener':186 'align':1085 'alreadi':900 'also':365,373 'answer':427 'anyth':586 'anytim':858 'anywher':859 'api':90 'app':996 'ask':286,407,432,579 'assum':147 'autom':161,190,1093,1108,1113 'avoid':254,411 'away':474,749,826,844 'b':318,341,372 'back':465 'backend':804 'background':119,208,643 'bad':773 'base':484 'behavior':105 'better':87 'brainstorm':480,488,563,1067 'button':883 'c':322,344,375 'cancel':912 'capability/need':661 'capabl':137,304 'case':40,170,179,191,231,252,611,621,776,812,1102,1114 'cdn':807 'cellular':874 'chang':541,715 'check':77,529,530,746 'choic':279,296,416 'clear':263 'common':735 'complet':840 'condit':112,114,314,576 'configur':697 'confirm':15,281,598,892 'connect':557,763,790 'constraint':133,283 'consum':165 'content':953,1021 'context':58,108,498,691 'control':317,378,391 'core':65,638,725,736 'correct':450 'correspond':100,574 'cost':428 'cours':449 'cover':259,723 'coverag':223,234,328,584 'craftsman':28,196,205,605,1055 'criteria':150,666,684,731,861,973 'cross':346 'cross-network':345 'current':258 'd':348 'daili':496,506 'data':831,849 'depth':357 'describ':686,699,706 'descript':455,573 'detail':911,1013 'determin':305,327,355,379 'devic':394 'diagram':637 'dimens':267,298,354,616,641 'direct':164 'directori':171,180,182,612 'discov':5,49 'display':895 'document':64,630 'duplic':255 'e.g':460,469,622,740,760 'elev':549 'els':539 'encount':337,739,753 'end':385 'ensur':160 'enter':547,998 'environ':136,303,311,544,693 'environment/technical':575 'everi':758 'exampl':300,772 'except':729 'execut':153,189,216,1112 'exist':221,229,244,247 'experi':367,374 'explor':220 'extrem':766 'fabric':127 'fair':754 'featur':181,238,615,632,1115,1118 'features/scenarios':241 'feedback':713 'file':24,198,239,250,596,600,613,624,633,1116 'find':233 'first':96,224 'flow':217,636,639 'focus':353,360,1063 'follow':193,201,333,601 'form':567 'format':32,159,207,1061 'framework':501 'frequenc':770 'friend':520 'function':362,370,921 'gap':235 'gateway':808 'gather':437 'generat':188,593,599,1111 'gherkin':30,157,1069 'given':668,671,685,788,863,896,975,1014 'given/when/then':31,158 'glanc':535 'go':83,174,517 'goal':209,646 'good':809,924 'granular':307 'guid':18,270,464 'home':476,513,828,846 'hous':522 'http':89 'imagin':502 'implement':76 'includ':568,719 'indic':264 'inform':129,412,435 'initi':799 'input':1105 'interrupt':1042 'interview':19,145,271,398,442,486 'inventori':261 'invit':934,944 'join':955 'journey':508 'kebab':620 'kebab-cas':619 'key':132,282,499,679,728 'l4':1080 'lack':131 'layer':1082,1089 'lean':456 'like':134 'link/invitation':958 'list':256,1001 'live-view-network-environments.md':623 'local':339 'log':215,678,993 'lost':556 'low':769 'low-frequ':768 'lowercas':618 'markdown':626 'md':617 'member':936,946,962,986,992,1017,1038 'mention':37 'mermaid':635 'metric':368 'miss':6,41,50,266 'mobil':342,462,786,792,830,848,873,904 'multipl':278,295,408,415 'multiple-choic':277,294,414 'must':99,141,151 'myapp':835 'name':614 'need':86,857 'net':820 'network':313,340,347,463,551,761,787,793,875,905 'no-permiss':1045 'normal':923 'notif':534 'number':570 'observ':710 'obtain':143 'offic':514 'often':755 'one':272,288,400 'onlin':744 'oper':471 'option':297,419 'order':78,743,782,795,819,824,842,882,886,898,910,914 'output':21,60,168,1078,1098 'outsid':546 'over-interview':440 'overal':1088 'overload':413 'owner':978,1028 'p0':732,832,941 'p0/p1/p2':657 'p1':750 'p2':765 'page':893 'path':726 'perform':916 'perm':932 'permiss':927,1031,1047 'perspect':14,95,459,468,483,780,816 'philosophi':66 'phone':392,789,865 'physic':319 'place':741,822 'point':680 'poor':558 'possibl':421 'prefer':280,293,417 'present':562,578 'principl':399 'prioriti':730 'progress':213,675,968 'project':177,227,940,952,967,977,982,1000,1008,1025,1034 'prompt':430,1048 'provid':418 'purchas':854 'purpos':299 'question':273,285,289,301,401,409,446 'reach':803 'read':236,246 'real':55,85,103,495 'receiv':532 'reduc':423 'refer':629 'relat':237,631 'relationship':1049 'remot':343,472,745 'remov':590 'request':797,801 'requir':16 'reserv':184 'resourc':925 'respond':922 'restor':764 'result':487,564,711 'reveal':84 'revok':1029 'role':210,649 'router/firewall':316 'rule':92 'save':608 'scenario':9,45,53,98,117,122,245,260,306,479,489,569,572,737,751,771,781,928,1066 'scope':329 'see':1005 'serv':1103 'servic':560,805 'share':926,931,939,951,957,980,1007,1024,1030 'side':393,395 'signal':559 'simul':312 'simultan':410 'situat':690 'skill':1052,1057,1076,1096 'skill-uat-story-writer' 'someth':538 'source-addxai' 'start':69,490 'state':694 'status':79,714,747 'stay':964 'step':218,268,477,591 'stop':429,431 'stori':3,23,27,47,63,72,173,195,204,212,249,482,595,604,628,653,718,1054,1084,1100 'story-craftsman':26,194,203,603,1053 'strategi':1074,1091 'strict':200 'structur':61,199,625 'submiss':783,796 'submit':881,888,902 'success':802,889,1010 'suffic':447 'suffici':434,585 'switch':320,550,762 'tabl':566 'tap':879 'team':935,945,961,985,991,1016,1037 'technic':75,111,113,458,696,779 'templat':29,197,206,606,1060 'test':8,39,42,52,68,91,135,222,230,302,310,383,461,784,1073,1090,1092,1107 'testing-strategi':1072 'think':500 'time':276,292,404,759,971 'tool':162,1094,1109 'topic-agent-skills' 'topic-ai-agent' 'topic-ai-engineering' 'topic-claude-code' 'topic-code-review' 'topic-cursor' 'topic-devops' 'topic-enterprise' 'topic-sre' 'topic-windsurf' 'topolog':140,326 'toward':457 'turn':868 'uat':2,7,46,51,67,448,775,811,1065,1081 'uat-story-writ':1 'ui':712 'unavail':561 'understand':225,243 'unexpect':555 'updat':214,677,965 'us':655,818,930 'us-order-net':817 'us-share-perm':929 'usag':57,107,325,497,507 'use':33,156,829,847,872,1058 'user':12,22,36,56,62,71,94,104,172,211,248,425,453,467,470,481,493,504,512,526,571,581,594,627,652,688,701,709,717,738,752,815,836,878,908,1083,1099 'user-observ':708 'usual':443 'value/purpose':664 'variabl':377,388,640 'via':956 'view':909,937,950,1011,1019 'want':660,838,948 'went':545,553 'whenev':420 'wifi':867 'write':682,774,810,1071 'writer':4,48 'wrong':554 'xx':44","prices":[{"id":"e99e9b16-59b8-4862-a175-71675afe775b","listingId":"bd37c483-7ee6-4704-91e2-dcc9aa630f23","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"addxai","category":"enterprise-harness-engineering","install_from":"skills.sh"},"createdAt":"2026-04-21T19:04:02.883Z"}],"sources":[{"listingId":"bd37c483-7ee6-4704-91e2-dcc9aa630f23","source":"github","sourceId":"addxai/enterprise-harness-engineering/uat-story-writer","sourceUrl":"https://github.com/addxai/enterprise-harness-engineering/tree/main/skills/uat-story-writer","isPrimary":false,"firstSeenAt":"2026-04-21T19:04:02.883Z","lastSeenAt":"2026-04-22T01:02:13.305Z"}],"details":{"listingId":"bd37c483-7ee6-4704-91e2-dcc9aa630f23","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"addxai","slug":"uat-story-writer","github":{"repo":"addxai/enterprise-harness-engineering","stars":16,"topics":["agent-skills","ai-agent","ai-engineering","claude-code","code-review","cursor","devops","enterprise","sre","windsurf"],"license":"apache-2.0","html_url":"https://github.com/addxai/enterprise-harness-engineering","pushed_at":"2026-04-17T08:57:37Z","description":"Enterprise-grade AI Agent Skills for software development, DevOps, SRE, security, and product teams. Compatible with Claude Code, Cursor, Windsurf, Gemini CLI, GitHub Copilot, and 30+ AI coding agents.","skill_md_sha":"52cce9968aede8798333bfdf5b86c210701a31fc","skill_md_path":"skills/uat-story-writer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/addxai/enterprise-harness-engineering/tree/main/skills/uat-story-writer"},"layout":"multi","source":"github","category":"enterprise-harness-engineering","frontmatter":{"name":"uat-story-writer","description":"Discover missing UAT test scenarios from the user's perspective, confirm requirements through guided interviews, and output user story files in story-craftsman template + Gherkin Given/When/Then format. Use when the user mentions \"add test cases\", \"missing tests for XX scenario\", \"write UAT cases\", \"write test scenarios\", \"brainstorm test cases\", or discovers test coverage gaps. Should also trigger even if the user just mentions a feature \"hasn't been tested for XX situation\"."},"skills_sh_url":"https://skills.sh/addxai/enterprise-harness-engineering/uat-story-writer"},"updatedAt":"2026-04-22T01:02:13.305Z"}}