@brunosps00/dev-workflow 2.1.0 → 2.3.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.
Files changed (129) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/CHANGELOG.md +118 -0
  3. package/README.md +17 -6
  4. package/lib/constants.js +24 -20
  5. package/lib/init.js +34 -0
  6. package/lib/instruction-health.js +38 -0
  7. package/lib/post-update.js +2 -1
  8. package/lib/validate.js +3 -1
  9. package/package.json +1 -1
  10. package/scaffold/config/routing.json +61 -23
  11. package/scaffold/en/agent-instructions.md +31 -135
  12. package/scaffold/en/commands/dw-analyze-project.md +2 -0
  13. package/scaffold/en/commands/dw-autopilot.md +22 -243
  14. package/scaffold/en/commands/dw-bugfix.md +9 -35
  15. package/scaffold/en/commands/dw-claude-run.md +29 -45
  16. package/scaffold/en/commands/dw-codex-run.md +30 -45
  17. package/scaffold/en/commands/dw-context-budget.md +6 -14
  18. package/scaffold/en/commands/dw-copilot-run.md +29 -41
  19. package/scaffold/en/commands/dw-generate-pr.md +2 -2
  20. package/scaffold/en/commands/dw-goal.md +11 -5
  21. package/scaffold/en/commands/dw-harness-audit.md +2 -0
  22. package/scaffold/en/commands/dw-help.md +8 -4
  23. package/scaffold/en/commands/dw-pause.md +1 -0
  24. package/scaffold/en/commands/dw-plan.md +14 -7
  25. package/scaffold/en/commands/dw-qa.md +2 -0
  26. package/scaffold/en/commands/dw-report.md +169 -0
  27. package/scaffold/en/commands/dw-resume.md +5 -11
  28. package/scaffold/en/commands/dw-review.md +4 -3
  29. package/scaffold/en/commands/dw-run.md +19 -165
  30. package/scaffold/en/commands/dw-skill-health.md +7 -0
  31. package/scaffold/en/commands/dw-update.md +18 -4
  32. package/scaffold/en/commands/dw-worktree.md +100 -0
  33. package/scaffold/en/references/command-routing.md +53 -0
  34. package/scaffold/en/references/execution-contract.md +55 -0
  35. package/scaffold/en/templates/frontend-quality-template.md +43 -0
  36. package/scaffold/en/templates/task-template.md +20 -40
  37. package/scaffold/en/templates/tasks-template.md +9 -6
  38. package/scaffold/en/templates/techspec-template.md +4 -0
  39. package/scaffold/pt-br/agent-instructions.md +31 -135
  40. package/scaffold/pt-br/commands/dw-analyze-project.md +2 -0
  41. package/scaffold/pt-br/commands/dw-autopilot.md +22 -243
  42. package/scaffold/pt-br/commands/dw-bugfix.md +9 -35
  43. package/scaffold/pt-br/commands/dw-claude-run.md +29 -46
  44. package/scaffold/pt-br/commands/dw-codex-run.md +30 -45
  45. package/scaffold/pt-br/commands/dw-context-budget.md +6 -14
  46. package/scaffold/pt-br/commands/dw-copilot-run.md +29 -43
  47. package/scaffold/pt-br/commands/dw-generate-pr.md +2 -2
  48. package/scaffold/pt-br/commands/dw-goal.md +11 -5
  49. package/scaffold/pt-br/commands/dw-harness-audit.md +2 -0
  50. package/scaffold/pt-br/commands/dw-help.md +8 -4
  51. package/scaffold/pt-br/commands/dw-pause.md +1 -0
  52. package/scaffold/pt-br/commands/dw-plan.md +14 -7
  53. package/scaffold/pt-br/commands/dw-qa.md +2 -0
  54. package/scaffold/pt-br/commands/dw-report.md +169 -0
  55. package/scaffold/pt-br/commands/dw-resume.md +7 -11
  56. package/scaffold/pt-br/commands/dw-review.md +4 -3
  57. package/scaffold/pt-br/commands/dw-run.md +19 -165
  58. package/scaffold/pt-br/commands/dw-skill-health.md +7 -0
  59. package/scaffold/pt-br/commands/dw-update.md +18 -4
  60. package/scaffold/pt-br/commands/dw-worktree.md +100 -0
  61. package/scaffold/pt-br/references/command-routing.md +53 -0
  62. package/scaffold/pt-br/references/execution-contract.md +55 -0
  63. package/scaffold/pt-br/templates/frontend-quality-template.md +43 -0
  64. package/scaffold/pt-br/templates/task-template.md +20 -40
  65. package/scaffold/pt-br/templates/tasks-template.md +9 -6
  66. package/scaffold/pt-br/templates/techspec-template.md +4 -0
  67. package/scaffold/scripts/hooks/git-guardrails.mjs +1 -0
  68. package/scaffold/scripts/lib/workflow-contract.mjs +101 -0
  69. package/scaffold/scripts/lib/worktree-gc.mjs +460 -0
  70. package/scaffold/skill-registry.json +23 -23
  71. package/scaffold/skills/dw-cli-run/SKILL.md +33 -208
  72. package/scaffold/skills/dw-cli-run/references/dispatch-tuning.md +14 -72
  73. package/scaffold/skills/dw-codebase-intel/SKILL.md +5 -39
  74. package/scaffold/skills/dw-codebase-intel/agents/intel-updater.md +1 -1
  75. package/scaffold/skills/dw-codebase-intel/references/agents-detail.md +7 -0
  76. package/scaffold/skills/dw-codebase-intel/references/files-in-dw-intel-detail.md +16 -0
  77. package/scaffold/skills/dw-codebase-intel/references/how-dw-intel-reads-this-detail.md +12 -0
  78. package/scaffold/skills/dw-codebase-intel/references/how-to-compose-the-typical-flow-detail.md +11 -0
  79. package/scaffold/skills/dw-council/SKILL.md +2 -17
  80. package/scaffold/skills/dw-council/references/integration-with-other-dw-commands-detail.md +7 -0
  81. package/scaffold/skills/dw-council/references/phase-2-tensions-and-rebuttals-detail.md +15 -0
  82. package/scaffold/skills/dw-domain-modeling/SKILL.md +1 -1
  83. package/scaffold/skills/dw-execute-phase/SKILL.md +12 -32
  84. package/scaffold/skills/dw-execute-phase/agents/executor.md +15 -252
  85. package/scaffold/skills/dw-execute-phase/agents/plan-checker.md +4 -207
  86. package/scaffold/skills/dw-execute-phase/references/atomic-commits.md +8 -18
  87. package/scaffold/skills/dw-execute-phase/references/de-sloppify-pass-optional-cleanup-task-detail.md +12 -0
  88. package/scaffold/skills/dw-execute-phase/references/deviation-rules-during-execution-detail.md +8 -0
  89. package/scaffold/skills/dw-execute-phase/references/how-the-two-agents-compose-detail.md +7 -0
  90. package/scaffold/skills/dw-execute-phase/references/plan-verification.md +9 -155
  91. package/scaffold/skills/dw-execute-phase/references/wave-coordination.md +6 -97
  92. package/scaffold/skills/dw-git-discipline/SKILL.md +2 -2
  93. package/scaffold/skills/dw-grilling/SKILL.md +1 -1
  94. package/scaffold/skills/dw-incident-response/SKILL.md +1 -64
  95. package/scaffold/skills/dw-incident-response/references/the-five-phases-detail.md +66 -0
  96. package/scaffold/skills/dw-llm-eval/SKILL.md +5 -53
  97. package/scaffold/skills/dw-llm-eval/references/agent-tool-use-evaluation-detail.md +23 -0
  98. package/scaffold/skills/dw-llm-eval/references/anti-patterns-will-block-in-dw-review-code-only-detail.md +9 -0
  99. package/scaffold/skills/dw-llm-eval/references/consistency-run-to-run-stability-detail.md +10 -0
  100. package/scaffold/skills/dw-llm-eval/references/integration-with-dev-workflow-commands-detail.md +6 -0
  101. package/scaffold/skills/dw-llm-eval/references/the-oracle-ladder-detail.md +15 -0
  102. package/scaffold/skills/dw-memory/SKILL.md +4 -50
  103. package/scaffold/skills/dw-memory/references/context-budget.md +8 -56
  104. package/scaffold/skills/dw-memory/references/promotion-decision-test-detail.md +30 -0
  105. package/scaffold/skills/dw-minimalism/SKILL.md +4 -5
  106. package/scaffold/skills/dw-review-rigor/SKILL.md +1 -54
  107. package/scaffold/skills/dw-review-rigor/references/the-five-rules-detail.md +56 -0
  108. package/scaffold/skills/dw-simplification/SKILL.md +2 -55
  109. package/scaffold/skills/dw-simplification/references/pattern-recognition-detail.md +11 -0
  110. package/scaffold/skills/dw-simplification/references/the-five-rules-detail.md +48 -0
  111. package/scaffold/skills/dw-source-grounding/SKILL.md +1 -56
  112. package/scaffold/skills/dw-source-grounding/references/the-protocol-detect-fetch-implement-cite-detail.md +58 -0
  113. package/scaffold/skills/dw-testing-discipline/SKILL.md +25 -177
  114. package/scaffold/skills/dw-testing-discipline/references/agent-guardrails.md +9 -167
  115. package/scaffold/skills/dw-testing-discipline/references/core-rules.md +3 -3
  116. package/scaffold/skills/dw-testing-discipline/references/mutation-testing.md +19 -0
  117. package/scaffold/skills/dw-testing-discipline/references/patterns.md +3 -12
  118. package/scaffold/skills/dw-ui-discipline/SKILL.md +2 -59
  119. package/scaffold/skills/dw-ui-discipline/references/frontend-engineering.md +46 -0
  120. package/scaffold/skills/dw-ui-discipline/references/the-four-grounding-questions-detail.md +61 -0
  121. package/scaffold/skills/dw-verify/SKILL.md +26 -148
  122. package/scaffold/skills/dw-verify/references/verification-discovery-and-attribution.md +2 -2
  123. package/scaffold/skills/humanizer/SKILL.md +2 -1
  124. package/scaffold/skills/security-review/SKILL.md +3 -183
  125. package/scaffold/skills/security-review/references/do-not-flag-detail.md +49 -0
  126. package/scaffold/skills/security-review/references/quick-patterns-reference-detail.md +56 -0
  127. package/scaffold/skills/security-review/references/review-process-detail.md +84 -0
  128. package/scaffold/skills/vercel-react-best-practices/SKILL.md +1 -90
  129. package/scaffold/skills/vercel-react-best-practices/references/quick-reference-detail.md +92 -0
