@brunosps00/dev-workflow 0.0.3 → 0.0.6

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.
Files changed (221) hide show
  1. package/README.md +42 -42
  2. package/bin/dev-workflow.js +6 -4
  3. package/lib/constants.js +42 -40
  4. package/lib/init.js +66 -19
  5. package/package.json +1 -1
  6. package/scaffold/en/commands/{analyze-project.md → dw-analyze-project.md} +69 -40
  7. package/scaffold/en/commands/{brainstorm.md → dw-brainstorm.md} +31 -4
  8. package/scaffold/en/commands/{bugfix.md → dw-bugfix.md} +63 -19
  9. package/scaffold/en/commands/{code-review.md → dw-code-review.md} +38 -15
  10. package/scaffold/en/commands/{commit.md → dw-commit.md} +25 -0
  11. package/scaffold/en/commands/{create-prd.md → dw-create-prd.md} +24 -10
  12. package/scaffold/en/commands/{create-tasks.md → dw-create-tasks.md} +11 -4
  13. package/scaffold/en/commands/{create-techspec.md → dw-create-techspec.md} +38 -11
  14. package/scaffold/en/commands/{deep-research.md → dw-deep-research.md} +18 -17
  15. package/scaffold/en/commands/{fix-qa.md → dw-fix-qa.md} +20 -3
  16. package/scaffold/en/commands/dw-functional-doc.md +276 -0
  17. package/scaffold/en/commands/{generate-pr.md → dw-generate-pr.md} +20 -5
  18. package/scaffold/en/commands/dw-help.md +309 -0
  19. package/scaffold/en/commands/{refactoring-analysis.md → dw-refactoring-analysis.md} +50 -26
  20. package/scaffold/en/commands/{review-implementation.md → dw-review-implementation.md} +25 -6
  21. package/scaffold/en/commands/{run-plan.md → dw-run-plan.md} +21 -6
  22. package/scaffold/en/commands/{run-qa.md → dw-run-qa.md} +32 -13
  23. package/scaffold/en/commands/{run-task.md → dw-run-task.md} +17 -7
  24. package/scaffold/en/references/playwright-patterns.md +136 -0
  25. package/scaffold/en/references/refactoring-catalog.md +167 -0
  26. package/scaffold/en/templates/brainstorm-matrix.md +44 -0
  27. package/scaffold/en/templates/functional-doc/case-matrix.md +5 -0
  28. package/scaffold/en/templates/functional-doc/e2e-runbook.md +3 -0
  29. package/scaffold/en/templates/functional-doc/features.md +3 -0
  30. package/scaffold/en/templates/functional-doc/overview.md +21 -0
  31. package/scaffold/en/templates/functional-doc/playwright.spec.ts.tpl +19 -0
  32. package/scaffold/en/templates/pr-bugfix-template.md +28 -0
  33. package/scaffold/en/templates/qa-test-credentials.md +37 -0
  34. package/scaffold/en/templates/tasks-template.md +1 -1
  35. package/scaffold/en/templates/techspec-template.md +1 -1
  36. package/scaffold/pt-br/commands/{analyze-project.md → dw-analyze-project.md} +94 -44
  37. package/scaffold/pt-br/commands/{brainstorm.md → dw-brainstorm.md} +32 -5
  38. package/scaffold/pt-br/commands/{bugfix.md → dw-bugfix.md} +73 -16
  39. package/scaffold/pt-br/commands/{code-review.md → dw-code-review.md} +80 -17
  40. package/scaffold/pt-br/commands/{commit.md → dw-commit.md} +45 -1
  41. package/scaffold/pt-br/commands/{create-prd.md → dw-create-prd.md} +25 -10
  42. package/scaffold/pt-br/commands/{create-tasks.md → dw-create-tasks.md} +24 -17
  43. package/scaffold/pt-br/commands/{create-techspec.md → dw-create-techspec.md} +40 -13
  44. package/scaffold/pt-br/commands/{deep-research.md → dw-deep-research.md} +19 -11
  45. package/scaffold/pt-br/commands/{fix-qa.md → dw-fix-qa.md} +30 -1
  46. package/scaffold/pt-br/commands/dw-functional-doc.md +276 -0
  47. package/scaffold/pt-br/commands/{generate-pr.md → dw-generate-pr.md} +61 -6
  48. package/scaffold/pt-br/commands/dw-help.md +248 -0
  49. package/scaffold/pt-br/commands/{refactoring-analysis.md → dw-refactoring-analysis.md} +49 -25
  50. package/scaffold/pt-br/commands/{review-implementation.md → dw-review-implementation.md} +53 -5
  51. package/scaffold/pt-br/commands/{run-plan.md → dw-run-plan.md} +100 -12
  52. package/scaffold/pt-br/commands/{run-qa.md → dw-run-qa.md} +93 -18
  53. package/scaffold/pt-br/commands/{run-task.md → dw-run-task.md} +35 -10
  54. package/scaffold/pt-br/references/playwright-patterns.md +133 -0
  55. package/scaffold/pt-br/references/refactoring-catalog.md +166 -0
  56. package/scaffold/pt-br/templates/brainstorm-matrix.md +44 -0
  57. package/scaffold/pt-br/templates/functional-doc/case-matrix.md +5 -0
  58. package/scaffold/pt-br/templates/functional-doc/e2e-runbook.md +3 -0
  59. package/scaffold/pt-br/templates/functional-doc/features.md +3 -0
  60. package/scaffold/pt-br/templates/functional-doc/overview.md +21 -0
  61. package/scaffold/pt-br/templates/functional-doc/playwright.spec.ts.tpl +19 -0
  62. package/scaffold/pt-br/templates/pr-bugfix-template.md +28 -0
  63. package/scaffold/pt-br/templates/qa-test-credentials.md +37 -0
  64. package/scaffold/pt-br/templates/tasks-template.md +2 -2
  65. package/scaffold/pt-br/templates/techspec-template.md +1 -1
  66. package/scaffold/rules-readme.md +3 -3
  67. package/scaffold/scripts/functional-doc/generate-dossier.mjs +821 -0
  68. package/scaffold/scripts/functional-doc/run-playwright-flow.mjs +275 -0
  69. package/scaffold/skills/agent-browser/SKILL.md +750 -0
  70. package/scaffold/skills/agent-browser/references/authentication.md +303 -0
  71. package/scaffold/skills/agent-browser/references/commands.md +295 -0
  72. package/scaffold/skills/agent-browser/references/profiling.md +120 -0
  73. package/scaffold/skills/agent-browser/references/proxy-support.md +194 -0
  74. package/scaffold/skills/agent-browser/references/session-management.md +193 -0
  75. package/scaffold/skills/agent-browser/references/snapshot-refs.md +219 -0
  76. package/scaffold/skills/agent-browser/references/video-recording.md +173 -0
  77. package/scaffold/skills/agent-browser/templates/authenticated-session.sh +105 -0
  78. package/scaffold/skills/agent-browser/templates/capture-workflow.sh +69 -0
  79. package/scaffold/skills/agent-browser/templates/form-automation.sh +62 -0
  80. package/scaffold/skills/humanizer/README.md +143 -0
  81. package/scaffold/skills/humanizer/SKILL.md +488 -0
  82. package/scaffold/skills/humanizer/WARP.md +53 -0
  83. package/scaffold/skills/remotion-best-practices/SKILL.md +61 -0
  84. package/scaffold/skills/remotion-best-practices/rules/3d.md +86 -0
  85. package/scaffold/skills/remotion-best-practices/rules/animations.md +27 -0
  86. package/scaffold/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
  87. package/scaffold/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
  88. package/scaffold/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
  89. package/scaffold/skills/remotion-best-practices/rules/assets.md +78 -0
  90. package/scaffold/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
  91. package/scaffold/skills/remotion-best-practices/rules/audio.md +169 -0
  92. package/scaffold/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
  93. package/scaffold/skills/remotion-best-practices/rules/can-decode.md +75 -0
  94. package/scaffold/skills/remotion-best-practices/rules/charts.md +120 -0
  95. package/scaffold/skills/remotion-best-practices/rules/compositions.md +154 -0
  96. package/scaffold/skills/remotion-best-practices/rules/display-captions.md +184 -0
  97. package/scaffold/skills/remotion-best-practices/rules/extract-frames.md +229 -0
  98. package/scaffold/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
  99. package/scaffold/skills/remotion-best-practices/rules/fonts.md +152 -0
  100. package/scaffold/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
  101. package/scaffold/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
  102. package/scaffold/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
  103. package/scaffold/skills/remotion-best-practices/rules/gifs.md +141 -0
  104. package/scaffold/skills/remotion-best-practices/rules/images.md +134 -0
  105. package/scaffold/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
  106. package/scaffold/skills/remotion-best-practices/rules/light-leaks.md +73 -0
  107. package/scaffold/skills/remotion-best-practices/rules/lottie.md +70 -0
  108. package/scaffold/skills/remotion-best-practices/rules/maps.md +412 -0
  109. package/scaffold/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
  110. package/scaffold/skills/remotion-best-practices/rules/measuring-text.md +140 -0
  111. package/scaffold/skills/remotion-best-practices/rules/parameters.md +109 -0
  112. package/scaffold/skills/remotion-best-practices/rules/sequencing.md +118 -0
  113. package/scaffold/skills/remotion-best-practices/rules/sfx.md +26 -0
  114. package/scaffold/skills/remotion-best-practices/rules/subtitles.md +36 -0
  115. package/scaffold/skills/remotion-best-practices/rules/tailwind.md +11 -0
  116. package/scaffold/skills/remotion-best-practices/rules/text-animations.md +20 -0
  117. package/scaffold/skills/remotion-best-practices/rules/timing.md +179 -0
  118. package/scaffold/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
  119. package/scaffold/skills/remotion-best-practices/rules/transitions.md +197 -0
  120. package/scaffold/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
  121. package/scaffold/skills/remotion-best-practices/rules/trimming.md +51 -0
  122. package/scaffold/skills/remotion-best-practices/rules/videos.md +171 -0
  123. package/scaffold/skills/remotion-best-practices/rules/voiceover.md +99 -0
  124. package/scaffold/skills/security-review/LICENSE +22 -0
  125. package/scaffold/skills/security-review/SKILL.md +312 -0
  126. package/scaffold/skills/security-review/infrastructure/docker.md +432 -0
  127. package/scaffold/skills/security-review/languages/javascript.md +388 -0
  128. package/scaffold/skills/security-review/languages/python.md +363 -0
  129. package/scaffold/skills/security-review/references/api-security.md +519 -0
  130. package/scaffold/skills/security-review/references/authentication.md +353 -0
  131. package/scaffold/skills/security-review/references/authorization.md +372 -0
  132. package/scaffold/skills/security-review/references/business-logic.md +443 -0
  133. package/scaffold/skills/security-review/references/cryptography.md +329 -0
  134. package/scaffold/skills/security-review/references/csrf.md +398 -0
  135. package/scaffold/skills/security-review/references/data-protection.md +378 -0
  136. package/scaffold/skills/security-review/references/deserialization.md +410 -0
  137. package/scaffold/skills/security-review/references/error-handling.md +436 -0
  138. package/scaffold/skills/security-review/references/file-security.md +457 -0
  139. package/scaffold/skills/security-review/references/injection.md +259 -0
  140. package/scaffold/skills/security-review/references/logging.md +433 -0
  141. package/scaffold/skills/security-review/references/misconfiguration.md +435 -0
  142. package/scaffold/skills/security-review/references/modern-threats.md +475 -0
  143. package/scaffold/skills/security-review/references/ssrf.md +415 -0
  144. package/scaffold/skills/security-review/references/supply-chain.md +405 -0
  145. package/scaffold/skills/security-review/references/xss.md +336 -0
  146. package/scaffold/skills/vercel-react-best-practices/AGENTS.md +3648 -0
  147. package/scaffold/skills/vercel-react-best-practices/README.md +123 -0
  148. package/scaffold/skills/vercel-react-best-practices/SKILL.md +146 -0
  149. package/scaffold/skills/vercel-react-best-practices/rules/_sections.md +46 -0
  150. package/scaffold/skills/vercel-react-best-practices/rules/_template.md +28 -0
  151. package/scaffold/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  152. package/scaffold/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  153. package/scaffold/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  154. package/scaffold/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  155. package/scaffold/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  156. package/scaffold/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  157. package/scaffold/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  158. package/scaffold/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
  159. package/scaffold/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  160. package/scaffold/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  161. package/scaffold/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  162. package/scaffold/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  163. package/scaffold/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  164. package/scaffold/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  165. package/scaffold/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  166. package/scaffold/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  167. package/scaffold/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  168. package/scaffold/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  169. package/scaffold/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  170. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  171. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  172. package/scaffold/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  173. package/scaffold/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  174. package/scaffold/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  175. package/scaffold/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  176. package/scaffold/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  177. package/scaffold/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  178. package/scaffold/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  179. package/scaffold/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  180. package/scaffold/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  181. package/scaffold/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  182. package/scaffold/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  183. package/scaffold/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  184. package/scaffold/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  185. package/scaffold/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  186. package/scaffold/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  187. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  188. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  189. package/scaffold/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  190. package/scaffold/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  191. package/scaffold/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  192. package/scaffold/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  193. package/scaffold/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  194. package/scaffold/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  195. package/scaffold/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  196. package/scaffold/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  197. package/scaffold/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  198. package/scaffold/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  199. package/scaffold/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  200. package/scaffold/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  201. package/scaffold/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  202. package/scaffold/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  203. package/scaffold/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  204. package/scaffold/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  205. package/scaffold/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  206. package/scaffold/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  207. package/scaffold/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  208. package/scaffold/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  209. package/scaffold/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  210. package/scaffold/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  211. package/scaffold/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  212. package/scaffold/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  213. package/scaffold/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  214. package/scaffold/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  215. package/scaffold/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  216. package/scaffold/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  217. package/scaffold/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
  218. package/scaffold/skills/webapp-testing/SKILL.md +133 -0
  219. package/scaffold/skills/webapp-testing/assets/test-helper.js +56 -0
  220. package/scaffold/en/commands/help.md +0 -289
  221. package/scaffold/pt-br/commands/help.md +0 -226
