[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GJWHTHR0DMN2J82CP4XEMS":3,"skill-same:01M6GJWHTHR0DMN2J82CP4XEMS":58},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":57},"01M6GJWHTHR0DMN2J82CP4XEMS","improve-app",null,"Add\u002Fremove features, fix bugs, redesign — keeping code clean and artifacts in sync","bes-dev\u002Fetnamute","bes-dev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F3617413?v=4","01M6GJVTH1QR3AV46BXYJ9T14N","Sergei Belousov","01M6GJVTQ5DVFJ4C63BCQNM0YD",12,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimprove-app\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31],"improve","app","improve app","sync","code","artifacts","redesign","fix","remove","clean","fix bugs","add","true","2026-11-10 10:12:30",false,"---\nname: improve-app\ndescription: Add\u002Fremove features, fix bugs, redesign — keeping code clean and artifacts in sync\ndisable-model-invocation: true\n---\n\nImprove an existing app.\n\nChange request: $ARGUMENTS\n\n---\n\n## EXECUTION\n\n### Step 1: Understand the codebase\n\nRead files in this order:\n\n1. `apps\u002F\u003Cslug>\u002Fspec\u002Fprd.md` — what was supposed to be built\n2. `package.json` — dependencies, SDK versions\n3. `app.config.js` — Expo config, plugins, permissions\n4. `app\u002F_layout.tsx` — root layout: providers, fonts, wrappers\n5. `app\u002F` directory tree — file-based routing = navigation map\n6. `src\u002F` structure — flat (`components\u002F`, `hooks\u002F`) or feature-based (`features\u002Fauth\u002F`)\n\nIdentify state management: Zustand (`useStore`), Context (`Provider`), or other.\n\n### Step 2: Clarify (if needed)\n\nUse `AskUserQuestion` only if ambiguous. Generate options specific to the app. Skip if already specific.\n\n### Step 3: Plan the change\n\nBefore writing code:\n\n1. **PRD impact** — which sections change (§4 features, §5 monetization, §6 UX, §2 non-goals)\n2. **Files to modify\u002Fcreate\u002Fdelete**\n3. **Dead code** — what becomes unused after this change\n4. **Tests to write** — new feature needs tests; changed feature needs updated tests\n5. **Refactoring** — if a component being modified exceeds 250 lines or has 3+ useState, split it\n6. **Artifacts to update**: `spec\u002Fprd.md`, `README.md`, `privacy_policy.md` if affected\n7. **Version bump** — patch (bugfix), minor (feature\u002FUX), major (redesign\u002Fbreaking)\n\nDo NOT update `aso\u002F` or `marketing\u002F` — managed separately via `\u002Fmarket-app`.\n\n### Step 4: Apply changes\n\nExecute in this order:\n\n**1. Update PRD first** — source of truth:\n```\n> [UPDATED \u003Cdate>]: Added\u002Fremoved\u002Fchanged \u003Cwhat> — \u003Cwhy>\n```\n\n**2. Modify code** — follow existing patterns:\n- Match the project's architecture\n- Reuse existing components\u002Fhooks — don't duplicate\n- Fetch docs via mcpdoc before using any new SDK module\n- Use `npx expo install \u003Cpackage>` for new dependencies — not `npm install`\n\n**3. Write\u002Fupdate tests:**\n- New feature → write store tests, screen render test\n- Changed feature → update affected tests\n- Bug fix → write regression test that catches the bug\n- **New gesture interaction (swipe, long-press, drag) → MUST add a Maestro flow** that physically executes the gesture. Unit tests and runtime log checks cannot catch gesture-related crashes (missing GestureHandlerRootView, Reanimated babel plugin, etc.)\n\n**4. When removing a feature:**\n- Remove from PRD §4\n- Delete screen, components, hooks, services, types\n- Clean all imports and navigation entries\n- Remove unused dependencies from package.json\n- If feature had persisted Zustand state → add migration to remove fields\n- If feature's screen was a deep link target → add redirect from old route\n\n**5. When renaming or removing routes:**\n- Grep codebase for old route path string before renaming\n- Add `\u003CRedirect>` at old path after renaming\n- Flag to user if push notifications target this route\n\n**6. When changing UX\u002Fdesign:**\n- Update PRD §6\n- Apply consistently across ALL affected screens\n- Verify accessibility labels survived — component replacement drops them silently\n\n**7. When modifying data models:**\n- SQLite: add migration with incremented `user_version`\n- Zustand persisted stores: bump `version` + add `migrate` function\n\n**8. Clean up:**\n- Delete unused files — never comment out code\n- Remove orphaned imports, dependencies, navigation routes, assets\n\n**9. Update artifacts:**\n- `app.config.js` — bump version\n- `README.md` — update if features changed\n- `privacy_policy.md` — update if data handling changed\n\n### Step 5: Verify\n\nRun the verify loop from `pipeline\u002Fqa.md` (reads testing level from `apps\u002F\u003Cslug>\u002Fspec\u002Ftesting-level.txt`).\n\nIf the change affects UI: also read `.claude\u002Fskills\u002Fvisual-review\u002FSKILL.md` and review screenshots of affected screens.\nIf the change adds\u002Fremoves interactive elements: read `.claude\u002Fskills\u002Finteraction-map\u002FSKILL.md` to verify no broken promises were introduced.\n\n### Step 6: Report\n\nShow summary (in user's language):\n\n```\n## v\u003Cnew-version>\n\n**Change**: \u003Cwhat was requested>\n**Type**: feature \u002F removal \u002F fix \u002F redesign\n\n### Code\n- Modified: \u003Cfile list>\n- Created: \u003Cfile list>\n- Deleted: \u003Cfile list>\n\n### Tests\n- Added\u002Fupdated: \u003Ctest file list>\n- Result: \u003CX> tests passing\n\n### QA\n- tsc: PASS\n- expo export: PASS\n- jest: PASS (\u003CX> tests)\n- runtime: PASS (no errors on simulator)\n\nAnything else to change?\n```\n\nWait for feedback:\n- More changes → loop back to Step 2\n- Done → complete\n- Revert → undo changes\n\n---\n\n## RULES\n\n- **PRD first** — update spec before code\n- **Understand before changing** — read codebase structure before writing\n- **Follow existing patterns** — match architecture, naming, style\n- **Write tests** — every change includes tests\n- **No dead code** — delete what's unused, never comment out\n- **Runtime verified** — app must run on simulator without errors\n- **Scope discipline** — one change per request, don't refactor unrelated code\n- **Version bump** on every change\n- **Fetch docs** before using new SDK modules\n","Improve an existing app.\n\nChange request: $ARGUMENTS\n\n---\n\n## EXECUTION\n\n### Step 1: Understand the codebase\n\nRead files in this order:\n\n1. `apps\u002F\u003Cslug>\u002Fspec\u002Fprd.md` — what was supposed to be built\n2. `package.json` — dependencies, SDK versions\n3. `app.config.js` — Expo config, plugins, permissions\n4. `app\u002F_layout.tsx` — root layout: providers, fonts, wrappers\n5. `app\u002F` directory tree — file-based routing = navigation map\n6. `src\u002F` structure — flat (`components\u002F`, `hooks\u002F`) or feature-based (`features\u002Fauth\u002F`)\n\nIdentify state management: Zustand (`useStore`), Context (`Provider`), or other.\n\n### Step 2: Clarify (if needed)\n\nUse `AskUserQuestion` only if ambiguous. Generate options specific to the app. Skip if already specific.\n\n### Step 3: Plan the change\n\nBefore writing code:\n\n1. **PRD impact** — which sections change (§4 features, §5 monetization, §6 UX, §2 non-goals)\n2. **Files to modify\u002Fcreate\u002Fdelete**\n3. **Dead code** — what becomes unused after this change\n4. **Tests to write** — new feature needs tests; changed feature needs updated tests\n5. **Refactoring** — if a component being modified exceeds 250 lines or has 3+ useState, split it\n6. **Artifacts to update**: `spec\u002Fprd.md`, `README.md`, `privacy_policy.md` if affected\n7. **Version bump** — patch (bugfix), minor (feature\u002FUX), major (redesign\u002Fbreaking)\n\nDo NOT update `aso\u002F` or `marketing\u002F` — managed separately via `\u002Fmarket-app`.\n\n### Step 4: Apply changes\n\nExecute in this order:\n\n**1. Update PRD first** — source of truth:\n```\n> [UPDATED \u003Cdate>]: Added\u002Fremoved\u002Fchanged \u003Cwhat> — \u003Cwhy>\n```\n\n**2. Modify code** — follow existing patterns:\n- Match the project's architecture\n- Reuse existing components\u002Fhooks — don't duplicate\n- Fetch docs via mcpdoc before using any new SDK module\n- Use `npx expo install \u003Cpackage>` for new dependencies — not `npm install`\n\n**3. Write\u002Fupdate tests:**\n- New feature → write store tests, screen render test\n- Changed feature → update affected tests\n- Bug fix → write regression test that catches the bug\n- **New gesture interaction (swipe, long-press, drag) → MUST add a Maestro flow** that physically executes the gesture. Unit tests and runtime log checks cannot catch gesture-related crashes (missing GestureHandlerRootView, Reanimated babel plugin, etc.)\n\n**4. When removing a feature:**\n- Remove from PRD §4\n- Delete screen, components, hooks, services, types\n- Clean all imports and navigation entries\n- Remove unused dependencies from package.json\n- If feature had persisted Zustand state → add migration to remove fields\n- If feature's screen was a deep link target → add redirect from old route\n\n**5. When renaming or removing routes:**\n- Grep codebase for old route path string before renaming\n- Add `\u003CRedirect>` at old path after renaming\n- Flag to user if push notifications target this route\n\n**6. When changing UX\u002Fdesign:**\n- Update PRD §6\n- Apply consistently across ALL affected screens\n- Verify accessibility labels survived — component replacement drops them silently\n\n**7. When modifying data models:**\n- SQLite: add migration with incremented `user_version`\n- Zustand persisted stores: bump `version` + add `migrate` function\n\n**8. Clean up:**\n- Delete unused files — never comment out code\n- Remove orphaned imports, dependencies, navigation routes, assets\n\n**9. Update artifacts:**\n- `app.config.js` — bump version\n- `README.md` — update if features changed\n- `privacy_policy.md` — update if data handling changed\n\n### Step 5: Verify\n\nRun the verify loop from `pipeline\u002Fqa.md` (reads testing level from `apps\u002F\u003Cslug>\u002Fspec\u002Ftesting-level.txt`).\n\nIf the change affects UI: also read `.claude\u002Fskills\u002Fvisual-review\u002FSKILL.md` and review screenshots of affected screens.\nIf the change adds\u002Fremoves interactive elements: read `.claude\u002Fskills\u002Finteraction-map\u002FSKILL.md` to verify no broken promises were introduced.\n\n### Step 6: Report\n\nShow summary (in user's language):\n\n```\n## v\u003Cnew-version>\n\n**Change**: \u003Cwhat was requested>\n**Type**: feature \u002F removal \u002F fix \u002F redesign\n\n### Code\n- Modified: \u003Cfile list>\n- Created: \u003Cfile list>\n- Deleted: \u003Cfile list>\n\n### Tests\n- Added\u002Fupdated: \u003Ctest file list>\n- Result: \u003CX> tests passing\n\n### QA\n- tsc: PASS\n- expo export: PASS\n- jest: PASS (\u003CX> tests)\n- runtime: PASS (no errors on simulator)\n\nAnything else to change?\n```\n\nWait for feedback:\n- More changes → loop back to Step 2\n- Done → complete\n- Revert → undo changes\n\n---\n\n## RULES\n\n- **PRD first** — update spec before code\n- **Understand before changing** — read codebase structure before writing\n- **Follow existing patterns** — match architecture, naming, style\n- **Write tests** — every change includes tests\n- **No dead code** — delete what's unused, never comment out\n- **Runtime verified** — app must run on simulator without errors\n- **Scope discipline** — one change per request, don't refactor unrelated code\n- **Version bump** on every change\n- **Fetch docs** before using new SDK modules\n",{"name":5,"description":7,"disable-model-invocation":37},true,"main","e39a04a960c243f7738950db3eed53e837c062dd",".claude\u002Fskills\u002Fimprove-app",1,"https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute","https:\u002F\u002Fgithub.com\u002Fbes-dev","2026-03-27 05:33:20",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":37},[47,50,53],{"tool":48,"command":49},"npx","npx skills add bes-dev\u002Fetnamute --skill improve-app",{"tool":51,"command":52},"bunx","bunx skills add bes-dev\u002Fetnamute --skill improve-app",{"tool":54,"command":55},"pnpm","pnpm dlx skills add bes-dev\u002Fetnamute --skill improve-app","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimprove-app\u002FSKILL.md",[],[59,77,99,110,136,152],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":32},"01M6GJYE0ETPG05YX6P7S0DCCZ","visual-review","Read screenshots and verify UI against DESIGN.md, reference mockups, and quality checklist","https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fvisual-review\u002FSKILL.md",[],[66,67,68,69,70,71,72,73,74,75,76],"visual review","visual","review","checklist","design","screenshots","ui","verify","quality","read","reference",{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":88,"publishedAt":32},"01M6GJY8XRG3W3GJE1QWGHMMME","testing","Full QA procedure — interaction map, unit tests, Maestro flows, visual review","https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftesting\u002FSKILL.md",[83],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[79,89,68,90,91,92,67,93,94,66,95,96,97,98],"unit","unit tests","qa","map","full","tests","interaction","maestro","flows","interaction map",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":106,"publishedAt":32},"01M6GJY500FD4HXFH7S7AXYG23","test-app","Run full QA — interaction map, unit tests, Maestro UI tests, visual review","https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Ftest-app\u002FSKILL.md",[105],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},[107,20,108,31,98,89,68,96,90,109,91,72,92,67,93,94,66,95],"test app","test","run",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":124,"publishedAt":32},"01M6GJXZEHY6N4F48ETC47ZW8T","spec-app","Generate PRD through discovery interview and market research — no code","https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fspec-app\u002FSKILL.md",[116,119],{"categoryNo":117,"categoryName":118,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":120,"categoryName":121,"taxonomyType":122,"taxonomyTypeDesc":123},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[125,20,126,127,128,23,129,130,131,132,133,134,135,31],"spec app","spec","research","generate","prd","discovery","market research","interview","Market","discovery interview","no code",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":32},"01M6GJXQV76W3DBBQRMEC4B1X6","release-app","Build, sign, and submit app to App Store and Google Play — fully automated","https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Frelease-app\u002FSKILL.md",[],[143,144,20,145,146,147,148,149,150,151,31],"release app","release","play","google","google play","store","submit","sign","build",{"skillNo":153,"name":154,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":160,"publishedAt":32},"01M6GJXHK404PAYHA1DVDM16K9","react-native","https:\u002F\u002Fgithub.com\u002Fbes-dev\u002Fetnamute\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Freact-native\u002FSKILL.md",[157],{"categoryNo":158,"categoryName":159,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000009","前端开发",[161,162,163],"react native","react","native"]