@@ -0,0 +1,56 @@
1
+ ## Quick Patterns Reference
2
+
3
+ ### Always Flag (Critical)
4
+ ```
5
+ eval(user_input) # Any language
6
+ exec(user_input) # Any language
7
+ pickle.loads(user_data) # Python
8
+ yaml.load(user_data) # Python (not safe_load)
9
+ unserialize($user_data) # PHP
10
+ deserialize(user_data) # Java ObjectInputStream
11
+ shell=True + user_input # Python subprocess
12
+ child_process.exec(user) # Node.js
13
+ ```
14
+
15
+ ### Always Flag (High)
16
+ ```
17
+ innerHTML = userInput # DOM XSS
18
+ dangerouslySetInnerHTML={user} # React XSS
19
+ v-html="userInput" # Vue XSS
20
+ f"SELECT * FROM x WHERE {user}" # SQL injection
21
+ `SELECT * FROM x WHERE ${user}` # SQL injection
22
+ os.system(f"cmd {user_input}") # Command injection
23
+ ```
24
+
25
+ ### Always Flag (Secrets)
26
+ ```
27
+ password = "hardcoded"
28
+ api_key = "sk-..."
29
+ AWS_SECRET_ACCESS_KEY = "..."
30
+ private_key = "-----BEGIN"
31
+ ```
32
+
33
+ ### Check Context First (MUST Investigate Before Flagging)
34
+ ```
35
+ # SSRF - ONLY if URL is from user input, NOT from settings/config
36
+ requests.get(request.GET['url']) # FLAG: User-controlled URL
37
+ requests.get(settings.API_URL) # SAFE: Server-controlled config
38
+ requests.get(f"{settings.BASE}/{x}") # CHECK: Is 'x' user input?
39
+
40
+ # Path traversal - ONLY if path is from user input
41
+ open(request.GET['file']) # FLAG: User-controlled path
42
+ open(settings.LOG_PATH) # SAFE: Server-controlled config
43
+ open(f"{BASE_DIR}/{filename}") # CHECK: Is 'filename' user input?
44
+
45
+ # Open redirect - ONLY if URL is from user input
46
+ redirect(request.GET['next']) # FLAG: User-controlled redirect
47
+ redirect(settings.LOGIN_URL) # SAFE: Server-controlled config
48
+
49
+ # Weak crypto - ONLY if used for security purposes
50
+ hashlib.md5(file_content) # SAFE: File checksums, caching
51
+ hashlib.md5(password) # FLAG: Password hashing
52
+ random.random() # SAFE: Non-security uses (UI, sampling)
53
+ random.random() for token # FLAG: Security tokens need secrets module
54
+ ```
55
+
56
+ ---
@@ -0,0 +1,84 @@
1
+ ## Review Process
2
+
3
+ ### 1. Detect Context
4
+
5
+ What type of code am I reviewing?
6
+
7
+ | Code Type | Load These References |
8
+ |-----------|----------------------|
9
+ | API endpoints, routes | `authorization.md`, `authentication.md`, `injection.md` |
10
+ | Frontend, templates | `xss.md`, `csrf.md` |
11
+ | File handling, uploads | `file-security.md` |
12
+ | Crypto, secrets, tokens | `cryptography.md`, `data-protection.md` |
13
+ | Data serialization | `deserialization.md` |
14
+ | External requests | `ssrf.md` |
15
+ | Business workflows | `business-logic.md` |
16
+ | GraphQL, REST design | `api-security.md` |
17
+ | Config, headers, CORS | `misconfiguration.md` |
18
+ | CI/CD, dependencies | `supply-chain.md` |
19
+ | Error handling | `error-handling.md` |
20
+ | Audit, logging | `logging.md` |
21
+
22
+ ### 2. Load Language Guide
23
+
24
+ Based on file extension or imports:
25
+
26
+ | Indicators | Guide |
27
+ |------------|-------|
28
+ | `.py`, `django`, `flask`, `fastapi` | `../languages/python.md` |
29
+ | `.js`, `.ts`, `express`, `react`, `vue`, `next` | `../languages/javascript.md` |
30
+ | `.go`, `go.mod` | `languages/go.md` |
31
+ | `.rs`, `Cargo.toml` | `../languages/rust.md` |
32
+ | `.java`, `spring`, `@Controller` | `languages/java.md` |
33
+
34
+ ### 3. Load Infrastructure Guide (if applicable)
35
+
36
+ | File Type | Guide |
37
+ |-----------|-------|
38
+ | `Dockerfile`, `.dockerignore` | `../infrastructure/docker.md` |
39
+ | K8s manifests, Helm charts | `infrastructure/kubernetes.md` |
40
+ | `.tf`, Terraform | `infrastructure/terraform.md` |
41
+ | GitHub Actions, `.gitlab-ci.yml` | `infrastructure/ci-cd.md` |
42
+ | AWS/GCP/Azure configs, IAM | `infrastructure/cloud.md` |
43
+
44
+ ### 4. Research Before Flagging
45
+
46
+ **For each potential issue, research the codebase to build confidence:**
47
+
48
+ - Where does this value actually come from? Trace the data flow.
49
+ - Is it configured at deployment (settings, env vars) or from user input?
50
+ - Is there validation, sanitization, or allowlisting elsewhere?
51
+ - What framework protections apply?
52
+
53
+ Only report issues where you have HIGH confidence after understanding the broader context.
54
+
55
+ ### 5. Verify Exploitability
56
+
57
+ For each potential finding, confirm:
58
+
59
+ **Is the input attacker-controlled?**
60
+
61
+ | Attacker-Controlled (Investigate) | Server-Controlled (Usually Safe) |
62
+ |-----------------------------------|----------------------------------|
63
+ | `request.GET`, `request.POST`, `request.args` | `settings.X`, `app.config['X']` |
64
+ | `request.json`, `request.data`, `request.body` | `os.environ.get('X')` |
65
+ | `request.headers` (most headers) | Hardcoded constants |
66
+ | `request.cookies` (unsigned) | Internal service URLs from config |
67
+ | URL path segments: `/users/<id>/` | Database content from admin/system |
68
+ | File uploads (content and names) | Signed session data |
69
+ | Database content from other users | Framework settings |
70
+ | WebSocket messages | |
71
+
72
+ **Does the framework mitigate this?**
73
+ - Check language guide for auto-escaping, parameterization
74
+ - Check for middleware/decorators that sanitize
75
+
76
+ **Is there validation upstream?**
77
+ - Input validation before this code
78
+ - Sanitization libraries (DOMPurify, bleach, etc.)
79
+
80
+ ### 6. Report HIGH Confidence Only
81
+
82
+ Skip theoretical issues. Report only what you've confirmed is exploitable after research.
83
+
84
+ ---
@@ -37,96 +37,7 @@ Reference these guidelines when:
37
37
 