@@ -0,0 +1,83 @@
1
+ ---
2
+ title: Parallel Data Fetching with Component Composition
3
+ impact: CRITICAL
4
+ impactDescription: eliminates server-side waterfalls
5
+ tags: server, rsc, parallel-fetching, composition
6
+ ---
7
+
8
+ ## Parallel Data Fetching with Component Composition
9
+
10
+ React Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.
11
+
12
+ **Incorrect (Sidebar waits for Page's fetch to complete):**
13
+
14
+ ```tsx
15
+ export default async function Page() {
16
+ const header = await fetchHeader()
17
+ return (
18
+ <div>
19
+ <div>{header}</div>
20
+ <Sidebar />
21
+ </div>
22
+ )
23
+ }
24
+
25
+ async function Sidebar() {
26
+ const items = await fetchSidebarItems()
27
+ return <nav>{items.map(renderItem)}</nav>
28
+ }
29
+ ```
30
+
31
+ **Correct (both fetch simultaneously):**
32
+
33
+ ```tsx
34
+ async function Header() {
35
+ const data = await fetchHeader()
36
+ return <div>{data}</div>
37
+ }
38
+
39
+ async function Sidebar() {
40
+ const items = await fetchSidebarItems()
41
+ return <nav>{items.map(renderItem)}</nav>
42
+ }
43
+
44
+ export default function Page() {
45
+ return (
46
+ <div>
47
+ <Header />
48
+ <Sidebar />
49
+ </div>
50
+ )
51
+ }
52
+ ```
53
+
54
+ **Alternative with children prop:**
55
+
56
+ ```tsx
57
+ async function Header() {
58
+ const data = await fetchHeader()
59
+ return <div>{data}</div>
60
+ }
61
+
62
+ async function Sidebar() {
63
+ const items = await fetchSidebarItems()
64
+ return <nav>{items.map(renderItem)}</nav>
65
+ }
66
+
67
+ function Layout({ children }: { children: ReactNode }) {
68
+ return (
69
+ <div>
70
+ <Header />
71
+ {children}
72
+ </div>
73
+ )
74
+ }
75
+
76
+ export default function Page() {
77
+ return (
78
+ <Layout>
79
+ <Sidebar />
80
+ </Layout>
81
+ )
82
+ }
83
+ ```
@@ -0,0 +1,34 @@
1
+ ---
2
+ title: Parallel Nested Data Fetching
3
+ impact: CRITICAL
4
+ impactDescription: eliminates server-side waterfalls
5
+ tags: server, rsc, parallel-fetching, promise-chaining
6
+ ---
7
+
8
+ ## Parallel Nested Data Fetching
9
+
10
+ When fetching nested data in parallel, chain dependent fetches within each item's promise so a slow item doesn't block the rest.
11
+
12
+ **Incorrect (a single slow item blocks all nested fetches):**
13
+
14
+ ```tsx
15
+ const chats = await Promise.all(
16
+ chatIds.map(id => getChat(id))
17
+ )
18
+
19
+ const chatAuthors = await Promise.all(
20
+ chats.map(chat => getUser(chat.author))
21
+ )
22
+ ```
23
+
24
+ If one `getChat(id)` out of 100 is extremely slow, the authors of the other 99 chats can't start loading even though their data is ready.
25
+
26
+ **Correct (each item chains its own nested fetch):**
27
+
28
+ ```tsx
29
+ const chatAuthors = await Promise.all(
30
+ chatIds.map(id => getChat(id).then(chat => getUser(chat.author)))
31
+ )
32
+ ```
33
+
34
+ Each item independently chains `getChat` → `getUser`, so a slow chat doesn't block author fetches for the others.
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: Minimize Serialization at RSC Boundaries
3
+ impact: HIGH
4
+ impactDescription: reduces data transfer size
5
+ tags: server, rsc, serialization, props
6
+ ---
7
+
8
+ ## Minimize Serialization at RSC Boundaries
9
+
10
+ The React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.
11
+
12
+ **Incorrect (serializes all 50 fields):**
13
+
14
+ ```tsx
15
+ async function Page() {
16
+ const user = await fetchUser() // 50 fields
17
+ return <Profile user={user} />
18
+ }
19
+
20
+ 'use client'
21
+ function Profile({ user }: { user: User }) {
22
+ return <div>{user.name}</div> // uses 1 field
23
+ }
24
+ ```
25
+
26
+ **Correct (serializes only 1 field):**
27
+
28
+ ```tsx
29
+ async function Page() {
30
+ const user = await fetchUser()
31
+ return <Profile name={user.name} />
32
+ }
33
+
34
+ 'use client'
35
+ function Profile({ name }: { name: string }) {
36
+ return <div>{name}</div>
37
+ }
38
+ ```
@@ -0,0 +1,133 @@
1
+ ---
2
+ name: webapp-testing
3
+ description: Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
4
+ ---
5
+
6
+ # Web Application Testing
7
+
8
+ This skill enables comprehensive testing and debugging of local web applications using Playwright automation.
9
+
10
+ You should use the Playwright MCP Server to undertake the work if possible. If the MCP Server is unavailable, you can run the code in a local Node.js environment with Playwright installed.
11
+
12
+ ## When to Use This Skill
13
+
14
+ Use this skill when you need to:
15
+
16
+ - Test frontend functionality in a real browser
17
+ - Verify UI behavior and interactions
18
+ - Debug web application issues
19
+ - Capture screenshots for documentation or debugging
20
+ - Inspect browser console logs
21
+ - Validate form submissions and user flows
22
+ - Check responsive design across viewports
23
+
24
+ ## Prerequisites
25
+
26
+ - Node.js installed on the system
27
+ - A locally running web application (or accessible URL)
28
+ - Playwright will be installed automatically if not present
29
+
30
+ ## Core Capabilities
31
+
32
+ ### 1. Browser Automation
33
+
34
+ - Navigate to URLs
35
+ - Click buttons and links
36
+ - Fill form fields
37
+ - Select dropdowns
38
+ - Handle dialogs and alerts
39
+
40
+ ### 2. Verification
41
+
42
+ - Assert element presence
43
+ - Verify text content
44
+ - Check element visibility
45
+ - Validate URLs
46
+ - Test responsive behavior
47
+
48
+ ### 3. Debugging
49
+
50
+ - Capture screenshots
51
+ - View console logs
52
+ - Inspect network requests
53
+ - Debug failed tests
54
+
55
+ ## Usage Examples
56
+
57
+ ### Example 1: Basic Navigation Test
58
+
59
+ ```javascript
60
+ // Navigate to a page and verify title
61
+ await page.goto("http://localhost:3000");
62
+ const title = await page.title();
63
+ console.log("Page title:", title);
64
+ ```
65
+
66
+ ### Example 2: Form Interaction
67
+
68
+ ```javascript
69
+ // Fill out and submit a form
70
+ await page.fill("#username", "testuser");
71
+ await page.fill("#password", "password123");
72
+ await page.click('button[type="submit"]');
73
+ await page.waitForURL("**/dashboard");
74
+ ```
75
+
76
+ ### Example 3: Screenshot Capture
77
+
78
+ ```javascript
79
+ // Capture a screenshot for debugging
80
+ await page.screenshot({ path: "debug.png", fullPage: true });
81
+ ```
82
+
83
+ ## Guidelines
84
+
85
+ 1. **Always verify the app is running** - Check that the local server is accessible before running tests
86
+ 2. **Use explicit waits** - Wait for elements or navigation to complete before interacting
87
+ 3. **Capture screenshots on failure** - Take screenshots to help debug issues
88
+ 4. **Clean up resources** - Always close the browser when done
89
+ 5. **Handle timeouts gracefully** - Set reasonable timeouts for slow operations
90
+ 6. **Test incrementally** - Start with simple interactions before complex flows
91
+ 7. **Use selectors wisely** - Prefer data-testid or role-based selectors over CSS classes
92
+
93
+ ## Common Patterns
94
+
95
+ ### Pattern: Wait for Element
96
+
97
+ ```javascript
98
+ await page.waitForSelector("#element-id", { state: "visible" });
99
+ ```
100
+
101
+ ### Pattern: Check if Element Exists
102
+
103
+ ```javascript
104
+ const exists = (await page.locator("#element-id").count()) > 0;
105
+ ```
106
+
107
+ ### Pattern: Get Console Logs
108
+
109
+ ```javascript
110
+ page.on("console", (msg) => console.log("Browser log:", msg.text()));
111
+ ```
112
+
113
+ ### Pattern: Handle Errors
114
+
115
+ ```javascript
116
+ try {
117
+ await page.click("#button");
118
+ } catch (error) {
119
+ await page.screenshot({ path: "error.png" });
120
+ throw error;
121
+ }
122
+ ```
123
+
124
+ ## Limitations
125
+
126
+ - Requires Node.js environment
127
+ - Cannot test native mobile apps (use React Native Testing Library instead)
128
+ - May have issues with complex authentication flows
129
+ - Some modern frameworks may require specific configuration
130
+
131
+ ## Helper Functions
132
+
133
+ Some helper functions are available in [`test-helper.js`](./assets/test-helper.js) to simplify common tasks like waiting for elements, capturing screenshots, and handling errors. You can import and use these functions in your tests to improve readability and maintainability.
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Helper utilities for web application testing with Playwright
3
+ */
4
+
5
+ /**
6
+ * Wait for a condition to be true with timeout
7
+ * @param {Function} condition - Function that returns boolean
8
+ * @param {number} timeout - Timeout in milliseconds
9
+ * @param {number} interval - Check interval in milliseconds
10
+ */
11
+ async function waitForCondition(condition, timeout = 5000, interval = 100) {
12
+ const startTime = Date.now();
13
+ while (Date.now() - startTime < timeout) {
14
+ if (await condition()) {
15
+ return true;
16
+ }
17
+ await new Promise(resolve => setTimeout(resolve, interval));
18
+ }
19
+ throw new Error('Condition not met within timeout');
20
+ }
21
+
22
+ /**
23
+ * Capture browser console logs
24
+ * @param {Page} page - Playwright page object
25
+ * @returns {Array} Array of console messages
26
+ */
27
+ function captureConsoleLogs(page) {
28
+ const logs = [];
29
+ page.on('console', msg => {
30
+ logs.push({
31
+ type: msg.type(),
32
+ text: msg.text(),
33
+ timestamp: new Date().toISOString()
34
+ });
35
+ });
36
+ return logs;
37
+ }
38
+
39
+ /**
40
+ * Take screenshot with automatic naming
41
+ * @param {Page} page - Playwright page object
42
+ * @param {string} name - Base name for screenshot
43
+ */
44
+ async function captureScreenshot(page, name) {
45
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
46
+ const filename = `${name}-${timestamp}.png`;
47
+ await page.screenshot({ path: filename, fullPage: true });
48
+ console.log(`Screenshot saved: ${filename}`);
49
+ return filename;
50
+ }
51
+
52
+ module.exports = {
53
+ waitForCondition,
54
+ captureConsoleLogs,
55
+ captureScreenshot
56
+ };
@@ -1,289 +0,0 @@
1
- <system_instructions>
2
- You are a workspace help assistant. When invoked, present the user with a complete guide of available commands, their integration flows, and when to use each one.
3
-
4
- ## Behavior
5
-
6
- - If invoked without arguments (`/help`): show the complete guide below
7
- - If invoked with an argument (`/help create-prd`): show only the detailed section for that command
8
-
9
- ---
10
-
11
- # Command Guide - AI Dev Workflow
12
-
13
- ## Overview
14
-
15
- This workspace uses an AI command system that automates the full development cycle: from planning (PRD) to merge (PR). Commands are in `ai/commands/` and are accessible in supported AI CLIs (e.g., Codex, Claude Code, OpenCode, GitHub Copilot), using the CLI prefix (`/command` or `$command`).
16
-
17
- ## Main Development Flow
18
-
19
- ```
20
- ┌──────────────┐ ┌─────────────────┐ ┌───────────────┐
21
- │ /create-prd │────>│/create-techspec │────>│ /create-tasks │
22
- │ (WHAT) │ │ (HOW) │ │ (WHEN) │
23
- └──────────────┘ └─────────────────┘ └───────┬───────┘
24
-
25
- ┌─────────────┴─────────────┐
26
- ▼ ▼
27
- ┌────────────────┐ ┌─────────────────┐
28
- │ /run-task │ │ /run-plan │
29
- │ (one at a time)│ │ (all auto) │
30
- └───────┬────────┘ └────────┬────────┘
31
- │ │
32
- └─────────┬─────────────────┘
33
-
34
-
35
- ┌─────────────────┐
36
- │ Validation Lv 1 │ (automatic, embedded)
37
- │ criteria+tests │
38
- └────────┬────────┘
39
-
40
- ┌──────────────┼──────────────┐
41
- ▼ ▼ ▼
42
- ┌──────────────┐ ┌──────────────┐ ┌─────────────────────┐
43
- │ /run-qa │ │/review-impl. │ │ /code-review │
44
- │ (visual QA) │ │(PRD compliance│ │ (formal code review)│
45
- └──────────────┘ │ Level 2) │ │ (Level 3) │
46
- └──────────────┘ └─────────────────────┘
47
-
48
- ┌───────────────┴───────────────┐
49
- ▼ ▼
50
- ┌──────────────┐ ┌────────────────┐
51
- │ /commit │ │ /commit-all │
52
- │ (one project)│ │ (submodules) │
53
- └──────┬───────┘ └───────┬────────┘
54
- │ │
55
- └────────────┬────────────────────┘
56
-
57
- ┌──────────────────┐
58
- │ /generate-pr │
59
- │ (push + PR + URL)│
60
- └──────────────────┘
61
-
62
-
63
- ┌──────────────────┐
64
- │ /archive-prd │
65
- │ (post-merge) │
66
- └──────────────────┘
67
- ```
68
-
69
- ## Command Table
70
-
71
- ### Planning
72
-
73
- | Command | What it does | Input | Output |
74
- |---------|-------------|-------|--------|
75
- | `/brainstorm` | Facilitates structured ideation before PRD or implementation | Problem, idea, or context | Options + trade-offs + recommendation |
76
- | `/create-prd` | Creates PRD with min. 7 clarification questions | Feature description | `ai/spec/prd-[name]/prd.md` |
77
- | `/create-techspec` | Creates technical specification from the PRD | PRD path | `ai/spec/prd-[name]/techspec.md` |
78
- | `/create-tasks` | Breaks PRD+TechSpec into tasks (max 2 RFs/task) | PRD path | `ai/spec/prd-[name]/tasks.md` + `*_task.md` |
79
-
80
- ### Execution
81
-
82
- | Command | What it does | Input | Output |
83
- |---------|-------------|-------|--------|
84
- | `/run-task` | Implements ONE task + Level 1 validation + commit | PRD path | Code + commit |
85
- | `/run-plan` | Executes ALL tasks + final Level 2 review | PRD path | Code + commits + report |
86
- | `/bugfix` | Analyzes and fixes bugs (bug vs feature triage) | Target + description | Fix + commit OR PRD (if feature) |
87
- | `/fix-qa` | Fixes documented QA bugs and retests with evidence | PRD path | Code + `QA/bugs.md` + `QA/qa-report.md` updated |
88
-
89
- ### Research
90
-
91
- | Command | What it does | Input | Output |
92
- |---------|-------------|-------|--------|
93
- | `/analyze-project` | Analyzes project structure and generates documentation | Project path | Architecture overview |
94
- | `/deep-research` | Multi-source research with citation tracking and verification | Topic or question | Research report with bibliography |
95
-
96
- ### Quality (3 Levels)
97
-
98
- | Level | Command | When | Generates Report? |
99
- |-------|---------|------|-------------------|
100
- | **1** | *(embedded in /run-task)* | After each task | No (terminal output) |
101
- | **2** | `/review-implementation` | After all tasks / manual | Yes (formatted output) |
102
- | **3** | `/code-review` | Before PR / manual | Yes (`code-review.md`) |
103
-
104
- | Command | What it does | Input | Output |
105
- |---------|-------------|-------|--------|
106
- | `/run-qa` | Visual QA with Playwright MCP + accessibility | PRD path | `QA/qa-report.md` + `QA/screenshots/` + `QA/logs/` |
107
- | `/review-implementation` | Compares PRD vs code (RFs, endpoints, tasks) | PRD path | Gap report |
108
- | `/code-review` | Formal code review (quality, rules, tests) | PRD path | `code-review.md` |
109
- | `/refactoring-analysis` | Audit code smells and refactoring opportunities (Fowler's catalog) | PRD path | `refactoring-analysis.md` |
110
-
111
- ### Versioning
112
-
113
- | Command | What it does | Input | Output |
114
- |---------|-------------|-------|--------|
115
- | `/commit` | Semantic commit (Conventional Commits) | - | Commit |
116
- | `/commit-all` | Commit across all submodules (inside-out) | - | Commits |
117
- | `/generate-pr` | Push + create PR + copy body + open URL | Target branch | PR on GitHub |
118
-
119
- ### Maintenance
120
-
121
- | Command | What it does | Input | Output |
122
- |---------|-------------|-------|--------|
123
- | `/list-tasks` | Lists tasks and progress for a PRD | PRD path | Status table |
124
- | `/task-summary` | Shows details of a task without executing | Number + path | Task summary |
125
- | `/archive-prd` | Moves completed PRD to `ai/archived/prd/` | PRD path | Archived PRD |
126
- | `/help` | This command guide | (optional) command | This document |
127
-
128
- ## Review Architecture (3 Levels)
129
-
130
- ```
131
- LEVEL 1 - Post-Task Validation (automatic, lightweight)
132
- ├── Embedded in /run-task
133
- ├── Verifies task acceptance criteria
134
- ├── Runs tests (pnpm test / npm test)
135
- ├── Checks basic patterns (types, imports)
136
- ├── No report file
137
- └── If fails: PAUSES execution
138
-
139
- LEVEL 2 - PRD Compliance (/review-implementation)
140
- ├── Compares ALL RFs from PRD vs actual code
141
- ├── Verifies ALL endpoints from TechSpec
142
- ├── Checks real status of each task (ignores checkboxes)
143
- ├── Identifies gaps, partial implementations, extra code
144
- ├── Called automatically at end of /run-plan
145
- └── Available manually
146
-
147
- LEVEL 3 - Formal Code Review (/code-review)
148
- ├── Everything from Level 2 +
149
- ├── Quality analysis (SOLID, DRY, complexity, security)
150
- ├── Conformance with project rules (ai/rules/)
151
- ├── Tests with coverage
152
- ├── Generates code-review.md in PRD directory
153
- └── Status: APPROVED / WITH CAVEATS / REJECTED
154
- ```
155
-
156
- ## Common Flows
157
-
158
- ### New Feature (Full)
159
- ```bash
160
- /brainstorm "initial idea" # 0. Explore options and trade-offs
161
- /create-prd # 1. Describe the feature
162
- /create-techspec ai/spec/prd-name # 2. Generate tech spec
163
- /create-tasks ai/spec/prd-name # 3. Break into tasks
164
- /run-plan ai/spec/prd-name # 4. Execute all (includes Level 1+2)
165
- /refactoring-analysis ai/spec/prd-name # 5. Audit code smells (optional)
166
- /code-review ai/spec/prd-name # 6. Formal code review (Level 3)
167
- /generate-pr main # 7. Create PR
168
- /archive-prd ai/spec/prd-name # 8. After merge
169
- ```
170
-
171
- ### New Feature (Incremental)
172
- ```bash
173
- /brainstorm "initial idea" # 0. Explore options and trade-offs
174
- /create-prd # 1. PRD
175
- /create-techspec ai/spec/prd-name # 2. TechSpec
176
- /create-tasks ai/spec/prd-name # 3. Tasks
177
- /run-task ai/spec/prd-name # 4. Task 1 (with Level 1)
178
- /run-task ai/spec/prd-name # 5. Task 2 (with Level 1)
179
- # ... repeat for each task
180
- /review-implementation ai/spec/prd-name # 6. PRD review (Level 2)
181
- /code-review ai/spec/prd-name # 7. Code review (Level 3)
182
- /generate-pr main # 8. PR
183
- ```
184
-
185
- ### Simple Bug
186
- ```bash
187
- /bugfix "bug description" # Analyze and fix
188
- /commit # Commit the fix
189
- /generate-pr main # PR
190
- ```
191
-
192
- ### Complex Bug
193
- ```bash
194
- /bugfix "description" --analysis # Generate analysis document
195
- /create-techspec ai/spec/bugfix-name # TechSpec for the fix
196
- /create-tasks ai/spec/bugfix-name # Tasks for the fix
197
- /run-plan ai/spec/bugfix-name # Execute all
198
- /generate-pr main # PR
199
- ```
200
-
201
- ### Visual QA (Frontend)
202
- ```bash
203
- /run-qa ai/spec/prd-name # QA with Playwright MCP
204
- # If bugs found:
205
- /bugfix "description" # Fix each bug
206
- /fix-qa ai/spec/prd-name # Fix + retest full cycle
207
- ```
208
-
209
- ### Deep Research
210
- ```bash
211
- /deep-research "topic or question" # Multi-source research with citations
212
- ```
213
-
214
- ## File Structure
215
-
216
- ```
217
- your-project/
218
- ├── ai/
219
- │ ├── commands/ # Source of truth for commands
220
- │ │ ├── help.md # This guide
221
- │ │ ├── brainstorm.md
222
- │ │ ├── create-prd.md
223
- │ │ ├── create-techspec.md
224
- │ │ ├── create-tasks.md
225
- │ │ ├── run-task.md
226
- │ │ ├── run-plan.md
227
- │ │ ├── run-qa.md
228
- │ │ ├── code-review.md
229
- │ │ ├── refactoring-analysis.md
230
- │ │ ├── review-implementation.md
231
- │ │ ├── analyze-project.md
232
- │ │ ├── deep-research.md
233
- │ │ ├── bugfix.md
234
- │ │ ├── commit.md
235
- │ │ ├── commit-all.md
236
- │ │ ├── generate-pr.md
237
- │ │ └── archive-prd.md
238
- │ ├── templates/ # Document templates
239
- │ │ ├── prd-template.md
240
- │ │ ├── techspec-template.md
241
- │ │ ├── tasks-template.md
242
- │ │ ├── task-template.md
243
- │ │ └── bugfix-template.md
244
- │ ├── rules/ # Project-specific rules
245
- │ │ └── *.md
246
- │ ├── tasks/ # Active PRDs and tasks
247
- │ │ └── prd-[name]/
248
- │ │ ├── prd.md
249
- │ │ ├── techspec.md
250
- │ │ ├── tasks.md
251
- │ │ └── *_task.md
252
- │ └── archived/prd/ # Completed PRDs
253
- ├── .codex/skills/ # Codex skills
254
- ├── .claude/skills/ # Claude Code skills
255
- ├── .opencode/commands/ # OpenCode commands
256
- └── .github/copilot-instructions.md # Copilot instructions
257
- ```
258
-
259
- ## Tool Integration
260
-
261
- Commands work across multiple AI tools, all pointing to the same source `ai/commands/`:
262
-
263
- | Tool | Location | Format |
264
- |------|----------|--------|
265
- | **Codex CLI** | `.codex/skills/*/SKILL.md` | Skill referencing `ai/commands/` |
266
- | **Claude Code** | `.claude/skills/*/SKILL.md` | Skill referencing `ai/commands/` |
267
- | **OpenCode** | `.opencode/commands/*.md` | Command referencing `ai/commands/` |
268
- | **GitHub Copilot** | `.github/copilot-instructions.md` | Instructions listing the commands |
269
-
270
- ## FAQ
271
-
272
- **Q: What is the difference between `/run-task` and `/run-plan`?**
273
- - `/run-task` executes ONE task with manual control between each one
274
- - `/run-plan` executes ALL automatically with a final review
275
-
276
- **Q: Do I need to run `/review-implementation` manually?**
277
- - Not if using `/run-plan` (already included). Yes if using `/run-task` incrementally.
278
-
279
- **Q: When to use `/code-review` vs `/review-implementation`?**
280
- - `/review-implementation` (Level 2): Checks if PRD RFs were implemented
281
- - `/code-review` (Level 3): Additionally analyzes code quality and generates a formal report
282
-
283
- **Q: Does `/bugfix` always fix directly?**
284
- - No. It performs triage. If it is a feature (not a bug), it redirects to `/create-prd`. If it is a complex bug, it can generate an analysis document with `--analysis`.
285
-
286
- **Q: When should I use `/deep-research`?**
287
- - For comprehensive multi-source analysis, technology comparisons, state-of-the-art reviews, or any topic requiring cited evidence. Not for simple lookups or debugging.
288
-
289
- </system_instructions>