@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.
- package/README.md +42 -42
- package/bin/dev-workflow.js +6 -4
- package/lib/constants.js +42 -40
- package/lib/init.js +66 -19
- package/package.json +1 -1
- package/scaffold/en/commands/{analyze-project.md → dw-analyze-project.md} +69 -40
- package/scaffold/en/commands/{brainstorm.md → dw-brainstorm.md} +31 -4
- package/scaffold/en/commands/{bugfix.md → dw-bugfix.md} +63 -19
- package/scaffold/en/commands/{code-review.md → dw-code-review.md} +38 -15
- package/scaffold/en/commands/{commit.md → dw-commit.md} +25 -0
- package/scaffold/en/commands/{create-prd.md → dw-create-prd.md} +24 -10
- package/scaffold/en/commands/{create-tasks.md → dw-create-tasks.md} +11 -4
- package/scaffold/en/commands/{create-techspec.md → dw-create-techspec.md} +38 -11
- package/scaffold/en/commands/{deep-research.md → dw-deep-research.md} +18 -17
- package/scaffold/en/commands/{fix-qa.md → dw-fix-qa.md} +20 -3
- package/scaffold/en/commands/dw-functional-doc.md +276 -0
- package/scaffold/en/commands/{generate-pr.md → dw-generate-pr.md} +20 -5
- package/scaffold/en/commands/dw-help.md +309 -0
- package/scaffold/en/commands/{refactoring-analysis.md → dw-refactoring-analysis.md} +50 -26
- package/scaffold/en/commands/{review-implementation.md → dw-review-implementation.md} +25 -6
- package/scaffold/en/commands/{run-plan.md → dw-run-plan.md} +21 -6
- package/scaffold/en/commands/{run-qa.md → dw-run-qa.md} +32 -13
- package/scaffold/en/commands/{run-task.md → dw-run-task.md} +17 -7
- package/scaffold/en/references/playwright-patterns.md +136 -0
- package/scaffold/en/references/refactoring-catalog.md +167 -0
- package/scaffold/en/templates/brainstorm-matrix.md +44 -0
- package/scaffold/en/templates/functional-doc/case-matrix.md +5 -0
- package/scaffold/en/templates/functional-doc/e2e-runbook.md +3 -0
- package/scaffold/en/templates/functional-doc/features.md +3 -0
- package/scaffold/en/templates/functional-doc/overview.md +21 -0
- package/scaffold/en/templates/functional-doc/playwright.spec.ts.tpl +19 -0
- package/scaffold/en/templates/pr-bugfix-template.md +28 -0
- package/scaffold/en/templates/qa-test-credentials.md +37 -0
- package/scaffold/en/templates/tasks-template.md +1 -1
- package/scaffold/en/templates/techspec-template.md +1 -1
- package/scaffold/pt-br/commands/{analyze-project.md → dw-analyze-project.md} +94 -44
- package/scaffold/pt-br/commands/{brainstorm.md → dw-brainstorm.md} +32 -5
- package/scaffold/pt-br/commands/{bugfix.md → dw-bugfix.md} +73 -16
- package/scaffold/pt-br/commands/{code-review.md → dw-code-review.md} +80 -17
- package/scaffold/pt-br/commands/{commit.md → dw-commit.md} +45 -1
- package/scaffold/pt-br/commands/{create-prd.md → dw-create-prd.md} +25 -10
- package/scaffold/pt-br/commands/{create-tasks.md → dw-create-tasks.md} +24 -17
- package/scaffold/pt-br/commands/{create-techspec.md → dw-create-techspec.md} +40 -13
- package/scaffold/pt-br/commands/{deep-research.md → dw-deep-research.md} +19 -11
- package/scaffold/pt-br/commands/{fix-qa.md → dw-fix-qa.md} +30 -1
- package/scaffold/pt-br/commands/dw-functional-doc.md +276 -0
- package/scaffold/pt-br/commands/{generate-pr.md → dw-generate-pr.md} +61 -6
- package/scaffold/pt-br/commands/dw-help.md +248 -0
- package/scaffold/pt-br/commands/{refactoring-analysis.md → dw-refactoring-analysis.md} +49 -25
- package/scaffold/pt-br/commands/{review-implementation.md → dw-review-implementation.md} +53 -5
- package/scaffold/pt-br/commands/{run-plan.md → dw-run-plan.md} +100 -12
- package/scaffold/pt-br/commands/{run-qa.md → dw-run-qa.md} +93 -18
- package/scaffold/pt-br/commands/{run-task.md → dw-run-task.md} +35 -10
- package/scaffold/pt-br/references/playwright-patterns.md +133 -0
- package/scaffold/pt-br/references/refactoring-catalog.md +166 -0
- package/scaffold/pt-br/templates/brainstorm-matrix.md +44 -0
- package/scaffold/pt-br/templates/functional-doc/case-matrix.md +5 -0
- package/scaffold/pt-br/templates/functional-doc/e2e-runbook.md +3 -0
- package/scaffold/pt-br/templates/functional-doc/features.md +3 -0
- package/scaffold/pt-br/templates/functional-doc/overview.md +21 -0
- package/scaffold/pt-br/templates/functional-doc/playwright.spec.ts.tpl +19 -0
- package/scaffold/pt-br/templates/pr-bugfix-template.md +28 -0
- package/scaffold/pt-br/templates/qa-test-credentials.md +37 -0
- package/scaffold/pt-br/templates/tasks-template.md +2 -2
- package/scaffold/pt-br/templates/techspec-template.md +1 -1
- package/scaffold/rules-readme.md +3 -3
- package/scaffold/scripts/functional-doc/generate-dossier.mjs +821 -0
- package/scaffold/scripts/functional-doc/run-playwright-flow.mjs +275 -0
- package/scaffold/skills/agent-browser/SKILL.md +750 -0
- package/scaffold/skills/agent-browser/references/authentication.md +303 -0
- package/scaffold/skills/agent-browser/references/commands.md +295 -0
- package/scaffold/skills/agent-browser/references/profiling.md +120 -0
- package/scaffold/skills/agent-browser/references/proxy-support.md +194 -0
- package/scaffold/skills/agent-browser/references/session-management.md +193 -0
- package/scaffold/skills/agent-browser/references/snapshot-refs.md +219 -0
- package/scaffold/skills/agent-browser/references/video-recording.md +173 -0
- package/scaffold/skills/agent-browser/templates/authenticated-session.sh +105 -0
- package/scaffold/skills/agent-browser/templates/capture-workflow.sh +69 -0
- package/scaffold/skills/agent-browser/templates/form-automation.sh +62 -0
- package/scaffold/skills/humanizer/README.md +143 -0
- package/scaffold/skills/humanizer/SKILL.md +488 -0
- package/scaffold/skills/humanizer/WARP.md +53 -0
- package/scaffold/skills/remotion-best-practices/SKILL.md +61 -0
- package/scaffold/skills/remotion-best-practices/rules/3d.md +86 -0
- package/scaffold/skills/remotion-best-practices/rules/animations.md +27 -0
- package/scaffold/skills/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/scaffold/skills/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/scaffold/skills/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/scaffold/skills/remotion-best-practices/rules/assets.md +78 -0
- package/scaffold/skills/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/scaffold/skills/remotion-best-practices/rules/audio.md +169 -0
- package/scaffold/skills/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/scaffold/skills/remotion-best-practices/rules/can-decode.md +75 -0
- package/scaffold/skills/remotion-best-practices/rules/charts.md +120 -0
- package/scaffold/skills/remotion-best-practices/rules/compositions.md +154 -0
- package/scaffold/skills/remotion-best-practices/rules/display-captions.md +184 -0
- package/scaffold/skills/remotion-best-practices/rules/extract-frames.md +229 -0
- package/scaffold/skills/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/scaffold/skills/remotion-best-practices/rules/fonts.md +152 -0
- package/scaffold/skills/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/scaffold/skills/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/scaffold/skills/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/scaffold/skills/remotion-best-practices/rules/gifs.md +141 -0
- package/scaffold/skills/remotion-best-practices/rules/images.md +134 -0
- package/scaffold/skills/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/scaffold/skills/remotion-best-practices/rules/light-leaks.md +73 -0
- package/scaffold/skills/remotion-best-practices/rules/lottie.md +70 -0
- package/scaffold/skills/remotion-best-practices/rules/maps.md +412 -0
- package/scaffold/skills/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/scaffold/skills/remotion-best-practices/rules/measuring-text.md +140 -0
- package/scaffold/skills/remotion-best-practices/rules/parameters.md +109 -0
- package/scaffold/skills/remotion-best-practices/rules/sequencing.md +118 -0
- package/scaffold/skills/remotion-best-practices/rules/sfx.md +26 -0
- package/scaffold/skills/remotion-best-practices/rules/subtitles.md +36 -0
- package/scaffold/skills/remotion-best-practices/rules/tailwind.md +11 -0
- package/scaffold/skills/remotion-best-practices/rules/text-animations.md +20 -0
- package/scaffold/skills/remotion-best-practices/rules/timing.md +179 -0
- package/scaffold/skills/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/scaffold/skills/remotion-best-practices/rules/transitions.md +197 -0
- package/scaffold/skills/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/scaffold/skills/remotion-best-practices/rules/trimming.md +51 -0
- package/scaffold/skills/remotion-best-practices/rules/videos.md +171 -0
- package/scaffold/skills/remotion-best-practices/rules/voiceover.md +99 -0
- package/scaffold/skills/security-review/LICENSE +22 -0
- package/scaffold/skills/security-review/SKILL.md +312 -0
- package/scaffold/skills/security-review/infrastructure/docker.md +432 -0
- package/scaffold/skills/security-review/languages/javascript.md +388 -0
- package/scaffold/skills/security-review/languages/python.md +363 -0
- package/scaffold/skills/security-review/references/api-security.md +519 -0
- package/scaffold/skills/security-review/references/authentication.md +353 -0
- package/scaffold/skills/security-review/references/authorization.md +372 -0
- package/scaffold/skills/security-review/references/business-logic.md +443 -0
- package/scaffold/skills/security-review/references/cryptography.md +329 -0
- package/scaffold/skills/security-review/references/csrf.md +398 -0
- package/scaffold/skills/security-review/references/data-protection.md +378 -0
- package/scaffold/skills/security-review/references/deserialization.md +410 -0
- package/scaffold/skills/security-review/references/error-handling.md +436 -0
- package/scaffold/skills/security-review/references/file-security.md +457 -0
- package/scaffold/skills/security-review/references/injection.md +259 -0
- package/scaffold/skills/security-review/references/logging.md +433 -0
- package/scaffold/skills/security-review/references/misconfiguration.md +435 -0
- package/scaffold/skills/security-review/references/modern-threats.md +475 -0
- package/scaffold/skills/security-review/references/ssrf.md +415 -0
- package/scaffold/skills/security-review/references/supply-chain.md +405 -0
- package/scaffold/skills/security-review/references/xss.md +336 -0
- package/scaffold/skills/vercel-react-best-practices/AGENTS.md +3648 -0
- package/scaffold/skills/vercel-react-best-practices/README.md +123 -0
- package/scaffold/skills/vercel-react-best-practices/SKILL.md +146 -0
- package/scaffold/skills/vercel-react-best-practices/rules/_sections.md +46 -0
- package/scaffold/skills/vercel-react-best-practices/rules/_template.md +28 -0
- package/scaffold/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/scaffold/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/scaffold/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/scaffold/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/scaffold/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/scaffold/skills/vercel-react-best-practices/rules/async-defer-await.md +82 -0
- package/scaffold/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/scaffold/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/scaffold/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/scaffold/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/scaffold/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/scaffold/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/scaffold/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/scaffold/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/scaffold/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/scaffold/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/scaffold/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/scaffold/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/scaffold/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/scaffold/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/scaffold/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/scaffold/skills/webapp-testing/SKILL.md +133 -0
- package/scaffold/skills/webapp-testing/assets/test-helper.js +56 -0
- package/scaffold/en/commands/help.md +0 -289
- 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>
|