evizi-kit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +506 -0
- package/kits/agent/.agent/skills/claude-code-subagent-creator/SKILL.md +292 -0
- package/kits/agent/.agent/skills/claude-code-subagent-creator/references/claude-code-subagent-configuration.md +158 -0
- package/kits/agent/.agent/skills/claude-code-subagent-creator/templates/subagent-profile.template.md +26 -0
- package/kits/agent/.agent/skills/skill-creator/LICENSE.txt +202 -0
- package/kits/agent/.agent/skills/skill-creator/SKILL.md +485 -0
- package/kits/agent/.agent/skills/skill-creator/agents/analyzer.md +274 -0
- package/kits/agent/.agent/skills/skill-creator/agents/comparator.md +202 -0
- package/kits/agent/.agent/skills/skill-creator/agents/grader.md +223 -0
- package/kits/agent/.agent/skills/skill-creator/assets/eval_review.html +146 -0
- package/kits/agent/.agent/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/kits/agent/.agent/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/kits/agent/.agent/skills/skill-creator/references/schemas.md +430 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/__init__.py +0 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/generate_report.py +326 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/improve_description.py +247 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/package_skill.py +136 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/run_eval.py +310 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/run_loop.py +328 -0
- package/kits/agent/.agent/skills/skill-creator/scripts/utils.py +47 -0
- package/kits/agent/manifest.json +10 -0
- package/kits/claude/.claude/agents/code-pusher.md +46 -0
- package/kits/claude/.claude/agents/feature-document-updater.md +37 -0
- package/kits/claude/.claude/agents/self-reviewer.md +32 -0
- package/kits/claude/.claude/agents/web-auto-agentic-workflow-initializer.md +42 -0
- package/kits/claude/.claude/agents/web-auto-assisted-fix-and-runner.md +36 -0
- package/kits/claude/.claude/agents/web-auto-chrome-devtools-selector-extractor.md +36 -0
- package/kits/claude/.claude/agents/web-auto-coder.md +33 -0
- package/kits/claude/.claude/agents/web-auto-fe-selector-extractor.md +31 -0
- package/kits/claude/.claude/agents/web-auto-fix-and-runner.md +35 -0
- package/kits/claude/.claude/agents/web-auto-lessons-learned-extractor.md +34 -0
- package/kits/claude/.claude/agents/web-auto-playwright-mcp-selector-extractor.md +37 -0
- package/kits/claude/.claude/agents/web-auto-source-instructions-updater.md +43 -0
- package/kits/claude/.claude/agents/web-auto-test-cases-generator.md +29 -0
- package/kits/claude/.claude/agents/web-auto-ticket-designer.md +35 -0
- package/kits/claude/.claude/agents/web-auto-ticket-playbook-planner.md +36 -0
- package/kits/claude/.claude/agents/web-auto.md +382 -0
- package/kits/claude/.claude/skills/claude-code-subagent-creator/SKILL.md +292 -0
- package/kits/claude/.claude/skills/claude-code-subagent-creator/references/claude-code-subagent-configuration.md +158 -0
- package/kits/claude/.claude/skills/claude-code-subagent-creator/templates/subagent-profile.template.md +26 -0
- package/kits/claude/.claude/skills/skill-creator/LICENSE.txt +202 -0
- package/kits/claude/.claude/skills/skill-creator/SKILL.md +485 -0
- package/kits/claude/.claude/skills/skill-creator/agents/analyzer.md +274 -0
- package/kits/claude/.claude/skills/skill-creator/agents/comparator.md +202 -0
- package/kits/claude/.claude/skills/skill-creator/agents/grader.md +223 -0
- package/kits/claude/.claude/skills/skill-creator/assets/eval_review.html +146 -0
- package/kits/claude/.claude/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/kits/claude/.claude/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/kits/claude/.claude/skills/skill-creator/references/schemas.md +430 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/__init__.py +0 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/generate_report.py +326 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/improve_description.py +247 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/package_skill.py +136 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/run_eval.py +310 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/run_loop.py +328 -0
- package/kits/claude/.claude/skills/skill-creator/scripts/utils.py +47 -0
- package/kits/claude/manifest.json +10 -0
- package/kits/cursor/.cursor/agents/code-pusher.agent.md +43 -0
- package/kits/cursor/.cursor/agents/feature-document-updater.agent.md +34 -0
- package/kits/cursor/.cursor/agents/self-reviewer.agent.md +29 -0
- package/kits/cursor/.cursor/agents/web-auto-agentic-workflow-initializer.agent.md +37 -0
- package/kits/cursor/.cursor/agents/web-auto-assisted-fix-and-runner.agent.md +33 -0
- package/kits/cursor/.cursor/agents/web-auto-chrome-devtools-selector-extractor.agent.md +31 -0
- package/kits/cursor/.cursor/agents/web-auto-coder.agent.md +30 -0
- package/kits/cursor/.cursor/agents/web-auto-fe-selector-extractor.agent.md +28 -0
- package/kits/cursor/.cursor/agents/web-auto-fix-and-runner.agent.md +32 -0
- package/kits/cursor/.cursor/agents/web-auto-lessons-learned-extractor.agent.md +31 -0
- package/kits/cursor/.cursor/agents/web-auto-playwright-mcp-selector-extractor.agent.md +32 -0
- package/kits/cursor/.cursor/agents/web-auto-source-instructions-updater.agent.md +40 -0
- package/kits/cursor/.cursor/agents/web-auto-test-cases-generator.agent.md +26 -0
- package/kits/cursor/.cursor/agents/web-auto-ticket-designer.agent.md +32 -0
- package/kits/cursor/.cursor/agents/web-auto-ticket-playbook-planner.agent.md +33 -0
- package/kits/cursor/.cursor/agents/web-auto.agent.md +379 -0
- package/kits/cursor/.cursor/skills/claude-code-subagent-creator/SKILL.md +292 -0
- package/kits/cursor/.cursor/skills/claude-code-subagent-creator/references/claude-code-subagent-configuration.md +158 -0
- package/kits/cursor/.cursor/skills/claude-code-subagent-creator/templates/subagent-profile.template.md +26 -0
- package/kits/cursor/.cursor/skills/skill-creator/LICENSE.txt +202 -0
- package/kits/cursor/.cursor/skills/skill-creator/SKILL.md +485 -0
- package/kits/cursor/.cursor/skills/skill-creator/agents/analyzer.md +274 -0
- package/kits/cursor/.cursor/skills/skill-creator/agents/comparator.md +202 -0
- package/kits/cursor/.cursor/skills/skill-creator/agents/grader.md +223 -0
- package/kits/cursor/.cursor/skills/skill-creator/assets/eval_review.html +146 -0
- package/kits/cursor/.cursor/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/kits/cursor/.cursor/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/kits/cursor/.cursor/skills/skill-creator/references/schemas.md +430 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/__init__.py +0 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/generate_report.py +326 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/improve_description.py +247 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/package_skill.py +136 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/run_eval.py +310 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/run_loop.py +328 -0
- package/kits/cursor/.cursor/skills/skill-creator/scripts/utils.py +47 -0
- package/kits/cursor/manifest.json +10 -0
- package/kits/github/.github/agents/code-pusher.agent.md +45 -0
- package/kits/github/.github/agents/feature-document-updater.agent.md +36 -0
- package/kits/github/.github/agents/self-reviewer.agent.md +31 -0
- package/kits/github/.github/agents/web-auto-agentic-workflow-initializer.agent.md +39 -0
- package/kits/github/.github/agents/web-auto-assisted-fix-and-runner.agent.md +35 -0
- package/kits/github/.github/agents/web-auto-chrome-devtools-selector-extractor.agent.md +33 -0
- package/kits/github/.github/agents/web-auto-coder.agent.md +32 -0
- package/kits/github/.github/agents/web-auto-fe-selector-extractor.agent.md +30 -0
- package/kits/github/.github/agents/web-auto-fix-and-runner.agent.md +34 -0
- package/kits/github/.github/agents/web-auto-lessons-learned-extractor.agent.md +33 -0
- package/kits/github/.github/agents/web-auto-playwright-mcp-selector-extractor.agent.md +34 -0
- package/kits/github/.github/agents/web-auto-source-instructions-updater.agent.md +42 -0
- package/kits/github/.github/agents/web-auto-test-cases-generator.agent.md +28 -0
- package/kits/github/.github/agents/web-auto-ticket-designer.agent.md +34 -0
- package/kits/github/.github/agents/web-auto-ticket-playbook-creator.agent.md +35 -0
- package/kits/github/.github/agents/web-auto.agent.md +382 -0
- package/kits/github/.github/skills/claude-code-subagent-creator/SKILL.md +310 -0
- package/kits/github/.github/skills/claude-code-subagent-creator/references/claude-code-subagent-configuration.md +158 -0
- package/kits/github/.github/skills/claude-code-subagent-creator/templates/subagent-profile.template.md +37 -0
- package/kits/github/.github/skills/skill-creator/LICENSE.txt +202 -0
- package/kits/github/.github/skills/skill-creator/SKILL.md +485 -0
- package/kits/github/.github/skills/skill-creator/agents/analyzer.md +274 -0
- package/kits/github/.github/skills/skill-creator/agents/comparator.md +202 -0
- package/kits/github/.github/skills/skill-creator/agents/grader.md +223 -0
- package/kits/github/.github/skills/skill-creator/assets/eval_review.html +146 -0
- package/kits/github/.github/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/kits/github/.github/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/kits/github/.github/skills/skill-creator/references/schemas.md +430 -0
- package/kits/github/.github/skills/skill-creator/scripts/__init__.py +0 -0
- package/kits/github/.github/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/kits/github/.github/skills/skill-creator/scripts/generate_report.py +326 -0
- package/kits/github/.github/skills/skill-creator/scripts/improve_description.py +247 -0
- package/kits/github/.github/skills/skill-creator/scripts/package_skill.py +136 -0
- package/kits/github/.github/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/kits/github/.github/skills/skill-creator/scripts/run_eval.py +310 -0
- package/kits/github/.github/skills/skill-creator/scripts/run_loop.py +328 -0
- package/kits/github/.github/skills/skill-creator/scripts/utils.py +47 -0
- package/kits/github/manifest.json +10 -0
- package/kits/shared/docs/ai-code-review.md +440 -0
- package/kits/shared/docs/increase-unit-test-coverage.md +77 -0
- package/kits/shared/docs/pr-review-agent.md +501 -0
- package/kits/shared/docs/self-review-agent.md +246 -0
- package/kits/shared/docs/web-auto-agentic-workflow.md +506 -0
- package/kits/shared/manifest.json +11 -0
- package/kits/shared/skills/fix-automation-tests/SKILL.md +280 -0
- package/kits/shared/skills/fix-automation-tests/scripts/fetch_pr_changes.py +300 -0
- package/kits/shared/skills/fix-automation-tests/templates/impact-report.template.md +42 -0
- package/kits/shared/skills/increase-unit-test-coverage/SKILL.md +117 -0
- package/kits/shared/skills/increase-unit-test-coverage/scripts/filter_low_coverage.py +447 -0
- package/kits/shared/skills/pr-review/SKILL.md +200 -0
- package/kits/shared/skills/pr-review/references/automation.md +62 -0
- package/kits/shared/skills/pr-review/references/backend.md +95 -0
- package/kits/shared/skills/pr-review/references/frontend.md +103 -0
- package/kits/shared/skills/pr-review/references/mobile.md +108 -0
- package/kits/shared/skills/pr-review/references/output-schema.md +130 -0
- package/kits/shared/skills/pr-review/scripts/post-review.py +1395 -0
- package/kits/shared/skills/push-code/SKILL.md +176 -0
- package/kits/shared/skills/self-review/SKILL.md +234 -0
- package/kits/shared/skills/self-review/evals/evals.json +23 -0
- package/kits/shared/skills/self-review/references/automation.md +62 -0
- package/kits/shared/skills/self-review/references/backend.md +95 -0
- package/kits/shared/skills/self-review/references/frontend.md +103 -0
- package/kits/shared/skills/self-review/references/mobile.md +108 -0
- package/kits/shared/skills/self-review/templates/issues.template.md +72 -0
- package/kits/shared/skills/update-feature-document/SKILL.md +156 -0
- package/kits/shared/skills/update-feature-document/templates/delta.template.yaml +58 -0
- package/kits/shared/skills/update-feature-document/templates/feature.template.md +25 -0
- package/kits/shared/skills/web-auto-assisted-fix-and-run/SKILL.md +130 -0
- package/kits/shared/skills/web-auto-assisted-fix-and-run/references/resolve-api-error.md +108 -0
- package/kits/shared/skills/web-auto-assisted-fix-and-run/references/resolve-selector.md +60 -0
- package/kits/shared/skills/web-auto-assisted-fix-and-run/templates/issues-resolution-report-append.template.md +54 -0
- package/kits/shared/skills/web-auto-chrome-devtools-mcp-extract-selectors/SKILL.md +284 -0
- package/kits/shared/skills/web-auto-coding/SKILL.md +152 -0
- package/kits/shared/skills/web-auto-extract-lessons-learned/SKILL.md +168 -0
- package/kits/shared/skills/web-auto-extract-lessons-learned/templates/lessons-learned.template.md +115 -0
- package/kits/shared/skills/web-auto-fe-extract-selectors/SKILL.md +282 -0
- package/kits/shared/skills/web-auto-fe-extract-selectors/evals/evals.json +23 -0
- package/kits/shared/skills/web-auto-fix-and-run-test/SKILL.md +183 -0
- package/kits/shared/skills/web-auto-fix-and-run-test/templates/issues-resolution-report.template.md +77 -0
- package/kits/shared/skills/web-auto-generate-best-practices/SKILL.md +123 -0
- package/kits/shared/skills/web-auto-generate-instructions/SKILL.md +200 -0
- package/kits/shared/skills/web-auto-generate-instructions/evals/evals.json +23 -0
- package/kits/shared/skills/web-auto-generate-instructions/references/analysis-guide.md +145 -0
- package/kits/shared/skills/web-auto-generate-instructions/templates/web-auto-instructions.template.md +184 -0
- package/kits/shared/skills/web-auto-generate-project-blueprint/SKILL.md +181 -0
- package/kits/shared/skills/web-auto-generate-project-blueprint/evals/evals.json +57 -0
- package/kits/shared/skills/web-auto-generate-project-blueprint/templates/web-auto-project-blueprint.template.md +161 -0
- package/kits/shared/skills/web-auto-playwright-mcp-extract-selectors/SKILL.md +293 -0
- package/kits/shared/skills/web-auto-test-cases/SKILL.md +138 -0
- package/kits/shared/skills/web-auto-test-cases/evals/evals.json +129 -0
- package/kits/shared/skills/web-auto-test-cases/templates/test-cases.template.md +53 -0
- package/kits/shared/skills/web-auto-ticket-design/SKILL.md +199 -0
- package/kits/shared/skills/web-auto-ticket-design/templates/ticket-design.template.md +138 -0
- package/kits/shared/skills/web-auto-ticket-playbook/SKILL.md +218 -0
- package/kits/shared/skills/web-auto-ticket-playbook/evals/evals.json +23 -0
- package/kits/shared/skills/web-auto-ticket-playbook/templates/ticket-playbook.template.md +148 -0
- package/kits/shared/skills/web-auto-update-source-instructions/SKILL.md +156 -0
- package/kits/shared/skills/web-auto-update-source-instructions/evals/evals.json +22 -0
- package/kits/shared/skills/workspace-ai-nav-creator/SKILL.md +168 -0
- package/kits/shared/skills/workspace-ai-nav-creator/templates/agents-md.template.md +112 -0
- package/kits/shared/skills/workspace-ai-nav-creator/templates/claude-md.template.md +86 -0
- package/package.json +16 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Frontend Code Review Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist when reviewing Web Frontend code (React, Vue, Angular, Svelte, HTML/CSS).
|
|
4
|
+
|
|
5
|
+
> **Severity guide**: Each item is tagged with a default severity. Adjust based on context — a missing error boundary in a settings page is a warning, but in a payment flow it's critical.
|
|
6
|
+
> - ❌ = Critical (blocks PR)
|
|
7
|
+
> - ⚠️ = Warning (should fix)
|
|
8
|
+
> - 💡 = Suggestion (nice to have)
|
|
9
|
+
|
|
10
|
+
## 🛡️ Security (review first)
|
|
11
|
+
- ❌ **XSS Prevention**: Is `dangerouslySetInnerHTML` avoided or input sanitized? Unsanitized user content renders directly into the DOM.
|
|
12
|
+
- ❌ **Sensitive Data Exposure**: Are tokens/passwords stored securely? (not in localStorage for auth tokens — use httpOnly cookies or secure session management)
|
|
13
|
+
- ⚠️ **CSRF Protection**: Are CSRF tokens included in state-changing forms?
|
|
14
|
+
- ⚠️ **Cookie Flags**: Are cookies set with `Secure`, `HttpOnly`, and `SameSite` flags?
|
|
15
|
+
- ⚠️ **Third-Party Scripts**: Are CDN scripts verified with Subresource Integrity (SRI)?
|
|
16
|
+
- 💡 **Content Security Policy**: Is CSP configured to limit script sources?
|
|
17
|
+
|
|
18
|
+
## 🚨 Error Handling
|
|
19
|
+
- ❌ **Error Boundaries**: Are error boundaries in place to catch component crashes? An uncaught error in a child component can take down the entire app.
|
|
20
|
+
- ⚠️ **Fallback UI**: Is there graceful fallback for error states?
|
|
21
|
+
- ⚠️ **Network Errors**: Are API failures handled with user-facing feedback and retry/fallback?
|
|
22
|
+
- ⚠️ **Form Validation**: Are validation errors clearly displayed near the relevant fields?
|
|
23
|
+
- 💡 **Error Messages**: Are messages user-friendly (not raw error objects or stack traces)?
|
|
24
|
+
|
|
25
|
+
## 🧩 Component Architecture
|
|
26
|
+
- ⚠️ **Component Size**: Are components too large (>200 lines)? Should they be split?
|
|
27
|
+
- ⚠️ **Single Responsibility**: Does each component do one thing well?
|
|
28
|
+
- ⚠️ **Prop Drilling**: Are props passed through many levels? (Consider context/state management)
|
|
29
|
+
- 💡 **Reusability**: Are common patterns extracted to shared components?
|
|
30
|
+
|
|
31
|
+
## 🗄️ State Management
|
|
32
|
+
- ❌ **Effect Cleanups**: Do `useEffect` hooks clean up listeners/timers/subscriptions? Missing cleanups cause memory leaks and stale state bugs.
|
|
33
|
+
- ⚠️ **State Location**: Is state at the right level (not too high, not too low)?
|
|
34
|
+
- ⚠️ **Derived State**: Is redundant state avoided (computed from existing state)?
|
|
35
|
+
- ⚠️ **State Updates**: Are state updates immutable?
|
|
36
|
+
- 💡 **Global State**: Is global state (Redux/Zustand/Context) used only when needed?
|
|
37
|
+
|
|
38
|
+
## ⚡ Performance & Rendering
|
|
39
|
+
- ⚠️ **Re-renders**: Are components re-rendering unnecessarily? (Check `useCallback`/`useMemo` in React, `computed` in Vue)
|
|
40
|
+
- ⚠️ **Bundle Size**: Are large libraries imported efficiently? (`import map from 'lodash/map'` vs `import _ from 'lodash'`)
|
|
41
|
+
- ⚠️ **Race Conditions**: Are stale requests cancelled (AbortController) to prevent rendering outdated data?
|
|
42
|
+
- 💡 **Image Optimization**: Are images lazy-loaded with explicit dimensions (prevent CLS)?
|
|
43
|
+
- 💡 **List Virtualization**: Are long lists (>100 items) virtualized?
|
|
44
|
+
- 💡 **Code Splitting**: Are routes and large components code-split?
|
|
45
|
+
- 💡 **Memoization**: Are expensive computations memoized?
|
|
46
|
+
|
|
47
|
+
## ⏳ Loading & Async States
|
|
48
|
+
- ⚠️ **Loading Indicators**: Are loading states shown for async operations?
|
|
49
|
+
- ⚠️ **Optimistic Updates**: Are UI updates optimistic where appropriate?
|
|
50
|
+
- 💡 **Skeleton Screens**: Are skeleton loaders used instead of spinners for better UX?
|
|
51
|
+
- 💡 **Suspense / Streaming**: Is React Suspense, Vue async components, or framework streaming used appropriately?
|
|
52
|
+
|
|
53
|
+
## 📝 Forms & User Input
|
|
54
|
+
- ⚠️ **Controlled Components**: Are form inputs properly controlled?
|
|
55
|
+
- ⚠️ **Validation**: Is client-side validation implemented for required fields and formats?
|
|
56
|
+
- ⚠️ **Submit Protection**: Are submit buttons disabled during API calls to prevent double submission?
|
|
57
|
+
- 💡 **Debouncing**: Are expensive operations (search, API calls) debounced/throttled?
|
|
58
|
+
- 💡 **Success Feedback**: Is user notified of successful actions?
|
|
59
|
+
|
|
60
|
+
## 🔄 Data & API Integration
|
|
61
|
+
- ⚠️ **Error States**: Are API errors caught and displayed to user?
|
|
62
|
+
- ⚠️ **Request Cancellation**: Are pending requests cancelled on unmount?
|
|
63
|
+
- 💡 **Caching**: Are API responses cached (React Query, SWR, Apollo) to avoid redundant requests?
|
|
64
|
+
- 💡 **Retry Logic**: Are failed requests retried with backoff?
|
|
65
|
+
|
|
66
|
+
## 📱 Responsiveness & CSS
|
|
67
|
+
- ⚠️ **Mobile Support**: Does the layout work on small screens (320px+)?
|
|
68
|
+
- ⚠️ **Design Tokens**: Are CSS variables/design tokens used instead of hardcoded values?
|
|
69
|
+
- 💡 **Touch Targets**: Are interactive elements at least 44x44px?
|
|
70
|
+
- 💡 **Animations**: Are animations performant (use `transform`/`opacity`, avoid layout thrashing)?
|
|
71
|
+
- 💡 **Dark Mode**: Is dark mode support considered?
|
|
72
|
+
|
|
73
|
+
## ♿ Accessibility (a11y)
|
|
74
|
+
- ⚠️ **Semantic HTML**: Are proper elements used (`<button>`, `<nav>`, `<main>`, not `<div>` for everything)?
|
|
75
|
+
- ⚠️ **Alt Text**: Do all images have meaningful `alt` attributes?
|
|
76
|
+
- ⚠️ **Keyboard Navigation**: Are interactive elements reachable via Tab?
|
|
77
|
+
- ⚠️ **Focus Indicators**: Are focus styles visible (not `outline: none` without replacement)?
|
|
78
|
+
- 💡 **Color Contrast**: Does text meet WCAG contrast ratios (4.5:1 for normal text)?
|
|
79
|
+
- 💡 **ARIA Labels**: Are ARIA labels used where native semantics are insufficient?
|
|
80
|
+
- 💡 **Heading Hierarchy**: Are headings (h1-h6) used in logical order?
|
|
81
|
+
|
|
82
|
+
## 🔒 Type Safety
|
|
83
|
+
- ⚠️ **TypeScript**: Are types defined for props, state, and functions?
|
|
84
|
+
- ⚠️ **Any Types**: Is `any` avoided? (use `unknown` or proper types)
|
|
85
|
+
- ⚠️ **Null Checks**: Are nullable values properly handled?
|
|
86
|
+
- 💡 **Type Inference**: Are types inferred where possible (avoid redundant annotations)?
|
|
87
|
+
|
|
88
|
+
## 🧪 Testing & Quality
|
|
89
|
+
- ⚠️ **Unit Tests**: Are components tested for key behaviors?
|
|
90
|
+
- ⚠️ **Test IDs**: Are `data-testid` attributes added for E2E testing?
|
|
91
|
+
- 💡 **Accessibility Tests**: Are a11y rules tested (jest-axe, testing-library)?
|
|
92
|
+
- 💡 **Edge Cases**: Are loading/error states tested?
|
|
93
|
+
|
|
94
|
+
## 🏗️ Code Quality
|
|
95
|
+
- ⚠️ **Console Logs**: Are debug `console.log` statements removed?
|
|
96
|
+
- ⚠️ **DRY Principle**: Is duplicated code refactored?
|
|
97
|
+
- 💡 **Magic Numbers**: Are hardcoded values extracted to constants?
|
|
98
|
+
- 💡 **Naming Conventions**: Are variables, functions, and components clearly named?
|
|
99
|
+
|
|
100
|
+
## 🔍 SEO & Meta (if applicable)
|
|
101
|
+
- 💡 **Meta Tags**: Are title, description, and Open Graph tags set?
|
|
102
|
+
- 💡 **Semantic HTML**: Are heading tags used hierarchically?
|
|
103
|
+
- 💡 **Canonical URLs**: Are canonical tags set for duplicate content?
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Mobile Code Review Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist when reviewing iOS (Swift/SwiftUI) or Android (Kotlin/Jetpack Compose) code.
|
|
4
|
+
|
|
5
|
+
> **Severity guide**: Each item is tagged with a default severity. Adjust based on context — a missing loading indicator on a debug screen is a suggestion, but on a checkout flow it's a warning.
|
|
6
|
+
> - ❌ = Critical (blocks PR)
|
|
7
|
+
> - ⚠️ = Warning (should fix)
|
|
8
|
+
> - 💡 = Suggestion (nice to have)
|
|
9
|
+
|
|
10
|
+
## 🔒 Security (review first)
|
|
11
|
+
- ❌ **No Hardcoded Secrets**: Are API keys, tokens, and credentials stored in config/env — not committed in source code?
|
|
12
|
+
- ❌ **Secure Storage**: Are sensitive credentials stored in Keychain (iOS) or Android Keystore — not SharedPreferences/UserDefaults?
|
|
13
|
+
- ❌ **Deep Link Validation**: Are deep link parameters validated and sanitized to prevent injection attacks?
|
|
14
|
+
- ⚠️ **Certificate Pinning**: Is SSL pinning implemented for sensitive API calls?
|
|
15
|
+
- ⚠️ **Biometric Auth**: Is biometric authentication implemented with proper fallback (passcode)?
|
|
16
|
+
- 💡 **Root/Jailbreak Detection**: Is rooted/jailbroken device detection implemented for sensitive flows?
|
|
17
|
+
- 💡 **Screenshot Protection**: Is sensitive data hidden when app enters background (recent apps view)?
|
|
18
|
+
- 💡 **Code Obfuscation**: Is ProGuard/R8 (Android) enabled for release builds?
|
|
19
|
+
|
|
20
|
+
## 📱 Threading & Lifecycle
|
|
21
|
+
- ❌ **Main Thread Safety**: Is heavy work (DB, network, computation, image processing) off the UI thread? Main-thread blocking causes ANRs (Android) and UI freezes (iOS).
|
|
22
|
+
- ❌ **Lifecycle Cleanup**: Are observers, listeners, and subscriptions removed in `onDestroy`/`onDisappear`/`deinit`? Leaking these causes crashes and ghost updates.
|
|
23
|
+
- ⚠️ **Memory Management**: Are strong reference cycles avoided in closures/listeners? (Use `[weak self]` in Swift, `WeakReference` in Kotlin)
|
|
24
|
+
- ⚠️ **Configuration Changes**: Are configuration changes (rotation, dark mode, locale) handled without data loss?
|
|
25
|
+
- ⚠️ **State Restoration**: Is state saved/restored correctly on process death?
|
|
26
|
+
- 💡 **Permissions**: Are runtime permissions requested at appropriate times with clear explanation?
|
|
27
|
+
|
|
28
|
+
## 🌐 Networking
|
|
29
|
+
- ⚠️ **Timeout Configuration**: Are network requests configured with explicit timeouts?
|
|
30
|
+
- ⚠️ **Error Handling**: Are network errors handled gracefully with user-friendly messages?
|
|
31
|
+
- ⚠️ **Offline Mode**: Does the app handle "No Internet" states without crashing?
|
|
32
|
+
- ⚠️ **Request Cancellation**: Are pending requests cancelled when leaving the screen?
|
|
33
|
+
- 💡 **Retry Logic**: Are failed requests retried with exponential backoff?
|
|
34
|
+
- 💡 **Response Validation**: Are API responses validated before use (null checks, type validation)?
|
|
35
|
+
- 💡 **Network Reachability**: Is network status checked before making API calls?
|
|
36
|
+
|
|
37
|
+
## 💾 Memory & Resources
|
|
38
|
+
- ❌ **Memory Leaks**: Are retain cycles (iOS closures) and context leaks (Android activities in singletons) avoided?
|
|
39
|
+
- ⚠️ **Image Handling**: Are bitmaps scaled/compressed before loading into memory? Full-resolution images in lists cause OOM.
|
|
40
|
+
- ⚠️ **Image Caching**: Are images cached appropriately (Glide/Coil for Android, SDWebImage/Kingfisher for iOS)?
|
|
41
|
+
- 💡 **Resource Files**: Are strings, colors, and dimensions in resource files (not hardcoded)?
|
|
42
|
+
- 💡 **Memory Warnings**: Are memory warnings handled (iOS `didReceiveMemoryWarning`)?
|
|
43
|
+
|
|
44
|
+
## ⚡ Performance
|
|
45
|
+
- ⚠️ **List Recycling**: Are RecyclerView (Android) / LazyColumn (Compose) / List (SwiftUI) used for scrollable lists?
|
|
46
|
+
- ⚠️ **Lazy Loading**: Are heavy resources loaded only when needed?
|
|
47
|
+
- 💡 **App Launch Time**: Is cold start optimized? (Defer non-essential initialization)
|
|
48
|
+
- 💡 **Smooth Animations**: Are animations smooth (avoid layout passes during animation)?
|
|
49
|
+
- 💡 **Background Work**: Is WorkManager (Android) or BGTaskScheduler (iOS) used for background tasks?
|
|
50
|
+
- 💡 **App Size**: Are unused resources and large assets optimized?
|
|
51
|
+
|
|
52
|
+
## 🧭 Navigation & Architecture
|
|
53
|
+
- ⚠️ **Navigation Patterns**: Is navigation consistent? (Navigation Component / Compose Navigation on Android, NavigationStack / Coordinator on iOS)
|
|
54
|
+
- ⚠️ **Back Stack**: Is back navigation handled properly without stack corruption?
|
|
55
|
+
- ⚠️ **Architecture Pattern**: Is MVVM / MVI followed consistently? Business logic should not live in Views.
|
|
56
|
+
- 💡 **Dependency Injection**: Are dependencies injected (Hilt/Koin for Android, manual DI or Swinject for iOS)?
|
|
57
|
+
- 💡 **Deep Linking**: Do deep links route to the correct screens?
|
|
58
|
+
|
|
59
|
+
## 📱 UI/UX
|
|
60
|
+
- ⚠️ **Safe Areas**: Does content respect notches, dynamic islands, and status bars?
|
|
61
|
+
- ⚠️ **Loading States**: Are loading indicators shown for async operations?
|
|
62
|
+
- ⚠️ **Error States**: Are error messages user-friendly with retry options?
|
|
63
|
+
- ⚠️ **Keyboard Handling**: Does the keyboard not cover input fields? (Insets, scroll adjustment)
|
|
64
|
+
- 💡 **Touch Feedback**: Do interactive elements show visual feedback when pressed?
|
|
65
|
+
- 💡 **Empty States**: Are empty states designed with helpful messages?
|
|
66
|
+
- 💡 **Pull to Refresh**: Is pull-to-refresh implemented where appropriate?
|
|
67
|
+
|
|
68
|
+
## ♿ Accessibility
|
|
69
|
+
- ⚠️ **Screen Reader**: Is content accessible to VoiceOver (iOS) / TalkBack (Android)?
|
|
70
|
+
- ⚠️ **Content Descriptions**: Do images/icons have content descriptions?
|
|
71
|
+
- ⚠️ **Touch Targets**: Are touch targets at least 44x44 points?
|
|
72
|
+
- 💡 **Font Scaling**: Does UI support dynamic font sizes?
|
|
73
|
+
- 💡 **Color Contrast**: Does text meet WCAG contrast requirements?
|
|
74
|
+
|
|
75
|
+
## 🌍 Localization
|
|
76
|
+
- ⚠️ **Hardcoded Strings**: Are all user-facing strings in resource files (Localizable.strings / strings.xml)?
|
|
77
|
+
- 💡 **RTL Support**: Does layout support right-to-left languages?
|
|
78
|
+
- 💡 **Date/Number Formatting**: Are dates/numbers formatted for locale?
|
|
79
|
+
- 💡 **Plurals**: Are plural strings handled correctly?
|
|
80
|
+
|
|
81
|
+
## 💾 Data Persistence
|
|
82
|
+
- ⚠️ **Database**: Is Room (Android) or Core Data / SwiftData (iOS) used correctly?
|
|
83
|
+
- ⚠️ **Migrations**: Are database migrations handled safely without data loss?
|
|
84
|
+
- 💡 **Cache Management**: Is cached data invalidated when stale?
|
|
85
|
+
- 💡 **Preferences**: Are SharedPreferences/UserDefaults used only for simple key-value data?
|
|
86
|
+
|
|
87
|
+
## 🧪 Testing
|
|
88
|
+
- ⚠️ **Unit Tests**: Are business logic and ViewModels tested?
|
|
89
|
+
- 💡 **UI Tests**: Are critical user flows tested (Espresso/Compose Testing / XCUITest)?
|
|
90
|
+
- 💡 **Mock Data**: Are network calls mocked for testing?
|
|
91
|
+
- 💡 **Edge Cases**: Are error states and edge cases tested?
|
|
92
|
+
|
|
93
|
+
## 📊 Analytics & Monitoring
|
|
94
|
+
- ⚠️ **Crash Reporting**: Is crash reporting configured (Firebase Crashlytics / Sentry)?
|
|
95
|
+
- 💡 **Analytics Events**: Are key user actions tracked?
|
|
96
|
+
- 💡 **Performance Monitoring**: Is app performance monitored (launch time, screen load)?
|
|
97
|
+
- 💡 **ANR Detection**: Are ANRs monitored (Android)?
|
|
98
|
+
|
|
99
|
+
## 🏗️ Code Quality
|
|
100
|
+
- ⚠️ **Naming Conventions**: Are classes, functions, and variables clearly named per platform conventions?
|
|
101
|
+
- ⚠️ **DRY Principle**: Is duplicated code refactored?
|
|
102
|
+
- ⚠️ **Deprecated APIs**: Are deprecated APIs replaced with modern alternatives?
|
|
103
|
+
- 💡 **Magic Numbers**: Are hardcoded values extracted to constants?
|
|
104
|
+
|
|
105
|
+
## 🛠️ Build & CI/CD
|
|
106
|
+
- ⚠️ **Signing**: Are signing configs secure (not committed to repo)?
|
|
107
|
+
- 💡 **Build Variants**: Are debug/release builds configured properly?
|
|
108
|
+
- 💡 **Version Code/Number**: Are version codes incremented?
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Self Review Report
|
|
2
|
+
|
|
3
|
+
**Branch**: `[CURRENT_BRANCH]` → `[TARGET_BRANCH]`
|
|
4
|
+
**Reviewed**: [DATE]
|
|
5
|
+
**Tech Stack**: [DETECTED_STACKS]
|
|
6
|
+
|
|
7
|
+
## 🎯 Verdict: [VERDICT_STATUS]
|
|
8
|
+
|
|
9
|
+
[VERDICT_MESSAGE]
|
|
10
|
+
|
|
11
|
+
> [DIVERGENCE_WARNING — include only if target branch has new commits since this branch diverged]
|
|
12
|
+
> ⚠️ Target branch has X new commit(s) since this branch diverged. This review covers your branch's changes only and cannot detect conflicts with new code on [TARGET_BRANCH]. Consider rebasing before PR.
|
|
13
|
+
|
|
14
|
+
> [PRIORITIZED_REVIEW_NOTE — include only if diff exceeded 30 files or 2000 lines]
|
|
15
|
+
> ℹ️ Large diff (X files / Y lines). Review was prioritized: security-sensitive and high-change files reviewed in depth. Generated/config/lock files received lighter review.
|
|
16
|
+
|
|
17
|
+
## Summary
|
|
18
|
+
|
|
19
|
+
| Metric | Count |
|
|
20
|
+
|--------|-------|
|
|
21
|
+
| Files Reviewed | [FILES_COUNT] |
|
|
22
|
+
| Critical Issues | [CRITICAL_COUNT] ❌ |
|
|
23
|
+
| Warnings | [WARNING_COUNT] ⚠️ |
|
|
24
|
+
| Suggestions | [SUGGESTION_COUNT] 💡 |
|
|
25
|
+
| Guidelines Loaded | [GUIDELINES_LIST or "Domain checklists only"] |
|
|
26
|
+
|
|
27
|
+
## Files Reviewed
|
|
28
|
+
|
|
29
|
+
| File | Status | Lines Changed | Issues |
|
|
30
|
+
|------|--------|---------------|--------|
|
|
31
|
+
| `[FILE_PATH]` | [STATUS_ICON] | +[ADDED] / -[REMOVED] | [ISSUE_COUNT] |
|
|
32
|
+
|
|
33
|
+
## ❌ Critical Issues (Must Fix)
|
|
34
|
+
|
|
35
|
+
> Bugs, security vulnerabilities, breaking changes, data loss risks.
|
|
36
|
+
|
|
37
|
+
| # | File | Line | Category | Issue | Recommendation |
|
|
38
|
+
|---|------|------|----------|-------|----------------|
|
|
39
|
+
| [ISSUE_ID] | `[FILE_PATH]` | [LINE_NUMBER] | [CATEGORY] | [ISSUE_DESCRIPTION] | [FIX_RECOMMENDATION] |
|
|
40
|
+
|
|
41
|
+
_No critical issues found._ <!-- Remove this line if issues exist -->
|
|
42
|
+
|
|
43
|
+
## ⚠️ Warnings (Should Fix)
|
|
44
|
+
|
|
45
|
+
> Code quality, readability, maintainability, missing error handling.
|
|
46
|
+
|
|
47
|
+
| # | File | Line | Category | Issue | Recommendation |
|
|
48
|
+
|---|------|------|----------|-------|----------------|
|
|
49
|
+
| [ISSUE_ID] | `[FILE_PATH]` | [LINE_NUMBER] | [CATEGORY] | [ISSUE_DESCRIPTION] | [FIX_RECOMMENDATION] |
|
|
50
|
+
|
|
51
|
+
_No warnings found._ <!-- Remove this line if issues exist -->
|
|
52
|
+
|
|
53
|
+
## 💡 Suggestions (Nice to Have)
|
|
54
|
+
|
|
55
|
+
> Patterns, optimizations, naming improvements.
|
|
56
|
+
|
|
57
|
+
| # | File | Line | Category | Issue | Recommendation |
|
|
58
|
+
|---|------|------|----------|-------|----------------|
|
|
59
|
+
| [ISSUE_ID] | `[FILE_PATH]` | [LINE_NUMBER] | [CATEGORY] | [ISSUE_DESCRIPTION] | [FIX_RECOMMENDATION] |
|
|
60
|
+
|
|
61
|
+
_No suggestions found._ <!-- Remove this line if issues exist -->
|
|
62
|
+
|
|
63
|
+
<!-- Include only if project-specific guidelines were loaded -->
|
|
64
|
+
## 📐 Project Convention Issues
|
|
65
|
+
|
|
66
|
+
> Violations of project blueprint, instructions, or best practices. Category shows which document the rule comes from.
|
|
67
|
+
|
|
68
|
+
| # | File | Line | Source | Issue | Recommendation |
|
|
69
|
+
|---|------|------|--------|-------|----------------|
|
|
70
|
+
| [ISSUE_ID] | `[FILE_PATH]` | [LINE_NUMBER] | [Blueprint / Instructions / Best Practices] | [ISSUE_DESCRIPTION] | [FIX_RECOMMENDATION] |
|
|
71
|
+
|
|
72
|
+
_No project convention issues found._ <!-- Remove this line if issues exist -->
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: update-feature-document
|
|
3
|
+
description: Update feature documentation after successfully implementing a ticket. Updates feature.md (behavior specifications) and delta.yaml (ticket history log) in .documents-design/features/[PARENT_FEATURE]/[CHILD_FEATURE]/. ALWAYS use this skill when a ticket is done and the feature docs need to reflect the work — even if the user doesn't say "feature document" explicitly. Triggers on requests like "update feature document for ticket TKT-001", "log ticket ABC-123 to feature", "update feature after implementing fe-2026", "record ticket completion for feature", "sync docs after finishing ticket X", "document what was done for ticket Y", "update docs for the completed ticket", "log the work from ticket Z", or any mention of recording/logging a finished ticket into feature documentation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Update Feature Document
|
|
7
|
+
|
|
8
|
+
Feature documentation is the living record of what a feature does and how it got there. `feature.md` captures the behavioral specification (what users can do), while `delta.yaml` tracks the ticket-by-ticket history of how the feature was built. Keeping these in sync after each ticket matters because they serve as the source of truth for anyone — human or AI — who needs to understand the feature's current state, what's already covered, and what's left to build.
|
|
9
|
+
|
|
10
|
+
This skill walks through reading the ticket artifacts, deciding what changed at the behavior level, and updating both files accordingly.
|
|
11
|
+
|
|
12
|
+
## Input
|
|
13
|
+
|
|
14
|
+
| Parameter | Type | Required | Description |
|
|
15
|
+
|-----------|------|----------|-------------|
|
|
16
|
+
| `TICKET_ID` | string | Yes | The ticket identifier (e.g., AUTO-2611, MM-19) |
|
|
17
|
+
|
|
18
|
+
If `TICKET_ID` is not provided, ask the user before proceeding.
|
|
19
|
+
|
|
20
|
+
## Workflow
|
|
21
|
+
|
|
22
|
+
### Step 1: Locate the Ticket
|
|
23
|
+
|
|
24
|
+
Look for the ticket directory at `.tickets/{TICKET_ID}/`.
|
|
25
|
+
|
|
26
|
+
If not found, inform the user and stop — without ticket artifacts there is nothing to extract:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Ticket directory not found for {TICKET_ID}. Check that .tickets/{TICKET_ID}/ exists.
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Step 2: Gather Ticket Context
|
|
33
|
+
|
|
34
|
+
Read available ticket artifacts. Not every ticket has all of these — read whichever exist, in this priority order (higher-priority files tend to have more concise, already-synthesized information):
|
|
35
|
+
|
|
36
|
+
1. `lessons-learned.md` — summary, outcome, issues fixed
|
|
37
|
+
2. `issues-resolution-report.md` — run status, files modified
|
|
38
|
+
3. `ticket-playbook.md` — implementation tasks
|
|
39
|
+
4. `ticket-design.md` — test steps and behaviors covered
|
|
40
|
+
5. `test-cases.md` — BDD scenarios and behavior IDs
|
|
41
|
+
|
|
42
|
+
#### 2a — Identify the Feature Path
|
|
43
|
+
|
|
44
|
+
The feature path (`PARENT_FEATURE` / `CHILD_FEATURE`) tells you where to find the feature documents under `.documents-design/features/`. Try these sources in order until you get a match:
|
|
45
|
+
|
|
46
|
+
1. **`test-cases.md`** — look for the `Feature:` line (format: `Feature: {PARENT_FEATURE} - {CHILD_FEATURE}`)
|
|
47
|
+
2. **`ticket-design.md`** — look for a feature reference in the header or "Feature" field
|
|
48
|
+
3. **`ticket-playbook.md`** — may reference the feature path in the task descriptions
|
|
49
|
+
|
|
50
|
+
If none of these yield a parseable feature path, ask the user to provide it.
|
|
51
|
+
|
|
52
|
+
#### 2b — Extract Ticket Data
|
|
53
|
+
|
|
54
|
+
Pull these fields from whichever artifacts are available:
|
|
55
|
+
|
|
56
|
+
| Field | Where to look | Fallback |
|
|
57
|
+
|-------|---------------|----------|
|
|
58
|
+
| **Summary** (1-2 sentences) | `lessons-learned.md` summary, or `ticket-design.md` overview | Compose from available context |
|
|
59
|
+
| **Ticket type** (`automation` / `feature` / `bugfix` / `refactor`) | Infer from content — automation tickets create test specs, feature tickets add product capabilities | `automation` if unclear |
|
|
60
|
+
| **Behaviors covered** (IDs like COM-1, COM-2) | `test-cases.md` scenario tags, `ticket-design.md` behavior list | List scenario names if no IDs exist |
|
|
61
|
+
| **Behaviors affected** (indirectly impacted IDs) | `lessons-learned.md` side effects, `issues-resolution-report.md` modified files touching other behaviors | `[]` if none apparent |
|
|
62
|
+
| **Files created** | `issues-resolution-report.md`, `lessons-learned.md` | `[]` |
|
|
63
|
+
| **Files modified** | `issues-resolution-report.md`, `lessons-learned.md` | `[]` |
|
|
64
|
+
| **Test result** (`passed` / `failed` / `skipped`) | `issues-resolution-report.md` run status, `lessons-learned.md` outcome | `unknown` |
|
|
65
|
+
| **Notes** | Anything notable — workarounds, flaky selectors, environment quirks | `""` |
|
|
66
|
+
|
|
67
|
+
### Step 3: Update feature.md
|
|
68
|
+
|
|
69
|
+
Read the current feature file:
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
.documents-design/features/{PARENT_FEATURE}/{CHILD_FEATURE}/feature.md
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**If the file doesn't exist:** This is the first time the feature is being documented. Create the directory `.documents-design/features/{PARENT_FEATURE}/{CHILD_FEATURE}/` if it doesn't exist, then create `feature.md` using the structure from [templates/feature.template.md](templates/feature.template.md), filling in the user story and behaviors from the ticket data. Let the user know you created a new feature.md rather than updating an existing one.
|
|
76
|
+
|
|
77
|
+
**If the file exists:** Decide whether it needs changes. The key question is: *did this ticket reveal anything about the feature's behavior that the current document doesn't capture?*
|
|
78
|
+
|
|
79
|
+
Update when you see concrete signals:
|
|
80
|
+
- The ticket's BDD scenarios describe behaviors (Given/When/Then steps) not present in `feature.md`
|
|
81
|
+
- Implementation revealed additional validation rules, error states, or edge cases that belong in the spec
|
|
82
|
+
- Existing behavior descriptions are contradicted by what the ticket actually implemented (e.g., steps are in the wrong order, a condition was different from what was documented)
|
|
83
|
+
|
|
84
|
+
Leave `feature.md` unchanged when:
|
|
85
|
+
- The ticket purely automated existing behaviors that are already accurately described — adding automation coverage doesn't change the behavioral spec
|
|
86
|
+
- The changes are code-level (refactored a helper, renamed a variable) with no visible impact on what users can do
|
|
87
|
+
|
|
88
|
+
When updating, preserve the existing structure. Feature documents follow a User Story + Behavior Details pattern in BDD format. Add or modify only the sections affected by the ticket.
|
|
89
|
+
|
|
90
|
+
### Step 4: Update delta.yaml
|
|
91
|
+
|
|
92
|
+
Read the current delta file:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
.documents-design/features/{PARENT_FEATURE}/{CHILD_FEATURE}/delta.yaml
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### If the file is empty or doesn't exist
|
|
99
|
+
|
|
100
|
+
Create the directory `.documents-design/features/{PARENT_FEATURE}/{CHILD_FEATURE}/` if it doesn't already exist, then initialize the file with this structure:
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
feature: "{CHILD_FEATURE}"
|
|
104
|
+
parent: "{PARENT_FEATURE}"
|
|
105
|
+
status: in-progress
|
|
106
|
+
last_updated: "{TODAY_YYYY-MM-DD}"
|
|
107
|
+
tickets:
|
|
108
|
+
- id: "{TICKET_ID}"
|
|
109
|
+
completed_at: "{TODAY_YYYY-MM-DD}"
|
|
110
|
+
type: "{TYPE}"
|
|
111
|
+
summary: "{SUMMARY}"
|
|
112
|
+
test_result: "{TEST_RESULT}"
|
|
113
|
+
behaviors_covered:
|
|
114
|
+
- "{BEHAVIOR_ID}"
|
|
115
|
+
behaviors_affected: []
|
|
116
|
+
files_created:
|
|
117
|
+
- "{FILE_PATH}"
|
|
118
|
+
files_modified: []
|
|
119
|
+
notes: ""
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### If the file already has content
|
|
123
|
+
|
|
124
|
+
Append the new ticket entry to the `tickets` list. Never remove or reorder existing entries — this is an append-only log.
|
|
125
|
+
|
|
126
|
+
#### Status Calculation
|
|
127
|
+
|
|
128
|
+
The `status` field reflects how much of the feature's behavioral spec is covered by completed tickets. To calculate it, collect all `behaviors_covered` IDs across every ticket entry in delta.yaml, then compare against the behavior IDs defined in `feature.md`.
|
|
129
|
+
|
|
130
|
+
| Status | Meaning | When to use |
|
|
131
|
+
|--------|---------|-------------|
|
|
132
|
+
| `draft` | Spec exists, no work done | `feature.md` has behaviors but delta.yaml has zero tickets |
|
|
133
|
+
| `in-progress` | Partially built | Some behavior IDs from `feature.md` appear in ticket `behaviors_covered`, but not all |
|
|
134
|
+
| `complete` | Fully covered | Every behavior ID in `feature.md` has at least one ticket claiming coverage |
|
|
135
|
+
|
|
136
|
+
**Example:** If `feature.md` defines behaviors COM-1, COM-2, COM-3, and the tickets in delta.yaml collectively cover COM-1 and COM-2, the status is `in-progress`. Once a ticket claiming COM-3 is added, it becomes `complete`.
|
|
137
|
+
|
|
138
|
+
If `feature.md` doesn't use explicit behavior IDs (some features may not), compare at the scenario level — match ticket test scenarios against documented behaviors by name/description.
|
|
139
|
+
|
|
140
|
+
Always set `last_updated` to today's date.
|
|
141
|
+
|
|
142
|
+
### Step 5: Summary
|
|
143
|
+
|
|
144
|
+
Display the result:
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
Feature document updated for ticket {TICKET_ID}.
|
|
148
|
+
|
|
149
|
+
Feature: {PARENT_FEATURE}/{CHILD_FEATURE}
|
|
150
|
+
feature.md: {Created / Updated / No changes needed}
|
|
151
|
+
delta.yaml: Ticket {TICKET_ID} logged
|
|
152
|
+
|
|
153
|
+
Behaviors covered: {list}
|
|
154
|
+
Test result: {passed/failed/skipped/unknown}
|
|
155
|
+
Feature status: {draft/in-progress/complete}
|
|
156
|
+
```
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# delta.yaml Structure
|
|
2
|
+
|
|
3
|
+
Use this template to initialize or extend `delta.yaml` in a feature directory.
|
|
4
|
+
|
|
5
|
+
## Empty Feature (initialization)
|
|
6
|
+
|
|
7
|
+
```yaml
|
|
8
|
+
feature: "{CHILD_FEATURE}"
|
|
9
|
+
parent: "{PARENT_FEATURE}"
|
|
10
|
+
status: draft # draft | in-progress | complete
|
|
11
|
+
last_updated: "{YYYY-MM-DD}"
|
|
12
|
+
tickets: []
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## After Adding a Ticket
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
feature: "companies"
|
|
19
|
+
parent: "companies"
|
|
20
|
+
status: in-progress
|
|
21
|
+
last_updated: "2026-02-26"
|
|
22
|
+
tickets:
|
|
23
|
+
- id: "auto-2611"
|
|
24
|
+
completed_at: "2026-02-26"
|
|
25
|
+
type: automation # automation | feature | bugfix | refactor
|
|
26
|
+
summary: "Implemented search, filter, and sort for companies list"
|
|
27
|
+
test_result: passed # passed | failed | skipped
|
|
28
|
+
behaviors_covered:
|
|
29
|
+
- "COM-1"
|
|
30
|
+
- "COM-2"
|
|
31
|
+
behaviors_affected: []
|
|
32
|
+
files_created:
|
|
33
|
+
- "tests/companies/companies-search.spec.ts"
|
|
34
|
+
- "pages/companies/companies-list.page.ts"
|
|
35
|
+
files_modified:
|
|
36
|
+
- "data/companies/test-data.ts"
|
|
37
|
+
notes: "" # optional additional context
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Field Reference
|
|
41
|
+
|
|
42
|
+
| Field | Type | Description |
|
|
43
|
+
|-------|------|-------------|
|
|
44
|
+
| `feature` | string | Child feature name (directory name) |
|
|
45
|
+
| `parent` | string | Parent feature name (parent directory name) |
|
|
46
|
+
| `status` | enum | `draft` = no tickets done, `in-progress` = partial coverage, `complete` = all behaviors covered |
|
|
47
|
+
| `last_updated` | date | ISO date of last update |
|
|
48
|
+
| `tickets` | list | Chronological log of all completed tickets |
|
|
49
|
+
| `tickets[].id` | string | Ticket identifier |
|
|
50
|
+
| `tickets[].completed_at` | date | ISO date when ticket was completed |
|
|
51
|
+
| `tickets[].type` | enum | `automation` \| `feature` \| `bugfix` \| `refactor` |
|
|
52
|
+
| `tickets[].summary` | string | 1-2 sentence description of what was done |
|
|
53
|
+
| `tickets[].test_result` | enum | `passed` \| `failed` \| `skipped` |
|
|
54
|
+
| `tickets[].behaviors_covered` | list | Behavior IDs directly implemented |
|
|
55
|
+
| `tickets[].behaviors_affected` | list | Behavior IDs indirectly impacted |
|
|
56
|
+
| `tickets[].files_created` | list | Paths of new files created |
|
|
57
|
+
| `tickets[].files_modified` | list | Paths of modified files |
|
|
58
|
+
| `tickets[].notes` | string | Optional additional context |
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Feature: {CHILD_FEATURE}
|
|
2
|
+
|
|
3
|
+
> **Parent feature:** {PARENT_FEATURE}
|
|
4
|
+
|
|
5
|
+
## User Story
|
|
6
|
+
|
|
7
|
+
As a [role],
|
|
8
|
+
I want to [action],
|
|
9
|
+
so that [benefit].
|
|
10
|
+
|
|
11
|
+
## Behavior Details
|
|
12
|
+
|
|
13
|
+
### {BEHAVIOR_ID_1}: {Behavior Title}
|
|
14
|
+
|
|
15
|
+
**Given** [precondition]
|
|
16
|
+
**And** [additional precondition if needed]
|
|
17
|
+
**When** [action taken]
|
|
18
|
+
**Then** [expected outcome]
|
|
19
|
+
**And** [additional expected outcome if needed]
|
|
20
|
+
|
|
21
|
+
### {BEHAVIOR_ID_2}: {Behavior Title}
|
|
22
|
+
|
|
23
|
+
**Given** [precondition]
|
|
24
|
+
**When** [action taken]
|
|
25
|
+
**Then** [expected outcome]
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-auto-assisted-fix-and-run
|
|
3
|
+
description: Apply a user-provided hint to a failing test and run it once. Receives the failure summary and user hint from the master agent, applies the guidance, and runs the test. Appends the result to the existing issues-resolution-report.md and emits a structured ASSISTED-RUN RESULT block. The master agent decides how many times to invoke this skill and tracks attempt counts. Use when the autonomous fix attempt has been exhausted and user expertise is needed. Triggers when invoked by the master agent after a FIX-AND-RUN RESULT: FAILED or ASSISTED-RUN RESULT: FAILED block. Also use when someone says "apply the user's hint to the failing test", "user-assisted fix for ticket X", "run the test with this hint", "try the user's suggestion for the failing test", or any variation of applying external guidance to a test failure — even if they don't explicitly say "assisted fix and run".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Web Automation User-Assisted Fix
|
|
7
|
+
|
|
8
|
+
Apply a user-provided hint to a failing test, run it once, and return a structured result. The master agent handles user interaction, attempt counting, retry logic, and pipeline routing — this skill focuses entirely on applying the hint, running the test, and reporting the outcome.
|
|
9
|
+
|
|
10
|
+
## Why This Skill Exists
|
|
11
|
+
|
|
12
|
+
When `web-auto-fix-and-run-test` runs and the test fails, the autonomous pipeline has exhausted its ability to self-correct. The runtime error often involves something the model can't resolve alone — a selector that changed in the live app, an API contract mismatch, a test environment quirk, or a timing issue only a human recognizes. The user provides a hint rooted in their knowledge of the application, and this skill bridges that human insight into the codebase. Getting this right saves the user from having to make the code change themselves.
|
|
13
|
+
|
|
14
|
+
## Input Parameters
|
|
15
|
+
|
|
16
|
+
| Parameter | Type | Required | Description |
|
|
17
|
+
|-----------|------|----------|-------------|
|
|
18
|
+
| `TICKET_ID` | string | Yes | The ticket identifier (e.g., TKT-001, ABC-123) |
|
|
19
|
+
| `FAILURE_SUMMARY` | block | Yes | The structured `FIX-AND-RUN RESULT: FAILED` or `ASSISTED-RUN RESULT: FAILED` block from the previous attempt |
|
|
20
|
+
| `USER_HINT` | string | Yes | The hint or fix guidance provided by the user, collected by the master agent before invoking |
|
|
21
|
+
|
|
22
|
+
**If `TICKET_ID` is not provided:** Ask the user for it before proceeding.
|
|
23
|
+
**If `FAILURE_SUMMARY` is missing:** Read `.tickets/{TICKET_ID}/issues-resolution-report.md` to reconstruct the last known error.
|
|
24
|
+
**If `USER_HINT` is missing:** Stop and report the missing input to the master agent. The master agent is responsible for collecting the hint from the user before invoking this skill — prompting the user directly would break the pipeline's communication flow.
|
|
25
|
+
|
|
26
|
+
## Workflow
|
|
27
|
+
|
|
28
|
+
### Step 1: Build Full Context
|
|
29
|
+
|
|
30
|
+
Before touching any code, build a complete picture of what happened, what was already tried, and what the user is suggesting. Skipping this leads to repeating failed fixes or misinterpreting the hint.
|
|
31
|
+
|
|
32
|
+
**1.1 — Parse the failure summary**
|
|
33
|
+
|
|
34
|
+
Extract from the `FAILURE_SUMMARY` block:
|
|
35
|
+
- **Error Type** — determines which resolution reference to consult
|
|
36
|
+
- **Location** (file:line) — where to focus the fix
|
|
37
|
+
- **Message** — the exact error text
|
|
38
|
+
- **Issues Fixed Before Run** — what was already changed
|
|
39
|
+
- **Likely Cause** (if present) — the previous agent's diagnosis
|
|
40
|
+
|
|
41
|
+
**1.2 — Read the fix history**
|
|
42
|
+
|
|
43
|
+
Read `.tickets/{TICKET_ID}/issues-resolution-report.md` and look for:
|
|
44
|
+
- **What fixes were already applied** — avoid re-applying the same change or a variation that already failed
|
|
45
|
+
- **The progression of errors** — did the error type change between attempts? A changing error type means the previous fix had partial effect; a repeating error means the fix didn't address the root cause
|
|
46
|
+
- **Patterns across attempts** — if multiple attempts targeted the same area, the root cause might be elsewhere
|
|
47
|
+
|
|
48
|
+
**1.3 — Read implementation context**
|
|
49
|
+
|
|
50
|
+
- Read `.tickets/{TICKET_ID}/ticket-playbook.md` to understand what the code implements, its dependencies, and the expected behavior
|
|
51
|
+
- Read `.tickets/{TICKET_ID}/issues.md` to get the **run command** from the "Notes for Fix-and-Run" section
|
|
52
|
+
|
|
53
|
+
### Step 2: Interpret the User Hint
|
|
54
|
+
|
|
55
|
+
The user hint is the most valuable input in this skill. Invest time understanding it before writing any code. Users express hints in different ways:
|
|
56
|
+
|
|
57
|
+
| Hint Pattern | What They Mean | How to Act |
|
|
58
|
+
|-------------|----------------|------------|
|
|
59
|
+
| Specific code change ("change the selector to `#submit-btn`") | Direct instruction — apply it literally | Apply the exact change, then verify it's syntactically valid |
|
|
60
|
+
| Diagnosis without a fix ("the login modal takes 3 seconds to load") | They know the root cause but need you to translate it into code | Use the diagnosis to locate the right part of the code and apply an appropriate fix (e.g., add a wait, increase timeout) |
|
|
61
|
+
| Context that wasn't available ("the API endpoint changed to `/v2/users`") | New information the autonomous run didn't have | Update the relevant code with the new value and check for other references to the old value |
|
|
62
|
+
| Broad direction ("try a different selector approach") | They want you to choose a different strategy | Consult `references/resolve-selector.md` or `references/resolve-api-error.md` and try the next path in the cascade |
|
|
63
|
+
| Combination ("the button text changed to 'Sign In' and the form needs 2s to load") | Multiple changes needed | Apply all changes together before running, since each alone might not be sufficient |
|
|
64
|
+
|
|
65
|
+
If the hint conflicts with what the failure summary suggests, trust the user — they have context you don't (access to the running application, knowledge of recent changes, understanding of business logic).
|
|
66
|
+
|
|
67
|
+
### Step 3: Apply the Fix
|
|
68
|
+
|
|
69
|
+
**3.1 — Make the code change**
|
|
70
|
+
|
|
71
|
+
- For selector errors (`LocatorError`, element `TimeoutError`): follow `references/resolve-selector.md`. Guessing selectors leads to cascading failures — one wrong selector triggers a different error, which triggers another guess, and the test drifts further from working
|
|
72
|
+
- For API errors (wrong endpoint, wrong payload, 4xx/5xx HTTP status): follow `references/resolve-api-error.md`. API contracts are exact — a single wrong field name or path segment causes a failure that looks identical to many other issues
|
|
73
|
+
- For all other errors: apply the hint directly, using the failure location and message as your guide
|
|
74
|
+
|
|
75
|
+
**3.2 — Verify before running**
|
|
76
|
+
|
|
77
|
+
- Check for syntax errors in the modified file(s)
|
|
78
|
+
- If the fix touches an import, export, or method signature, verify that callers and importers are still compatible
|
|
79
|
+
- If a fix introduces a new syntax or lint error, revert it and try an alternative interpretation of the hint rather than stacking fixes on top of a broken change
|
|
80
|
+
|
|
81
|
+
### Step 4: Run the Test
|
|
82
|
+
|
|
83
|
+
- Run the test **exactly once** — do not retry on failure. The master agent owns the retry decision.
|
|
84
|
+
- Use the run command from the "Notes for Fix-and-Run" section of `issues.md`
|
|
85
|
+
- Capture full output (stdout and stderr)
|
|
86
|
+
- **Success** → proceed to Step 5
|
|
87
|
+
- **Failure** → proceed to Step 6
|
|
88
|
+
|
|
89
|
+
### Step 5: Success — Append to Resolution Report
|
|
90
|
+
|
|
91
|
+
Append the **User-Assisted Success section** to the existing `.tickets/{TICKET_ID}/issues-resolution-report.md` using the template from [templates/issues-resolution-report-append.template.md](templates/issues-resolution-report-append.template.md).
|
|
92
|
+
|
|
93
|
+
Emit the result block for the master agent:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
ASSISTED-RUN RESULT: PASSED
|
|
97
|
+
Ticket: {TICKET_ID}
|
|
98
|
+
Report updated: .tickets/{TICKET_ID}/issues-resolution-report.md
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Step 6: Failure — Append to Resolution Report
|
|
102
|
+
|
|
103
|
+
Append the **User-Assisted Failure section** to the existing `.tickets/{TICKET_ID}/issues-resolution-report.md` using the template from [templates/issues-resolution-report-append.template.md](templates/issues-resolution-report-append.template.md).
|
|
104
|
+
|
|
105
|
+
Emit the result block for the master agent:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
ASSISTED-RUN RESULT: FAILED
|
|
109
|
+
Ticket: {TICKET_ID}
|
|
110
|
+
Error Type: {error type}
|
|
111
|
+
Location: {file:line}
|
|
112
|
+
Message: {error message}
|
|
113
|
+
Report updated: .tickets/{TICKET_ID}/issues-resolution-report.md
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Guidelines
|
|
117
|
+
|
|
118
|
+
These aren't arbitrary rules — each exists because of how this skill fits into the pipeline.
|
|
119
|
+
|
|
120
|
+
- **One attempt per invocation.** The master agent orchestrates the retry loop and decides how many times to invoke this skill. Running multiple attempts here would bypass the master agent's control over the retry flow.
|
|
121
|
+
|
|
122
|
+
- **Don't prompt the user directly.** The master agent presents errors and collects hints from the user in a structured way. If this skill also started asking questions, the user would get duplicate prompts from different agents, which is confusing and breaks the pipeline's communication model.
|
|
123
|
+
|
|
124
|
+
- **Append to the resolution report, never overwrite it.** The report is a running log of everything that's been tried. Overwriting it loses the history that the next attempt (or the user) needs to understand what already failed and why.
|
|
125
|
+
|
|
126
|
+
- **Emit the `ASSISTED-RUN RESULT:` block on every outcome.** The master agent parses this block to decide what happens next — PASSED routes to push-code, FAILED routes to the next user-assisted attempt or pipeline stop. Without it, the pipeline stalls waiting for a signal that never comes.
|
|
127
|
+
|
|
128
|
+
- **Don't modify `issues.md`.** It's the original review output from `web-auto-self-reviewer` and serves as the source of truth for what was initially wrong. Fixes go into the implementation files; the resolution report tracks what changes were made.
|
|
129
|
+
|
|
130
|
+
- **Use the run command from `issues.md`.** The "Notes for Fix-and-Run" section contains the exact command that `web-auto-fix-and-run-test` used. Using a different command could produce different results for reasons unrelated to the fix, making it impossible to tell if the hint actually worked.
|