@exelalfanso/puppets-orchestration 0.1.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 (345) hide show
  1. package/.agents/architect.md +29 -0
  2. package/.agents/backend.md +33 -0
  3. package/.agents/debugger.md +29 -0
  4. package/.agents/explorer.md +29 -0
  5. package/.agents/frontend.md +33 -0
  6. package/.agents/orchestrator.md +35 -0
  7. package/.agents/reviewer.md +42 -0
  8. package/.agents/tester.md +29 -0
  9. package/.agents/worker-skills.md +24 -0
  10. package/AGENTS.md +33 -0
  11. package/README.md +150 -0
  12. package/bin/puppets.mjs +152 -0
  13. package/docs/README.md +64 -0
  14. package/docs/architecture/decisions/README.md +36 -0
  15. package/docs/architecture/overview.md +41 -0
  16. package/docs/engineering/conventions.md +30 -0
  17. package/docs/engineering/project-orchestration.md +118 -0
  18. package/docs/engineering/testing-strategy.md +41 -0
  19. package/docs/javascript-typescript-stack.md +59 -0
  20. package/docs/product/PRD.md +56 -0
  21. package/docs/requirements/SRS.md +35 -0
  22. package/package.json +20 -0
  23. package/skills/README.md +12 -0
  24. package/skills/be/backend-architect/SKILL.md +333 -0
  25. package/skills/be/backend-development-feature-development/SKILL.md +180 -0
  26. package/skills/be/backend-security-coder/SKILL.md +156 -0
  27. package/skills/be/nodejs-backend-patterns/SKILL.md +35 -0
  28. package/skills/be/nodejs-backend-patterns/resources/implementation-playbook.md +1019 -0
  29. package/skills/fe/frontend-design/LICENSE.txt +177 -0
  30. package/skills/fe/frontend-design/SKILL.md +71 -0
  31. package/skills/fe/web-design-guidelines/SKILL.md +39 -0
  32. package/skills/qa/ai-qa-review/SKILL.md +357 -0
  33. package/skills/qa/ai-qa-review/references/mutation-testing.md +38 -0
  34. package/skills/qa/ai-qa-review/references/smell-examples.md +232 -0
  35. package/skills/qa/ai-qa-review/references/testability-refactors.md +97 -0
  36. package/skills/qa/coverage-analysis/SKILL.md +308 -0
  37. package/skills/qa/coverage-analysis/references/ci-gating.md +132 -0
  38. package/skills/qa/coverage-analysis/references/mutation-testing.md +29 -0
  39. package/skills/qa/coverage-analysis/references/tool-config.md +195 -0
  40. package/skills/qa/qa-project-context/SKILL.md +289 -0
  41. package/skills/qa/qa-project-context/references/examples.md +237 -0
  42. package/skills/qa/release-readiness/SKILL.md +443 -0
  43. package/skills/qa/release-readiness/references/communication-templates.md +38 -0
  44. package/skills/qa/release-readiness/references/rollout-automation.md +47 -0
  45. package/skills/qa/risk-based-testing/SKILL.md +337 -0
  46. package/skills/qa/risk-based-testing/references/examples.md +81 -0
  47. package/skills/react/vercel-composition-patterns/AGENTS.md +946 -0
  48. package/skills/react/vercel-composition-patterns/README.md +60 -0
  49. package/skills/react/vercel-composition-patterns/SKILL.md +89 -0
  50. package/skills/react/vercel-composition-patterns/rules/_sections.md +29 -0
  51. package/skills/react/vercel-composition-patterns/rules/_template.md +24 -0
  52. package/skills/react/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  53. package/skills/react/vercel-composition-patterns/rules/architecture-compound-components.md +112 -0
  54. package/skills/react/vercel-composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  55. package/skills/react/vercel-composition-patterns/rules/patterns-explicit-variants.md +100 -0
  56. package/skills/react/vercel-composition-patterns/rules/react19-no-forwardref.md +42 -0
  57. package/skills/react/vercel-composition-patterns/rules/state-context-interface.md +191 -0
  58. package/skills/react/vercel-composition-patterns/rules/state-decouple-implementation.md +113 -0
  59. package/skills/react/vercel-composition-patterns/rules/state-lift-state.md +125 -0
  60. package/skills/react/vercel-react-best-practices/AGENTS.md +3810 -0
  61. package/skills/react/vercel-react-best-practices/README.md +123 -0
  62. package/skills/react/vercel-react-best-practices/SKILL.md +149 -0
  63. package/skills/react/vercel-react-best-practices/rules/_sections.md +46 -0
  64. package/skills/react/vercel-react-best-practices/rules/_template.md +28 -0
  65. package/skills/react/vercel-react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  66. package/skills/react/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  67. package/skills/react/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
  68. package/skills/react/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
  69. package/skills/react/vercel-react-best-practices/rules/async-api-routes.md +38 -0
  70. package/skills/react/vercel-react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  71. package/skills/react/vercel-react-best-practices/rules/async-defer-await.md +82 -0
  72. package/skills/react/vercel-react-best-practices/rules/async-dependencies.md +51 -0
  73. package/skills/react/vercel-react-best-practices/rules/async-parallel.md +28 -0
  74. package/skills/react/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
  75. package/skills/react/vercel-react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  76. package/skills/react/vercel-react-best-practices/rules/bundle-barrel-imports.md +60 -0
  77. package/skills/react/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
  78. package/skills/react/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
  79. package/skills/react/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  80. package/skills/react/vercel-react-best-practices/rules/bundle-preload.md +50 -0
  81. package/skills/react/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
  82. package/skills/react/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
  83. package/skills/react/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
  84. package/skills/react/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
  85. package/skills/react/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
  86. package/skills/react/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
  87. package/skills/react/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
  88. package/skills/react/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
  89. package/skills/react/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
  90. package/skills/react/vercel-react-best-practices/rules/js-early-exit.md +50 -0
  91. package/skills/react/vercel-react-best-practices/rules/js-flatmap-filter.md +60 -0
  92. package/skills/react/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
  93. package/skills/react/vercel-react-best-practices/rules/js-index-maps.md +37 -0
  94. package/skills/react/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
  95. package/skills/react/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
  96. package/skills/react/vercel-react-best-practices/rules/js-request-idle-callback.md +105 -0
  97. package/skills/react/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
  98. package/skills/react/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
  99. package/skills/react/vercel-react-best-practices/rules/rendering-activity.md +26 -0
  100. package/skills/react/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  101. package/skills/react/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
  102. package/skills/react/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
  103. package/skills/react/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  104. package/skills/react/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  105. package/skills/react/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  106. package/skills/react/vercel-react-best-practices/rules/rendering-resource-hints.md +85 -0
  107. package/skills/react/vercel-react-best-practices/rules/rendering-script-defer-async.md +68 -0
  108. package/skills/react/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
  109. package/skills/react/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  110. package/skills/react/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
  111. package/skills/react/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
  112. package/skills/react/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  113. package/skills/react/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
  114. package/skills/react/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
  115. package/skills/react/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  116. package/skills/react/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  117. package/skills/react/vercel-react-best-practices/rules/rerender-memo.md +44 -0
  118. package/skills/react/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  119. package/skills/react/vercel-react-best-practices/rules/rerender-no-inline-components.md +82 -0
  120. package/skills/react/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  121. package/skills/react/vercel-react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  122. package/skills/react/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
  123. package/skills/react/vercel-react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  124. package/skills/react/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  125. package/skills/react/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
  126. package/skills/react/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
  127. package/skills/react/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
  128. package/skills/react/vercel-react-best-practices/rules/server-cache-react.md +76 -0
  129. package/skills/react/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
  130. package/skills/react/vercel-react-best-practices/rules/server-hoist-static-io.md +149 -0
  131. package/skills/react/vercel-react-best-practices/rules/server-no-shared-module-state.md +50 -0
  132. package/skills/react/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
  133. package/skills/react/vercel-react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  134. package/skills/react/vercel-react-best-practices/rules/server-serialization.md +38 -0
  135. package/skills/vue/create-adaptable-composable/SKILL.md +76 -0
  136. package/skills/vue/vue-best-practices/SKILL.md +154 -0
  137. package/skills/vue/vue-best-practices/references/animation-class-based-technique.md +254 -0
  138. package/skills/vue/vue-best-practices/references/animation-state-driven-technique.md +291 -0
  139. package/skills/vue/vue-best-practices/references/component-async.md +97 -0
  140. package/skills/vue/vue-best-practices/references/component-data-flow.md +307 -0
  141. package/skills/vue/vue-best-practices/references/component-fallthrough-attrs.md +174 -0
  142. package/skills/vue/vue-best-practices/references/component-keep-alive.md +137 -0
  143. package/skills/vue/vue-best-practices/references/component-slots.md +216 -0
  144. package/skills/vue/vue-best-practices/references/component-suspense.md +228 -0
  145. package/skills/vue/vue-best-practices/references/component-teleport.md +108 -0
  146. package/skills/vue/vue-best-practices/references/component-transition-group.md +128 -0
  147. package/skills/vue/vue-best-practices/references/component-transition.md +125 -0
  148. package/skills/vue/vue-best-practices/references/composables.md +290 -0
  149. package/skills/vue/vue-best-practices/references/directives.md +162 -0
  150. package/skills/vue/vue-best-practices/references/perf-avoid-component-abstraction-in-lists.md +159 -0
  151. package/skills/vue/vue-best-practices/references/perf-v-once-v-memo-directives.md +182 -0
  152. package/skills/vue/vue-best-practices/references/perf-virtualize-large-lists.md +187 -0
  153. package/skills/vue/vue-best-practices/references/plugins.md +166 -0
  154. package/skills/vue/vue-best-practices/references/reactivity.md +344 -0
  155. package/skills/vue/vue-best-practices/references/render-functions.md +201 -0
  156. package/skills/vue/vue-best-practices/references/sfc.md +310 -0
  157. package/skills/vue/vue-best-practices/references/state-management.md +135 -0
  158. package/skills/vue/vue-best-practices/references/updated-hook-performance.md +187 -0
  159. package/skills/vue/vue-debug-guides/SKILL.md +202 -0
  160. package/skills/vue/vue-debug-guides/reference/animation-key-for-rerender.md +160 -0
  161. package/skills/vue/vue-debug-guides/reference/animation-transitiongroup-performance.md +241 -0
  162. package/skills/vue/vue-debug-guides/reference/async-component-error-handling.md +115 -0
  163. package/skills/vue/vue-debug-guides/reference/async-component-keepalive-ref-issue.md +112 -0
  164. package/skills/vue/vue-debug-guides/reference/async-component-suspense-control.md +84 -0
  165. package/skills/vue/vue-debug-guides/reference/async-component-vue-router.md +109 -0
  166. package/skills/vue/vue-debug-guides/reference/attrs-event-listener-merging.md +205 -0
  167. package/skills/vue/vue-debug-guides/reference/checkbox-true-false-value-form-submission.md +118 -0
  168. package/skills/vue/vue-debug-guides/reference/cleanup-side-effects.md +172 -0
  169. package/skills/vue/vue-debug-guides/reference/click-events-on-components.md +180 -0
  170. package/skills/vue/vue-debug-guides/reference/component-naming-conflicts.md +159 -0
  171. package/skills/vue/vue-debug-guides/reference/component-ref-requires-defineexpose.md +176 -0
  172. package/skills/vue/vue-debug-guides/reference/composable-avoid-hidden-side-effects.md +208 -0
  173. package/skills/vue/vue-debug-guides/reference/composable-call-location-restrictions.md +141 -0
  174. package/skills/vue/vue-debug-guides/reference/composable-naming-return-pattern.md +139 -0
  175. package/skills/vue/vue-debug-guides/reference/composable-tovalue-inside-watcheffect.md +182 -0
  176. package/skills/vue/vue-debug-guides/reference/composition-api-not-functional-programming.md +120 -0
  177. package/skills/vue/vue-debug-guides/reference/composition-api-script-setup-async-context.md +203 -0
  178. package/skills/vue/vue-debug-guides/reference/composition-api-vs-react-hooks-differences.md +156 -0
  179. package/skills/vue/vue-debug-guides/reference/computed-array-mutation.md +148 -0
  180. package/skills/vue/vue-debug-guides/reference/computed-conditional-dependencies.md +147 -0
  181. package/skills/vue/vue-debug-guides/reference/computed-no-parameters.md +159 -0
  182. package/skills/vue/vue-debug-guides/reference/computed-no-side-effects.md +107 -0
  183. package/skills/vue/vue-debug-guides/reference/computed-return-value-readonly.md +160 -0
  184. package/skills/vue/vue-debug-guides/reference/configure-app-before-mount.md +89 -0
  185. package/skills/vue/vue-debug-guides/reference/declare-emits-for-documentation.md +212 -0
  186. package/skills/vue/vue-debug-guides/reference/define-expose-before-await.md +192 -0
  187. package/skills/vue/vue-debug-guides/reference/define-model-default-value-sync.md +139 -0
  188. package/skills/vue/vue-debug-guides/reference/defineEmits-must-be-top-level.md +164 -0
  189. package/skills/vue/vue-debug-guides/reference/defineEmits-no-runtime-and-type-mixed.md +170 -0
  190. package/skills/vue/vue-debug-guides/reference/definemodel-object-mutation-no-emit.md +148 -0
  191. package/skills/vue/vue-debug-guides/reference/dom-update-timing-nexttick.md +90 -0
  192. package/skills/vue/vue-debug-guides/reference/dynamic-argument-constraints.md +146 -0
  193. package/skills/vue/vue-debug-guides/reference/dynamic-component-registration-vite.md +147 -0
  194. package/skills/vue/vue-debug-guides/reference/event-modifier-order-matters.md +101 -0
  195. package/skills/vue/vue-debug-guides/reference/exact-modifier-for-precise-shortcuts.md +155 -0
  196. package/skills/vue/vue-debug-guides/reference/fallthrough-attrs-overwrite-vue3.md +159 -0
  197. package/skills/vue/vue-debug-guides/reference/in-dom-template-parsing-caveats.md +149 -0
  198. package/skills/vue/vue-debug-guides/reference/inheritattrs-false-for-wrapper-components.md +230 -0
  199. package/skills/vue/vue-debug-guides/reference/keepalive-router-nested-double-mount.md +222 -0
  200. package/skills/vue/vue-debug-guides/reference/keepalive-transition-memory-leak.md +144 -0
  201. package/skills/vue/vue-debug-guides/reference/keyup-modifier-timing.md +137 -0
  202. package/skills/vue/vue-debug-guides/reference/lifecycle-dom-access-timing.md +216 -0
  203. package/skills/vue/vue-debug-guides/reference/lifecycle-hooks-synchronous-registration.md +156 -0
  204. package/skills/vue/vue-debug-guides/reference/lifecycle-ssr-awareness.md +184 -0
  205. package/skills/vue/vue-debug-guides/reference/local-components-not-in-descendants.md +151 -0
  206. package/skills/vue/vue-debug-guides/reference/mount-return-value.md +88 -0
  207. package/skills/vue/vue-debug-guides/reference/multi-root-component-class-attrs.md +93 -0
  208. package/skills/vue/vue-debug-guides/reference/native-event-collision-with-emits.md +162 -0
  209. package/skills/vue/vue-debug-guides/reference/no-passive-with-prevent.md +141 -0
  210. package/skills/vue/vue-debug-guides/reference/no-v-if-with-v-for.md +136 -0
  211. package/skills/vue/vue-debug-guides/reference/perf-computed-object-stability.md +157 -0
  212. package/skills/vue/vue-debug-guides/reference/perf-props-stability-update-optimization.md +140 -0
  213. package/skills/vue/vue-debug-guides/reference/plugin-global-properties-sparingly.md +109 -0
  214. package/skills/vue/vue-debug-guides/reference/plugin-install-before-mount.md +124 -0
  215. package/skills/vue/vue-debug-guides/reference/plugin-prefer-provide-inject-over-global-properties.md +120 -0
  216. package/skills/vue/vue-debug-guides/reference/plugin-typescript-type-augmentation.md +157 -0
  217. package/skills/vue/vue-debug-guides/reference/prop-defineprops-scope-limitation.md +161 -0
  218. package/skills/vue/vue-debug-guides/reference/provide-inject-debugging-challenges.md +203 -0
  219. package/skills/vue/vue-debug-guides/reference/provide-inject-default-value-factory.md +244 -0
  220. package/skills/vue/vue-debug-guides/reference/provide-inject-reactivity-not-automatic.md +226 -0
  221. package/skills/vue/vue-debug-guides/reference/provide-inject-synchronous-setup.md +235 -0
  222. package/skills/vue/vue-debug-guides/reference/reactive-destructuring.md +89 -0
  223. package/skills/vue/vue-debug-guides/reference/reactivity-debugging-hooks.md +132 -0
  224. package/skills/vue/vue-debug-guides/reference/reactivity-markraw-for-non-reactive.md +149 -0
  225. package/skills/vue/vue-debug-guides/reference/reactivity-proxy-identity-hazard.md +96 -0
  226. package/skills/vue/vue-debug-guides/reference/reactivity-same-tick-batching.md +166 -0
  227. package/skills/vue/vue-debug-guides/reference/ref-value-access.md +61 -0
  228. package/skills/vue/vue-debug-guides/reference/refs-in-collections-need-value.md +81 -0
  229. package/skills/vue/vue-debug-guides/reference/render-function-avoid-internal-vnode-properties.md +151 -0
  230. package/skills/vue/vue-debug-guides/reference/render-function-vnodes-must-be-unique.md +133 -0
  231. package/skills/vue/vue-debug-guides/reference/rendering-render-function-h-import-vue3.md +148 -0
  232. package/skills/vue/vue-debug-guides/reference/rendering-render-function-return-from-setup.md +148 -0
  233. package/skills/vue/vue-debug-guides/reference/rendering-render-function-slots-as-functions.md +168 -0
  234. package/skills/vue/vue-debug-guides/reference/rendering-resolve-component-for-string-names.md +231 -0
  235. package/skills/vue/vue-debug-guides/reference/select-initial-value-ios-bug.md +91 -0
  236. package/skills/vue/vue-debug-guides/reference/self-referencing-component-name.md +157 -0
  237. package/skills/vue/vue-debug-guides/reference/sfc-named-exports-forbidden.md +184 -0
  238. package/skills/vue/vue-debug-guides/reference/sfc-scoped-css-child-component-styling.md +156 -0
  239. package/skills/vue/vue-debug-guides/reference/sfc-scoped-css-dynamic-content.md +193 -0
  240. package/skills/vue/vue-debug-guides/reference/sfc-scoped-css-slot-content.md +242 -0
  241. package/skills/vue/vue-debug-guides/reference/sfc-script-setup-reactivity.md +195 -0
  242. package/skills/vue/vue-debug-guides/reference/slot-forwarding-to-child-components.md +143 -0
  243. package/skills/vue/vue-debug-guides/reference/slot-implicit-default-content.md +155 -0
  244. package/skills/vue/vue-debug-guides/reference/slot-name-reserved-prop.md +109 -0
  245. package/skills/vue/vue-debug-guides/reference/slot-named-scoped-explicit-default.md +95 -0
  246. package/skills/vue/vue-debug-guides/reference/slot-render-scope-parent-only.md +135 -0
  247. package/skills/vue/vue-debug-guides/reference/slot-v-slot-on-components-or-templates-only.md +122 -0
  248. package/skills/vue/vue-debug-guides/reference/ssr-hydration-mismatch-causes.md +280 -0
  249. package/skills/vue/vue-debug-guides/reference/ssr-platform-specific-apis.md +256 -0
  250. package/skills/vue/vue-debug-guides/reference/state-ssr-cross-request-pollution.md +276 -0
  251. package/skills/vue/vue-debug-guides/reference/suspense-no-builtin-error-handling.md +127 -0
  252. package/skills/vue/vue-debug-guides/reference/suspense-ssr-hydration-issues.md +159 -0
  253. package/skills/vue/vue-debug-guides/reference/tailwind-dynamic-class-generation.md +144 -0
  254. package/skills/vue/vue-debug-guides/reference/teleport-scoped-styles-limitation.md +191 -0
  255. package/skills/vue/vue-debug-guides/reference/teleport-ssr-hydration.md +152 -0
  256. package/skills/vue/vue-debug-guides/reference/teleport-target-must-exist.md +113 -0
  257. package/skills/vue/vue-debug-guides/reference/template-expressions-restrictions.md +114 -0
  258. package/skills/vue/vue-debug-guides/reference/template-functions-no-side-effects.md +187 -0
  259. package/skills/vue/vue-debug-guides/reference/template-ref-null-with-v-if.md +123 -0
  260. package/skills/vue/vue-debug-guides/reference/template-ref-unwrapping-top-level.md +104 -0
  261. package/skills/vue/vue-debug-guides/reference/template-ref-v-for-order.md +172 -0
  262. package/skills/vue/vue-debug-guides/reference/textarea-no-interpolation.md +72 -0
  263. package/skills/vue/vue-debug-guides/reference/transition-group-flip-inline-elements.md +152 -0
  264. package/skills/vue/vue-debug-guides/reference/transition-group-move-animation-position-absolute.md +130 -0
  265. package/skills/vue/vue-debug-guides/reference/transition-group-no-default-wrapper-vue3.md +152 -0
  266. package/skills/vue/vue-debug-guides/reference/transition-js-hooks-done-callback.md +251 -0
  267. package/skills/vue/vue-debug-guides/reference/transition-nested-duration.md +182 -0
  268. package/skills/vue/vue-debug-guides/reference/transition-reusable-scoped-style.md +245 -0
  269. package/skills/vue/vue-debug-guides/reference/transition-router-view-appear.md +193 -0
  270. package/skills/vue/vue-debug-guides/reference/transition-type-when-mixed.md +172 -0
  271. package/skills/vue/vue-debug-guides/reference/transition-unmount-hook-timing.md +149 -0
  272. package/skills/vue/vue-debug-guides/reference/ts-defineprops-boolean-default-false.md +225 -0
  273. package/skills/vue/vue-debug-guides/reference/ts-defineprops-imported-types-limitations.md +281 -0
  274. package/skills/vue/vue-debug-guides/reference/ts-event-handler-explicit-typing.md +213 -0
  275. package/skills/vue/vue-debug-guides/reference/ts-reactive-no-generic-argument.md +196 -0
  276. package/skills/vue/vue-debug-guides/reference/ts-shallowref-for-dynamic-components.md +218 -0
  277. package/skills/vue/vue-debug-guides/reference/ts-template-ref-null-handling.md +249 -0
  278. package/skills/vue/vue-debug-guides/reference/ts-template-type-casting.md +214 -0
  279. package/skills/vue/vue-debug-guides/reference/ts-withdefaults-mutable-factory-function.md +171 -0
  280. package/skills/vue/vue-debug-guides/reference/undeclared-emits-double-firing.md +195 -0
  281. package/skills/vue/vue-debug-guides/reference/use-template-ref-vue35.md +158 -0
  282. package/skills/vue/vue-debug-guides/reference/v-else-must-follow-v-if.md +136 -0
  283. package/skills/vue/vue-debug-guides/reference/v-for-component-props.md +95 -0
  284. package/skills/vue/vue-debug-guides/reference/v-for-computed-reverse-sort.md +86 -0
  285. package/skills/vue/vue-debug-guides/reference/v-for-key-attribute.md +90 -0
  286. package/skills/vue/vue-debug-guides/reference/v-for-range-starts-at-one.md +66 -0
  287. package/skills/vue/vue-debug-guides/reference/v-if-null-check-order.md +171 -0
  288. package/skills/vue/vue-debug-guides/reference/v-model-ignores-html-attributes.md +83 -0
  289. package/skills/vue/vue-debug-guides/reference/v-model-ime-composition.md +83 -0
  290. package/skills/vue/vue-debug-guides/reference/v-model-number-modifier-behavior.md +124 -0
  291. package/skills/vue/vue-debug-guides/reference/v-show-template-limitation.md +124 -0
  292. package/skills/vue/vue-debug-guides/reference/watch-async-cleanup.md +180 -0
  293. package/skills/vue/vue-debug-guides/reference/watch-async-creation-memory-leak.md +176 -0
  294. package/skills/vue/vue-debug-guides/reference/watch-deep-same-object-reference.md +165 -0
  295. package/skills/vue/vue-debug-guides/reference/watch-flush-timing.md +189 -0
  296. package/skills/vue/vue-debug-guides/reference/watch-reactive-property-getter.md +108 -0
  297. package/skills/vue/vue-debug-guides/reference/watcheffect-async-dependency-tracking.md +173 -0
  298. package/skills/vue/vue-debug-guides/reference/watcheffect-flush-post-for-refs.md +176 -0
  299. package/skills/vue/vue-jsx-best-practices/SKILL.md +12 -0
  300. package/skills/vue/vue-jsx-best-practices/reference/render-function-jsx-vue-vs-react.md +141 -0
  301. package/skills/vue/vue-options-api-best-practices/SKILL.md +23 -0
  302. package/skills/vue/vue-options-api-best-practices/reference/no-arrow-functions-in-lifecycle-hooks.md +95 -0
  303. package/skills/vue/vue-options-api-best-practices/reference/no-arrow-functions-in-methods.md +68 -0
  304. package/skills/vue/vue-options-api-best-practices/reference/stateful-methods-lifecycle.md +61 -0
  305. package/skills/vue/vue-options-api-best-practices/reference/ts-options-api-arrow-functions-validators.md +141 -0
  306. package/skills/vue/vue-options-api-best-practices/reference/ts-options-api-computed-return-types.md +192 -0
  307. package/skills/vue/vue-options-api-best-practices/reference/ts-options-api-proptype-complex-types.md +212 -0
  308. package/skills/vue/vue-options-api-best-practices/reference/ts-options-api-provide-inject-limitations.md +135 -0
  309. package/skills/vue/vue-options-api-best-practices/reference/ts-options-api-type-event-handlers.md +202 -0
  310. package/skills/vue/vue-options-api-best-practices/reference/ts-options-api-use-definecomponent.md +172 -0
  311. package/skills/vue/vue-options-api-best-practices/reference/ts-strict-mode-options-api.md +197 -0
  312. package/skills/vue/vue-pinia-best-practices/SKILL.md +21 -0
  313. package/skills/vue/vue-pinia-best-practices/reference/pinia-no-active-pinia-error.md +248 -0
  314. package/skills/vue/vue-pinia-best-practices/reference/pinia-setup-store-return-all-state.md +227 -0
  315. package/skills/vue/vue-pinia-best-practices/reference/pinia-store-destructuring-breaks-reactivity.md +193 -0
  316. package/skills/vue/vue-pinia-best-practices/reference/state-url-for-ephemeral-filters.md +238 -0
  317. package/skills/vue/vue-pinia-best-practices/reference/state-use-pinia-for-large-apps.md +262 -0
  318. package/skills/vue/vue-pinia-best-practices/reference/store-method-binding-parentheses.md +191 -0
  319. package/skills/vue/vue-router-best-practices/SKILL.md +23 -0
  320. package/skills/vue/vue-router-best-practices/reference/router-beforeenter-no-param-trigger.md +167 -0
  321. package/skills/vue/vue-router-best-practices/reference/router-beforerouteenter-no-this.md +176 -0
  322. package/skills/vue/vue-router-best-practices/reference/router-guard-async-await-pattern.md +227 -0
  323. package/skills/vue/vue-router-best-practices/reference/router-navigation-guard-infinite-loop.md +187 -0
  324. package/skills/vue/vue-router-best-practices/reference/router-navigation-guard-next-deprecated.md +150 -0
  325. package/skills/vue/vue-router-best-practices/reference/router-param-change-no-lifecycle.md +181 -0
  326. package/skills/vue/vue-router-best-practices/reference/router-simple-routing-cleanup.md +209 -0
  327. package/skills/vue/vue-router-best-practices/reference/router-use-vue-router-for-production.md +183 -0
  328. package/skills/vue/vue-testing-best-practices/SKILL.md +29 -0
  329. package/skills/vue/vue-testing-best-practices/reference/async-component-testing.md +163 -0
  330. package/skills/vue/vue-testing-best-practices/reference/teleport-testing-complexity.md +158 -0
  331. package/skills/vue/vue-testing-best-practices/reference/testing-async-await-flushpromises.md +175 -0
  332. package/skills/vue/vue-testing-best-practices/reference/testing-browser-vs-node-runners.md +208 -0
  333. package/skills/vue/vue-testing-best-practices/reference/testing-component-blackbox-approach.md +144 -0
  334. package/skills/vue/vue-testing-best-practices/reference/testing-composables-helper-wrapper.md +238 -0
  335. package/skills/vue/vue-testing-best-practices/reference/testing-e2e-playwright-recommended.md +242 -0
  336. package/skills/vue/vue-testing-best-practices/reference/testing-no-snapshot-only.md +197 -0
  337. package/skills/vue/vue-testing-best-practices/reference/testing-pinia-store-setup.md +228 -0
  338. package/skills/vue/vue-testing-best-practices/reference/testing-suspense-async-components.md +229 -0
  339. package/skills/vue/vue-testing-best-practices/reference/testing-vitest-recommended-for-vue.md +204 -0
  340. package/skills/worker/README.md +10 -0
  341. package/skills/worker/caveman/README.md +48 -0
  342. package/skills/worker/caveman/SKILL.md +88 -0
  343. package/skills/worker/ponytail/SKILL.md +120 -0
  344. package/skills-lock.json +131 -0
  345. package/templates/state.md +16 -0