38
38
  ## Quick Reference
39
39
 
40
- ### 1. Eliminating Waterfalls (CRITICAL)
41
-
42
- - `async-cheap-condition-before-await` - Check cheap sync conditions before awaiting flags or remote values
43
- - `async-defer-await` - Move await into branches where actually used
44
- - `async-parallel` - Use Promise.all() for independent operations
45
- - `async-dependencies` - Use better-all for partial dependencies
46
- - `async-api-routes` - Start promises early, await late in API routes
47
- - `async-suspense-boundaries` - Use Suspense to stream content
48
-
49
- ### 2. Bundle Size Optimization (CRITICAL)
50
-
51
- - `bundle-barrel-imports` - Import directly, avoid barrel files
52
- - `bundle-dynamic-imports` - Use next/dynamic for heavy components
53
- - `bundle-defer-third-party` - Load analytics/logging after hydration
54
- - `bundle-conditional` - Load modules only when feature is activated
55
- - `bundle-preload` - Preload on hover/focus for perceived speed
56
-
57
- ### 3. Server-Side Performance (HIGH)
58
-
59
- - `server-auth-actions` - Authenticate server actions like API routes
60
- - `server-cache-react` - Use React.cache() for per-request deduplication
61
- - `server-cache-lru` - Use LRU cache for cross-request caching
62
- - `server-dedup-props` - Avoid duplicate serialization in RSC props
63
- - `server-hoist-static-io` - Hoist static I/O (fonts, logos) to module level
64
- - `server-serialization` - Minimize data passed to client components
65
- - `server-parallel-fetching` - Restructure components to parallelize fetches
66
- - `server-parallel-nested-fetching` - Chain nested fetches per item in Promise.all
67
- - `server-after-nonblocking` - Use after() for non-blocking operations
68
-
69
- ### 4. Client-Side Data Fetching (MEDIUM-HIGH)
70
-
71
- - `client-swr-dedup` - Use SWR for automatic request deduplication
72
- - `client-event-listeners` - Deduplicate global event listeners
73
- - `client-passive-event-listeners` - Use passive listeners for scroll
74
- - `client-localstorage-schema` - Version and minimize localStorage data
75
-
76
- ### 5. Re-render Optimization (MEDIUM)
77
-
78
- - `rerender-defer-reads` - Don't subscribe to state only used in callbacks
79
- - `rerender-memo` - Extract expensive work into memoized components
80
- - `rerender-memo-with-default-value` - Hoist default non-primitive props
81
- - `rerender-dependencies` - Use primitive dependencies in effects
82
- - `rerender-derived-state` - Subscribe to derived booleans, not raw values
83
- - `rerender-derived-state-no-effect` - Derive state during render, not effects
84
- - `rerender-functional-setstate` - Use functional setState for stable callbacks
85
- - `rerender-lazy-state-init` - Pass function to useState for expensive values
86
- - `rerender-simple-expression-in-memo` - Avoid memo for simple primitives
87
- - `rerender-split-combined-hooks` - Split hooks with independent dependencies
88
- - `rerender-move-effect-to-event` - Put interaction logic in event handlers
89
- - `rerender-transitions` - Use startTransition for non-urgent updates
90
- - `rerender-use-deferred-value` - Defer expensive renders to keep input responsive
91
- - `rerender-use-ref-transient-values` - Use refs for transient frequent values
92
- - `rerender-no-inline-components` - Don't define components inside components
93
-
94
- ### 6. Rendering Performance (MEDIUM)
95
-
96
- - `rendering-animate-svg-wrapper` - Animate div wrapper, not SVG element
97
- - `rendering-content-visibility` - Use content-visibility for long lists
98
- - `rendering-hoist-jsx` - Extract static JSX outside components
99
- - `rendering-svg-precision` - Reduce SVG coordinate precision
100
- - `rendering-hydration-no-flicker` - Use inline script for client-only data
101
- - `rendering-hydration-suppress-warning` - Suppress expected mismatches
102
- - `rendering-activity` - Use Activity component for show/hide
103
- - `rendering-conditional-render` - Use ternary, not && for conditionals
104
- - `rendering-usetransition-loading` - Prefer useTransition for loading state
105
- - `rendering-resource-hints` - Use React DOM resource hints for preloading
106
- - `rendering-script-defer-async` - Use defer or async on script tags
107
-
108
- ### 7. JavaScript Performance (LOW-MEDIUM)
109
-
110
- - `js-batch-dom-css` - Group CSS changes via classes or cssText
111
- - `js-index-maps` - Build Map for repeated lookups
112
- - `js-cache-property-access` - Cache object properties in loops
113
- - `js-cache-function-results` - Cache function results in module-level Map
114
- - `js-cache-storage` - Cache localStorage/sessionStorage reads
115
- - `js-combine-iterations` - Combine multiple filter/map into one loop
116
- - `js-length-check-first` - Check array length before expensive comparison
117
- - `js-early-exit` - Return early from functions
118
- - `js-hoist-regexp` - Hoist RegExp creation outside loops
119
- - `js-min-max-loop` - Use loop for min/max instead of sort
120
- - `js-set-map-lookups` - Use Set/Map for O(1) lookups
121
- - `js-tosorted-immutable` - Use toSorted() for immutability
122
- - `js-flatmap-filter` - Use flatMap to map and filter in one pass
123
- - `js-request-idle-callback` - Defer non-critical work to browser idle time
124
-
125
- ### 8. Advanced Patterns (LOW)
126
-
127
- - `advanced-event-handler-refs` - Store event handlers in refs
128
- - `advanced-init-once` - Initialize app once per app load
129
- - `advanced-use-latest` - useLatest for stable callback refs
40
+ For quick reference, read `references/quick-reference-detail.md`. Load only when this part of the task applies.
130
41
 
131
42
  ## How to Use
132
43
 
@@ -0,0 +1,92 @@
1
+ ## Quick Reference
2
+
3
+ ### 1. Eliminating Waterfalls (CRITICAL)
4
+
5
+ - `async-cheap-condition-before-await` - Check cheap sync conditions before awaiting flags or remote values
6
+ - `async-defer-await` - Move await into branches where actually used
7
+ - `async-parallel` - Use Promise.all() for independent operations
8
+ - `async-dependencies` - Use better-all for partial dependencies
9
+ - `async-api-routes` - Start promises early, await late in API routes
10
+ - `async-suspense-boundaries` - Use Suspense to stream content
11
+
12
+ ### 2. Bundle Size Optimization (CRITICAL)
13
+
14
+ - `bundle-barrel-imports` - Import directly, avoid barrel files
15
+ - `bundle-dynamic-imports` - Use next/dynamic for heavy components
16
+ - `bundle-defer-third-party` - Load analytics/logging after hydration
17
+ - `bundle-conditional` - Load modules only when feature is activated
18
+ - `bundle-preload` - Preload on hover/focus for perceived speed
19
+
20
+ ### 3. Server-Side Performance (HIGH)
21
+
22
+ - `server-auth-actions` - Authenticate server actions like API routes
23
+ - `server-cache-react` - Use React.cache() for per-request deduplication
24
+ - `server-cache-lru` - Use LRU cache for cross-request caching
25
+ - `server-dedup-props` - Avoid duplicate serialization in RSC props
26
+ - `server-hoist-static-io` - Hoist static I/O (fonts, logos) to module level
27
+ - `server-serialization` - Minimize data passed to client components
28
+ - `server-parallel-fetching` - Restructure components to parallelize fetches
29
+ - `server-parallel-nested-fetching` - Chain nested fetches per item in Promise.all
30
+ - `server-after-nonblocking` - Use after() for non-blocking operations
31
+
32
+ ### 4. Client-Side Data Fetching (MEDIUM-HIGH)
33
+
34
+ - `client-swr-dedup` - Use SWR for automatic request deduplication
35
+ - `client-event-listeners` - Deduplicate global event listeners
36
+ - `client-passive-event-listeners` - Use passive listeners for scroll
37
+ - `client-localstorage-schema` - Version and minimize localStorage data
38
+
39
+ ### 5. Re-render Optimization (MEDIUM)
40
+
41
+ - `rerender-defer-reads` - Don't subscribe to state only used in callbacks
42
+ - `rerender-memo` - Extract expensive work into memoized components
43
+ - `rerender-memo-with-default-value` - Hoist default non-primitive props
44
+ - `rerender-dependencies` - Use primitive dependencies in effects
45
+ - `rerender-derived-state` - Subscribe to derived booleans, not raw values
46
+ - `rerender-derived-state-no-effect` - Derive state during render, not effects
47
+ - `rerender-functional-setstate` - Use functional setState for stable callbacks
48
+ - `rerender-lazy-state-init` - Pass function to useState for expensive values
49
+ - `rerender-simple-expression-in-memo` - Avoid memo for simple primitives
50
+ - `rerender-split-combined-hooks` - Split hooks with independent dependencies
51
+ - `rerender-move-effect-to-event` - Put interaction logic in event handlers
52
+ - `rerender-transitions` - Use startTransition for non-urgent updates
53
+ - `rerender-use-deferred-value` - Defer expensive renders to keep input responsive
54
+ - `rerender-use-ref-transient-values` - Use refs for transient frequent values
55
+ - `rerender-no-inline-components` - Don't define components inside components
56
+
57
+ ### 6. Rendering Performance (MEDIUM)
58
+
59
+ - `rendering-animate-svg-wrapper` - Animate div wrapper, not SVG element
60
+ - `rendering-content-visibility` - Use content-visibility for long lists
61
+ - `rendering-hoist-jsx` - Extract static JSX outside components
62
+ - `rendering-svg-precision` - Reduce SVG coordinate precision
63
+ - `rendering-hydration-no-flicker` - Use inline script for client-only data
64
+ - `rendering-hydration-suppress-warning` - Suppress expected mismatches
65
+ - `rendering-activity` - Use Activity component for show/hide
66
+ - `rendering-conditional-render` - Use ternary, not && for conditionals
67
+ - `rendering-usetransition-loading` - Prefer useTransition for loading state
68
+ - `rendering-resource-hints` - Use React DOM resource hints for preloading
69
+ - `rendering-script-defer-async` - Use defer or async on script tags
70
+
71
+ ### 7. JavaScript Performance (LOW-MEDIUM)
72
+
73
+ - `js-batch-dom-css` - Group CSS changes via classes or cssText
74
+ - `js-index-maps` - Build Map for repeated lookups
75
+ - `js-cache-property-access` - Cache object properties in loops
76
+ - `js-cache-function-results` - Cache function results in module-level Map
77
+ - `js-cache-storage` - Cache localStorage/sessionStorage reads
78
+ - `js-combine-iterations` - Combine multiple filter/map into one loop
79
+ - `js-length-check-first` - Check array length before expensive comparison
80
+ - `js-early-exit` - Return early from functions
81
+ - `js-hoist-regexp` - Hoist RegExp creation outside loops
82
+ - `js-min-max-loop` - Use loop for min/max instead of sort
83
+ - `js-set-map-lookups` - Use Set/Map for O(1) lookups
84
+ - `js-tosorted-immutable` - Use toSorted() for immutability
85
+ - `js-flatmap-filter` - Use flatMap to map and filter in one pass
86
+ - `js-request-idle-callback` - Defer non-critical work to browser idle time
87
+
88
+ ### 8. Advanced Patterns (LOW)
89
+
90
+ - `advanced-event-handler-refs` - Store event handlers in refs
91
+ - `advanced-init-once` - Initialize app once per app load
92
+ - `advanced-use-latest` - useLatest for stable callback refs