@@ -0,0 +1,132 @@
1
+ # Coverage as CI Gate
2
+
3
+ Workflow and script code for PR coverage diffs, threshold configuration, and the ratchet pattern. The decision prose lives in `SKILL.md`.
4
+
5
+ ## Coverage Diff on PRs
6
+
7
+ Show coverage change per PR so reviewers see the impact of each change.
8
+
9
+ ```yaml
10
+ # GitHub Actions: coverage diff comment
11
+ - name: Run tests with coverage
12
+ run: npm run test:coverage
13
+
14
+ - name: Coverage Report
15
+ uses: davelosert/vitest-coverage-report-action@v2
16
+ if: github.event_name == 'pull_request'
17
+ with:
18
+ json-summary-path: coverage/coverage-summary.json
19
+ json-final-path: coverage/coverage-final.json
20
+ vite-config-path: vitest.config.ts
21
+ ```
22
+
23
+ Alternative: use `marocchino/sticky-pull-request-comment@v2` with a script that reads `coverage-summary.json`, filters to changed files (via `git diff --name-only origin/main...HEAD`), and renders a markdown table showing per-file line and branch coverage.
24
+
25
+ ## Threshold Configuration
26
+
27
+ **Global threshold (minimum for the entire project):**
28
+
29
+ ```typescript
30
+ // vitest.config.ts
31
+ coverage: {
32
+ thresholds: {
33
+ lines: 80,
34
+ branches: 80,
35
+ functions: 80,
36
+ statements: 80,
37
+ },
38
+ }
39
+ ```
40
+
41
+ **Per-directory thresholds (stricter for critical code):**
42
+
43
+ ```typescript
44
+ // vitest.config.ts
45
+ coverage: {
46
+ thresholds: {
47
+ // Global baseline
48
+ lines: 75,
49
+ branches: 75,
50
+
51
+ // Stricter for critical paths
52
+ "src/payments/**": { lines: 95, branches: 90 },
53
+ "src/auth/**": { lines: 90, branches: 85 },
54
+ "src/utils/**": { lines: 80, branches: 80 },
55
+ },
56
+ }
57
+ ```
58
+
59
+ **Jest per-file thresholds:**
60
+
61
+ ```javascript
62
+ // jest.config.js
63
+ module.exports = {
64
+ coverageThreshold: {
65
+ global: { branches: 75, functions: 75, lines: 75, statements: 75 },
66
+ "./src/payments/": { branches: 90, functions: 90, lines: 95, statements: 95 },
67
+ "./src/auth/": { branches: 85, functions: 85, lines: 90, statements: 90 },
68
+ },
69
+ };
70
+ ```
71
+
72
+ ## Ratchet Pattern
73
+
74
+ Never let coverage decrease. Record the current level as the minimum and update it upward when coverage improves.
75
+
76
+ ```typescript
77
+ // scripts/coverage-ratchet.ts
78
+ import fs from "fs";
79
+ import coverageSummary from "../coverage/coverage-summary.json";
80
+
81
+ const RATCHET_FILE = ".coverage-ratchet.json";
82
+
83
+ interface Ratchet {
84
+ lines: number;
85
+ branches: number;
86
+ functions: number;
87
+ statements: number;
88
+ updatedAt: string;
89
+ }
90
+
91
+ // Read current ratchet or initialize
92
+ let ratchet: Ratchet;
93
+ try {
94
+ ratchet = JSON.parse(fs.readFileSync(RATCHET_FILE, "utf-8"));
95
+ } catch {
96
+ ratchet = { lines: 0, branches: 0, functions: 0, statements: 0, updatedAt: "" };
97
+ }
98
+
99
+ const current = (coverageSummary as any).total;
100
+ const metrics = ["lines", "branches", "functions", "statements"] as const;
101
+ let failed = false;
102
+
103
+ for (const metric of metrics) {
104
+ const currentPct = current[metric].pct;
105
+ const ratchetPct = ratchet[metric];
106
+
107
+ if (currentPct < ratchetPct) {
108
+ console.error(
109
+ `FAIL: ${metric} coverage dropped from ${ratchetPct}% to ${currentPct}% (delta: ${(currentPct - ratchetPct).toFixed(1)}%)`
110
+ );
111
+ failed = true;
112
+ } else if (currentPct > ratchetPct) {
113
+ console.log(`IMPROVED: ${metric} coverage increased from ${ratchetPct}% to ${currentPct}%`);
114
+ ratchet[metric] = Math.floor(currentPct); // Floor to avoid ratcheting on decimals
115
+ } else {
116
+ console.log(`STABLE: ${metric} coverage at ${currentPct}%`);
117
+ }
118
+ }
119
+
120
+ if (failed) {
121
+ console.error("\nCoverage ratchet failed. Coverage must not decrease.");
122
+ console.error("If this is intentional (e.g., removing dead code), update .coverage-ratchet.json manually.");
123
+ process.exit(1);
124
+ }
125
+
126
+ // Update ratchet file
127
+ ratchet.updatedAt = new Date().toISOString();
128
+ fs.writeFileSync(RATCHET_FILE, JSON.stringify(ratchet, null, 2) + "\n");
129
+ console.log(`\nRatchet updated: ${JSON.stringify(ratchet)}`);
130
+ ```
131
+
132
+ Commit `.coverage-ratchet.json` to the repo (e.g., `{ "lines": 82, "branches": 78, ... }`). In CI, run the ratchet script after tests. On main branch merges, auto-commit the updated ratchet file if coverage improved.
@@ -0,0 +1,29 @@
1
+ # Mutation Testing
2
+
3
+ Stryker (JS/TS) and mutmut (Python) configuration. The targeting strategy and how to read the score live in `SKILL.md`.
4
+
5
+ ## Stryker (JS/TS)
6
+
7
+ ```json
8
+ // stryker.config.json
9
+ {
10
+ "$schema": "./node_modules/@stryker-mutator/core/schema/stryker-schema.json",
11
+ "testRunner": "vitest",
12
+ "coverageAnalysis": "perTest",
13
+ "incremental": true,
14
+ "incrementalFile": ".stryker-tmp/incremental.json",
15
+ "mutate": ["src/**/*.ts"],
16
+ "thresholds": { "high": 80, "low": 60, "break": 50 }
17
+ }
18
+ ```
19
+
20
+ Run on PR-changed files only with `--mutate '$(git diff --name-only origin/main...HEAD | grep "src/.*\.ts")'`. Pair `incremental: true` with the JSON cache so consecutive runs only re-mutate touched files.
21
+
22
+ ## mutmut (Python)
23
+
24
+ ```bash
25
+ mutmut run --paths-to-mutate=src/
26
+ mutmut results
27
+ ```
28
+
29
+ mutmut 3.x is a from-scratch rewrite (still active 2026); pin via `pip install mutmut==3.*`.
@@ -0,0 +1,195 @@
1
+ # Coverage Tool Configuration
2
+
3
+ Full config for Vitest (V8/Istanbul), the c8 CLI (non-Vitest), nyc, Jest, and coverage.py. The decision prose and Node version notes live in `SKILL.md`.
4
+
5
+ ## Vitest — V8 provider (default)
6
+
7
+ V8 coverage is built into the V8 engine and does not instrument source code, so it is faster than Istanbul. For a **Vitest** project install the provider package — `@vitest/coverage-v8` — NOT `c8`. (c8 is the standalone CLI for non-Vitest runners; see below.)
8
+
9
+ ```bash
10
+ npm i -D @vitest/coverage-v8 # Node 20+ baseline
11
+ # Maps poorly through your bundler? swap to: npm i -D @vitest/coverage-istanbul
12
+ ```
13
+
14
+ ```json
15
+ // package.json
16
+ {
17
+ "scripts": {
18
+ "test": "vitest run",
19
+ "test:coverage": "vitest run --coverage"
20
+ }
21
+ }
22
+ ```
23
+
24
+ ```typescript
25
+ // vitest.config.ts
26
+ import { defineConfig } from "vitest/config";
27
+
28
+ export default defineConfig({
29
+ test: {
30
+ coverage: {
31
+ provider: "v8", // or "istanbul" — install @vitest/coverage-istanbul
32
+ reporter: ["text", "html", "lcov", "json-summary"],
33
+ reportsDirectory: "./coverage",
34
+ include: ["src/**/*.ts"],
35
+ exclude: [
36
+ "src/**/*.test.ts",
37
+ "src/**/*.spec.ts",
38
+ "src/**/*.d.ts",
39
+ "src/**/index.ts", // Barrel exports
40
+ "src/**/types.ts", // Type-only files
41
+ "src/**/*.stories.ts", // Storybook
42
+ "src/generated/**", // Generated code
43
+ ],
44
+ thresholds: {
45
+ lines: 80,
46
+ branches: 80,
47
+ functions: 80,
48
+ statements: 80,
49
+ },
50
+ },
51
+ },
52
+ });
53
+ ```
54
+
55
+ ## c8 CLI — for non-Vitest Node runners
56
+
57
+ For `node:test`, plain mocha, or any runner without its own coverage provider, `c8` wraps the same V8 coverage data as a CLI. Do NOT install c8 in a Vitest project — Vitest's V8 support comes from `@vitest/coverage-v8`.
58
+
59
+ ```bash
60
+ npm i -D c8@^11 # current major; c8 11 supports Node >=12
61
+ ```
62
+
63
+ ```jsonc
64
+ // .c8rc.json (or "c8" key in package.json)
65
+ {
66
+ "reporter": ["text", "html", "lcov", "json-summary"],
67
+ "include": ["src/**/*.ts"],
68
+ "exclude": ["src/**/*.test.ts", "src/**/*.d.ts", "src/**/index.ts", "src/generated/**"],
69
+ "check-coverage": true,
70
+ "branches": 80,
71
+ "lines": 80,
72
+ "functions": 80,
73
+ "statements": 80
74
+ }
75
+ ```
76
+
77
+ ```bash
78
+ c8 node --test # run node:test under coverage
79
+ c8 mocha # or wrap any runner
80
+ ```
81
+
82
+ ## Istanbul / nyc (JavaScript/TypeScript)
83
+
84
+ Istanbul instruments source code for coverage tracking. Slower than V8 but maps more reliably through transpilers and bundlers.
85
+
86
+ ```bash
87
+ npm i -D nyc@^18 # nyc 18 requires Node 20 || >= 22; pin nyc@^17 to stay on Node 18
88
+ ```
89
+
90
+ ```json
91
+ // .nycrc.json
92
+ {
93
+ "all": true,
94
+ "include": ["src/**/*.ts"],
95
+ "exclude": [
96
+ "src/**/*.test.ts",
97
+ "src/**/*.spec.ts",
98
+ "src/**/*.d.ts",
99
+ "src/**/index.ts",
100
+ "src/generated/**"
101
+ ],
102
+ "reporter": ["text", "html", "lcov", "json-summary"],
103
+ "report-dir": "./coverage",
104
+ "check-coverage": true,
105
+ "branches": 80,
106
+ "lines": 80,
107
+ "functions": 80,
108
+ "statements": 80,
109
+ "watermarks": {
110
+ "lines": [70, 90],
111
+ "functions": [70, 90],
112
+ "branches": [70, 90],
113
+ "statements": [70, 90]
114
+ }
115
+ }
116
+ ```
117
+
118
+ ## Jest
119
+
120
+ Jest ships coverage built in — no extra install. Set `coverageProvider` to `"v8"` (faster, no Babel transform) or `"babel"` (Istanbul-based; use when V8 maps poorly through your transform).
121
+
122
+ ```json
123
+ // package.json (with Jest)
124
+ {
125
+ "scripts": {
126
+ "test:coverage": "jest --coverage"
127
+ },
128
+ "jest": {
129
+ "coverageProvider": "v8",
130
+ "collectCoverageFrom": [
131
+ "src/**/*.ts",
132
+ "!src/**/*.{test,spec,d}.ts",
133
+ "!src/**/index.ts",
134
+ "!src/generated/**"
135
+ ],
136
+ "coverageThreshold": {
137
+ "global": {
138
+ "branches": 80,
139
+ "functions": 80,
140
+ "lines": 80,
141
+ "statements": 80
142
+ }
143
+ }
144
+ }
145
+ }
146
+ ```
147
+
148
+ ## coverage.py (Python)
149
+
150
+ ```bash
151
+ pip install pytest-cov # current coverage.py 7.14.x
152
+ ```
153
+
154
+ > coverage.py 7.13.0 added `.coveragerc.toml` as a TOML-first standalone config — prefer it for new Python projects when you want config separated from `pyproject.toml`. 7.12.0 split statements vs branches totals in HTML and JSON reports.
155
+
156
+ ```toml
157
+ # pyproject.toml (or .coveragerc.toml in 7.13+)
158
+ [tool.coverage.run]
159
+ source = ["src"]
160
+ branch = true
161
+ omit = [
162
+ "src/**/test_*.py",
163
+ "src/**/conftest.py",
164
+ "src/**/__init__.py",
165
+ "src/generated/*",
166
+ ]
167
+
168
+ [tool.coverage.report]
169
+ fail_under = 80
170
+ show_missing = true
171
+ skip_covered = true
172
+ precision = 1
173
+ exclude_lines = [
174
+ "pragma: no cover",
175
+ "if TYPE_CHECKING:",
176
+ "if __name__ == .__main__.",
177
+ "raise NotImplementedError",
178
+ "@overload",
179
+ "\\.\\.\\.", # Ellipsis in abstract methods
180
+ ]
181
+
182
+ [tool.coverage.html]
183
+ directory = "coverage/html"
184
+
185
+ [tool.coverage.xml]
186
+ output = "coverage/coverage.xml"
187
+ ```
188
+
189
+ ```bash
190
+ # Run tests with coverage
191
+ pytest --cov=src --cov-report=term-missing --cov-report=html --cov-report=xml
192
+
193
+ # Fail if coverage drops below threshold
194
+ pytest --cov=src --cov-fail-under=80
195
+ ```
@@ -0,0 +1,289 @@
1
+ ---
2
+ name: qa-project-context
3
+ description: >-
4
+ Create and fill .agents/qa-project-context.md with the project's tech stack, test
5
+ frameworks, CI/CD pipeline, environments, quality goals, risk areas, team structure,
6
+ and conventions. This is the one file every other QA skill reads first, so they skip
7
+ redundant discovery and give context-aware advice.
8
+ Use when: "set up QA context," "configure testing," "initialize project," first use of any QA skill.
9
+ Not for: bootstrapping a brand-new project's QA end-to-end — use qa-start (which calls this skill as its first step).
10
+ Related: qa-start, risk-based-testing, test-strategy, qa-metrics, playwright-automation.
11
+ license: MIT
12
+ metadata:
13
+ author: kindlmann
14
+ version: "2.0"
15
+ category: foundation
16
+ ---
17
+
18
+ <objective>
19
+ This skill writes the single file every other QA skill reads. Without it, each skill
20
+ re-asks "what framework? what CI? where do tests live?" from scratch and gives generic
21
+ advice. It produces `.agents/qa-project-context.md` in the project root, capturing product,
22
+ tech stack, test stack, CI/CD, environments, quality goals, risk areas, team, and
23
+ conventions — with no `[bracketed placeholders]` left behind.
24
+ </objective>
25
+
26
+ Downstream skills consume specific sections: Risk Areas feeds `risk-based-testing` and
27
+ `test-strategy`; Conventions → Selectors feeds `playwright-automation` and `test-reliability`;
28
+ Quality Goals feeds `qa-metrics`; Tech Stack feeds every automation skill. Fill those sections
29
+ well and the rest of the library gets sharper for free.
30
+
31
+ ## Discovery Questions
32
+
33
+ First, check whether `.agents/qa-project-context.md` already exists — if it does, read it and
34
+ skip every section already filled (no `[brackets]`). Then scan the repo for config files (see
35
+ Codebase Detection) and present detected values for confirmation rather than asking blind.
36
+ Walk the remaining questions **section by section**, never all at once.
37
+
38
+ ### Product
39
+ - What is the product called, and what does it do in one sentence?
40
+ - What type is it? (SaaS, e-commerce, media, mobile app, API service, internal tool) — changes which flows matter.
41
+ - What are the production, staging, and development URLs?
42
+ - What are the 5–10 most critical user journeys? ("If this breaks, we get paged at 2am.") This list drives every other skill's coverage priorities.
43
+
44
+ ### Tech Stack
45
+ - Frontend framework and language? Backend framework, language, and API style (REST, GraphQL, tRPC, gRPC)?
46
+ - Database, cache layer, ORM? Hosting, CDN, monitoring?
47
+ - Monorepo? If yes, list each app separately (see Monorepo note) — sharding and detection differ.
48
+
49
+ ### Test Stack
50
+ - E2E tests today? Framework, config location, test directory. Same for unit, API, visual, performance.
51
+ - If a framework is detected from config files, populate Test Stack with its name + version + path — don't re-ask.
52
+ - Zero test infrastructure? That's a valid answer; record "None selected yet" and note a default (see Core Principle 3).
53
+
54
+ ### CI/CD
55
+ - Platform? When do tests run (every push, PR only, nightly, manual)? Sharding/parallelism?
56
+ - What blocks a deploy, and what artifacts are saved (screenshots, reports, coverage)?
57
+
58
+ ### Environments
59
+ - How many environments, with URLs? How close is staging to production (infra, data shape, third-party integrations)?
60
+ - Mock services or real APIs in development? — environment parity drives test reliability.
61
+
62
+ ### Quality Goals
63
+ - Coverage targets today? Flake tolerance? Suite-duration budgets? Metrics tracked or wanted?
64
+ - No targets yet? Suggest realistic ones by maturity (see Quality Goals section).
65
+
66
+ ### Risk Areas
67
+ - Which parts cause the most production incidents? Which integrations are flakiest (payment, email, third-party APIs)?
68
+ - Where is churn high and coverage low? Score everything with Impact × Likelihood (see Risk Areas section).
69
+
70
+ ### Team
71
+ - How many QA engineers, and their specializations? Developer-to-QA ratio? Methodology (Scrum, Kanban, Shape Up)?
72
+ - When does QA engage (shift-left during spec, or after dev)? — sets the automation ownership model.
73
+
74
+ ### Conventions
75
+ - Test file naming pattern? Co-located or separate? Branching strategy and PR requirements?
76
+ - Selector strategy for E2E? Test-data strategy (factories, fixtures, seeded DB, API-per-test)?
77
+
78
+ ## Core Principles
79
+
80
+ 1. **One file is the source of truth for the whole library.** Every skill reads
81
+ `.agents/qa-project-context.md` first. Duplicating its facts into other docs guarantees
82
+ drift — keep stack, goals, and risks here and let other skills reference them.
83
+
84
+ 2. **Capture the real state, not the aspiration.** If there are no E2E tests, write "None
85
+ selected yet," not a wish. Downstream skills route on what's true: a missing framework
86
+ triggers a setup suggestion; a fake one sends them building on sand.
87
+
88
+ 3. **Detect before you ask; recommend a default only when there's nothing to detect.**
89
+ Read `package.json` and config files first and confirm what you find. Tool *recommendations*
90
+ belong to the specialized skills — the one exception is a project with zero test
91
+ infrastructure, where you note **Playwright** (E2E) and **Vitest** (unit) as defaults in the
92
+ Test Stack and hand off to `playwright-automation` / `unit-testing`. This is the single
93
+ carve-out to the "no recommendations" rule; everywhere else, just record.
94
+
95
+ 4. **Risk Areas is the highest-leverage section — never skip it.** It is the direct input to
96
+ `risk-based-testing` and `test-strategy`. Push for at least 3–4 entries scored by impact and
97
+ likelihood even when the user says "everything's fine."
98
+
99
+ ## Codebase Detection
100
+
101
+ Scan for these before asking about the stack. Present detected values for confirmation; when a
102
+ test config is found, write the framework name into Test Stack rather than re-asking.
103
+
104
+ | File | Indicates |
105
+ |------|-----------|
106
+ | `package.json` | Node.js project — check `dependencies` for the framework |
107
+ | `next.config.*` | Next.js |
108
+ | `nuxt.config.*` | Nuxt/Vue |
109
+ | `angular.json` | Angular |
110
+ | `astro.config.*` | Astro |
111
+ | `react-router.config.ts` | React Router 7 / Remix |
112
+ | `requirements.txt` / `pyproject.toml` | Python project |
113
+ | `go.mod` | Go project |
114
+ | `playwright.config.*` | Playwright is set up → populate Test Stack E2E |
115
+ | `cypress.config.*` | Cypress is set up → populate Test Stack E2E |
116
+ | `vitest.config.*` / `jest.config.*` | Unit test framework → populate Test Stack Unit |
117
+ | `.github/workflows/` | GitHub Actions CI |
118
+ | `.gitlab-ci.yml` | GitLab CI |
119
+ | `Jenkinsfile` | Jenkins |
120
+ | `docker-compose.*` | Docker-based environments |
121
+ | `wrangler.*` | Cloudflare Workers |
122
+ | `vercel.json` | Vercel hosting |
123
+ | `bun.lock` / `bun.lockb` | Bun runtime |
124
+ | `pnpm-workspace.yaml` / `turbo.json` / `nx.json` | Monorepo — handle per the Monorepo note |
125
+ | `src-tauri/tauri.conf.json` | Tauri desktop app |
126
+ | `.claude/` | Project uses Claude Code skills/agents |
127
+ | `.claude-plugin/plugin.json` | Project ships a Claude Code plugin |
128
+ | `AGENTS.md` | Codex / multi-agent workflow conventions |
129
+
130
+ ## Workflow: Creating the Context File
131
+
132
+ 1. **Check for existing context.** Look for `.agents/qa-project-context.md` in the project root.
133
+ 2. **If absent:** create `.agents/` if needed, scaffold the section structure, run the Discovery
134
+ Questions starting with Product, and write the file once filled.
135
+ 3. **If present with placeholders:** read it, list which sections are complete vs. unfilled, ask
136
+ only about the unfilled sections, then update — preserve completed sections untouched.
137
+ 4. **If present and complete:** summarize the current context, ask what changed (new tools, team
138
+ changes, shifted goals), and update only the deltas.
139
+ 5. **After completion:** confirm the file path, run Verification (below), and suggest the next
140
+ skill from the context (no E2E → `playwright-automation`; no strategy → `test-strategy`;
141
+ no unit tests → `unit-testing`).
142
+
143
+ For two full filled-in files (SaaS and a multi-site publisher) plus the monorepo layout, see
144
+ `references/examples.md`. One short illustrative snippet:
145
+
146
+ ```markdown
147
+ ## Test Stack
148
+ ### E2E / Integration
149
+ - **Framework:** Playwright 1.60
150
+ - **Config Location:** playwright.config.ts
151
+ - **Test Directory:** tests/e2e/
152
+ ### Unit / Component
153
+ - **Framework:** None selected yet — Vitest recommended (see unit-testing)
154
+ ```
155
+
156
+ ## Section Guidance
157
+
158
+ What makes a good entry in each section. The blank template ships at
159
+ `.agents/qa-project-context.md` in the qaskills repo.
160
+
161
+ **Product.** Key user flows must be specific and testable: "Buyer searches products, adds to
162
+ cart, checks out with Stripe, receives confirmation email" — not "user uses the app." This list
163
+ is what every test skill uses to prioritize. Aim for 5–10.
164
+
165
+ **Tech Stack.** Record frontend, backend, database, hosting separately. Pin versions only when
166
+ they change the testing approach (App Router vs. Pages Router differ materially). Don't copy a
167
+ version just because an example shows one — read it from `package.json`.
168
+
169
+ **Test Stack.** For each tool: framework name + version, config location, test directory. No
170
+ infrastructure yet is valid — write "None selected yet" and the recommended default (Principle 3).
171
+
172
+ **Monorepo.** List each frontend app as its own Tech Stack and Test Stack entry; keep the
173
+ shared API/backend as one entry. Shard E2E **per app** (a change in `apps/admin` shouldn't run
174
+ `apps/storefront` E2E), and note in CI/CD which path filters gate which app's suite. Detection
175
+ hint: `turbo.json` / `pnpm-workspace.yaml` / `nx.json`. See `references/examples.md`.
176
+
177
+ **CI/CD.** Answer what other skills need: what blocks a deploy, how fast feedback is, what
178
+ evidence is preserved.
179
+
180
+ **Environments.** Note how staging diverges from production — a different DB engine in staging
181
+ means staging-green tests can still fail in prod.
182
+
183
+ **Quality Goals.** Concrete and measurable only. Pick starting targets by maturity:
184
+
185
+ | Maturity | Unit coverage | E2E | Flakiness | Suite duration |
186
+ |----------|--------------|-----|-----------|----------------|
187
+ | Early-stage startup | 60% on business logic | Top 5 critical flows | <2% | Unit <3 min, E2E <15 min |
188
+ | Growth-stage | 80% | All critical paths | <2% | Unit <3 min, E2E <15 min |
189
+ | Enterprise | 90%+ | Comprehensive + perf budgets | <1% | Unit <3 min, E2E <15 min |
190
+
191
+ Write them as numbers: "80% line coverage measured by Istanbul," "flake rate <2% over a rolling
192
+ 30-day window," "full E2E under 15 min with 4 shards." Never "we want great quality."
193
+
194
+ **Risk Areas.** Use the table — columns Area, Risk Level, Business Impact, Notes — and score with
195
+ **Impact × Likelihood**:
196
+
197
+ - **Critical (test first):** high impact + high likelihood (payment flow with known edge cases).
198
+ - **Important:** high impact + low likelihood (auth — catastrophic if broken, rarely changes).
199
+ - **Monitor:** low impact + high likelihood (notification formatting — breaks often, low severity).
200
+ - **Backlog:** low impact + low likelihood (admin settings — stable, rarely used).
201
+
202
+ At least 3 entries, never vague ("everything breaks").
203
+
204
+ **Team.** Record actual headcount and the dev:QA ratio — it sets the automation ownership model:
205
+
206
+ | Dev:QA ratio | Ownership model |
207
+ |--------------|-----------------|
208
+ | Solo / zero QA (effectively infinite) | Devs own all tests. No manual regression suite; lean on low-barrier automation (Playwright + Vitest) and CI gates. QA "role" = strategy + critical-path E2E, done by the dev. |
209
+ | High (8:1+) | Developers write tests; QA focuses on strategy, critical-path automation, exploratory testing. |
210
+ | Balanced (4:1) | QA owns E2E, devs own unit, integration shared. |
211
+ | QA-heavy (<3:1) | Dedicated automation engineers, comprehensive regression suites, scheduled exploratory cadence. |
212
+
213
+ **Conventions.** Selector strategy especially — `playwright-automation` and `test-reliability`
214
+ read it to generate matching selectors. Default to `data-testid` for stability
215
+ (`data-testid="invoice-create-button"`, kebab-case). If the team prefers semantic/ARIA selectors
216
+ for accessibility-aware testing, record concrete tokens — `role="button"`, `role="heading"`,
217
+ `getByRole('link', { name: ... })` — and the tradeoff: ARIA roles double as a11y assertions and
218
+ survive markup churn, but are less stable than `data-testid` when copy or roles change, so pin a
219
+ `name`/`level` to keep them unambiguous.
220
+
221
+ ## Anti-Patterns
222
+
223
+ ### 1. Asking all questions at once
224
+ Dumping 30 questions is overwhelming and gets shallow answers. Walk section by section, Product first.
225
+
226
+ ### 2. Leaving `[brackets]` in the final file
227
+ If the user has no answer, record the actual state ("None — no E2E framework selected yet"), not a
228
+ placeholder. Placeholders left in the file silently break every downstream skill that parses it.
229
+
230
+ ### 3. Inventing information
231
+ Detect the stack from `package.json`, `requirements.txt`, or config files — then confirm with the
232
+ user before writing. Don't guess a database or hosting provider.
233
+
234
+ ### 4. Skipping Risk Areas
235
+ The single most valuable section for downstream skills. Push for at least 3–4 scored entries even
236
+ when the user insists everything is fine.
237
+
238
+ ### 5. Recommending tools beyond the zero-infra default
239
+ This skill records current state; tool selection belongs to `playwright-automation`,
240
+ `unit-testing`, and the other specialized skills. The *only* recommendation you make here is the
241
+ Playwright + Vitest default when there is no test infrastructure at all (Principle 3).
242
+
243
+ ## Verification
244
+
245
+ Prove the produced file is complete, smallest check first. From the project root:
246
+
247
+ ```bash
248
+ test -f .agents/qa-project-context.md \
249
+ && ! grep -q '\[.*\]' .agents/qa-project-context.md \
250
+ && echo "context complete: file exists, no placeholders"
251
+ ```
252
+
253
+ Exit 0 with the message means the file exists and every `[bracketed placeholder]` is gone. A
254
+ non-zero exit means either the file is missing or placeholders remain — fix those before handing
255
+ off to any other skill. Then eyeball that all nine section headers are present:
256
+
257
+ ```bash
258
+ grep -c '^## ' .agents/qa-project-context.md # expect >= 9
259
+ ```
260
+
261
+ ## Done When
262
+
263
+ - `.agents/qa-project-context.md` exists in the project root and `grep -q '\[.*\]'` returns
264
+ non-zero (no bracketed placeholders remain).
265
+ - All nine sections are present: Product, Tech Stack, Test Stack, CI/CD, Environments, Quality
266
+ Goals, Risk Areas, Team, Conventions.
267
+ - Product lists at least 5 specific, testable key user flows (no "user uses the app").
268
+ - Test Stack names the actual frameworks + versions + paths in use, or states "None selected yet"
269
+ with the recommended default noted.
270
+ - Risk Areas table has at least 3 entries scored by impact and business impact.
271
+ - Quality Goals are concrete numbers (coverage %, flake %, durations) — not aspirational prose.
272
+ - Team section shows actual headcount and the dev:QA ratio (or "solo").
273
+
274
+ ## Related Skills
275
+
276
+ - **qa-start** — bootstraps QA on a brand-new project end-to-end and calls this skill as its
277
+ first step. Use qa-start when no QA exists yet; use this skill directly to (re)fill context.
278
+ - **risk-based-testing** — turns the Risk Areas section into a prioritized risk matrix. Run it
279
+ after this skill when the question is "where do we focus testing?"
280
+ - **test-strategy** — consumes Risk Areas, Quality Goals, and Team to set multi-quarter direction.
281
+ - **qa-metrics** — tracks the Quality Goals defined here; both reference the same targets.
282
+ - **playwright-automation** / **unit-testing** — set up E2E / unit frameworks after the Test Stack
283
+ section is filled; they read Conventions for selector and naming strategy.
284
+ - **ci-cd-integration** — wires the pipeline described in the CI/CD section.
285
+
286
+ ## Reference Files (in `references/`)
287
+
288
+ - **examples.md** — two complete filled-in context files (SaaS and a multi-site publisher) plus
289
+ the monorepo Tech/Test Stack layout.