@bonesofspring/ai-rules 0.2.2 → 0.2.4

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 (295) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +27 -4
  3. package/bin/cli.js +285 -72
  4. package/package.json +3 -2
  5. package/presets/claude/ios-swift/CLAUDE.md +28 -20
  6. package/presets/claude/ios-swift/MCP.md +14 -0
  7. package/presets/claude/ios-swift/README.md +18 -15
  8. package/presets/claude/ios-swift/agents/README.md +55 -0
  9. package/presets/claude/ios-swift/agents/accessibility-reviewer.md +67 -0
  10. package/presets/claude/ios-swift/agents/api-contract-reviewer.md +72 -0
  11. package/presets/claude/ios-swift/agents/build-verifier.md +64 -0
  12. package/presets/claude/ios-swift/agents/ci-investigator.md +73 -0
  13. package/presets/claude/ios-swift/agents/code-reviewer.md +75 -0
  14. package/presets/claude/ios-swift/agents/debugger.md +72 -0
  15. package/presets/claude/ios-swift/agents/feature-developer.md +35 -0
  16. package/presets/claude/ios-swift/agents/migration-specialist.md +73 -0
  17. package/presets/claude/ios-swift/agents/performance-auditor.md +72 -0
  18. package/presets/claude/ios-swift/agents/qa-tester.md +65 -0
  19. package/presets/claude/ios-swift/agents/security-reviewer.md +69 -0
  20. package/presets/claude/ios-swift/agents/solution-architect.md +17 -0
  21. package/presets/claude/ios-swift/agents/task-analyst.md +25 -0
  22. package/presets/claude/ios-swift/agents/task-router.md +62 -0
  23. package/presets/claude/ios-swift/agents/tech-writer.md +63 -0
  24. package/presets/claude/ios-swift/agents/unit-test-generator.md +54 -0
  25. package/presets/claude/ios-swift/agents/unit-test-healer.md +53 -0
  26. package/presets/claude/ios-swift/agents/unit-test-planner.md +64 -0
  27. package/presets/claude/ios-swift/agents/xcuitest-test-generator.md +47 -0
  28. package/presets/claude/ios-swift/agents/xcuitest-test-healer.md +47 -0
  29. package/presets/claude/ios-swift/agents/xcuitest-test-planner.md +67 -0
  30. package/presets/claude/ios-swift/commands/README.md +12 -2
  31. package/presets/claude/ios-swift/commands/feature-continue.md +51 -0
  32. package/presets/claude/ios-swift/commands/feature-start.md +30 -0
  33. package/presets/claude/ios-swift/commands/task-continue.md +49 -0
  34. package/presets/claude/ios-swift/commands/task.md +50 -0
  35. package/presets/claude/ios-swift/commands/technical-retro.md +58 -0
  36. package/presets/claude/ios-swift/hooks/README.md +10 -0
  37. package/presets/claude/ios-swift/hooks/chain-team-phases.sh +382 -0
  38. package/presets/claude/ios-swift/hooks/guard-shell-command.sh +79 -0
  39. package/presets/claude/ios-swift/mcp.json +12 -0
  40. package/presets/claude/ios-swift/rules/README.md +25 -14
  41. package/presets/claude/ios-swift/rules/api-and-data/README.md +2 -1
  42. package/presets/claude/ios-swift/rules/api-and-data/networking.md +2 -2
  43. package/presets/claude/ios-swift/rules/api-and-data/persistence.md +30 -0
  44. package/presets/claude/ios-swift/rules/architecture/README.md +3 -1
  45. package/presets/claude/ios-swift/rules/architecture/feature-delivery.md +10 -2
  46. package/presets/claude/ios-swift/rules/architecture/module-public-api.md +25 -0
  47. package/presets/claude/ios-swift/rules/architecture/reference-features.md +50 -0
  48. package/presets/claude/ios-swift/rules/stack/ios-app-core.md +2 -1
  49. package/presets/claude/ios-swift/rules/testing/ui.md +2 -0
  50. package/presets/claude/ios-swift/rules/tooling-and-review/README.md +6 -1
  51. package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-intake.md +18 -0
  52. package/presets/claude/ios-swift/rules/tooling-and-review/agent-team-orchestrator.md +47 -0
  53. package/presets/claude/ios-swift/rules/tooling-and-review/code-review.md +5 -0
  54. package/presets/claude/ios-swift/rules/tooling-and-review/post-change-build.md +5 -0
  55. package/presets/claude/ios-swift/rules/tooling-and-review/security-ios.md +36 -0
  56. package/presets/claude/ios-swift/rules/tooling-and-review/technical-retro.md +14 -0
  57. package/presets/claude/ios-swift/rules/tooling-and-review/xcode-tooling.md +24 -0
  58. package/presets/claude/ios-swift/rules/ui-and-accessibility/README.md +2 -1
  59. package/presets/claude/ios-swift/rules/ui-and-accessibility/navigation.md +28 -0
  60. package/presets/claude/ios-swift/skills/README.md +13 -0
  61. package/presets/claude/ios-swift/skills/ci-investigation/SKILL.md +39 -0
  62. package/presets/claude/ios-swift/skills/code-review/SKILL.md +27 -0
  63. package/presets/claude/ios-swift/skills/debug-investigation/SKILL.md +30 -0
  64. package/presets/claude/ios-swift/skills/feature-delivery/SKILL.md +27 -0
  65. package/presets/claude/ios-swift/skills/technical-retro/SKILL.md +10 -0
  66. package/presets/claude/ios-swift/skills/unit-testing/SKILL.md +32 -0
  67. package/presets/claude/ios-swift/skills/xcuitest-e2e/SKILL.md +33 -0
  68. package/presets/claude/ios-swift/team/README.md +27 -0
  69. package/presets/claude/ios-swift/team/fixtures/bugfix-standard.json +33 -0
  70. package/presets/claude/ios-swift/team/fixtures/feature-full.json +48 -0
  71. package/presets/claude/ios-swift/team/fixtures/feature-light.json +36 -0
  72. package/presets/claude/next/CLAUDE.md +29 -5
  73. package/presets/claude/next/MCP.md +16 -0
  74. package/presets/claude/next/README.md +12 -0
  75. package/presets/claude/next/agents/README.md +155 -1
  76. package/presets/claude/next/agents/accessibility-reviewer.md +65 -0
  77. package/presets/claude/next/agents/api-contract-reviewer.md +69 -0
  78. package/presets/claude/next/agents/build-verifier.md +64 -0
  79. package/presets/claude/next/agents/ci-investigator.md +62 -0
  80. package/presets/claude/next/agents/code-reviewer.md +63 -0
  81. package/presets/claude/next/agents/debugger.md +63 -0
  82. package/presets/claude/next/agents/feature-developer.md +27 -0
  83. package/presets/claude/next/agents/migration-specialist.md +69 -0
  84. package/presets/claude/next/agents/performance-auditor.md +68 -0
  85. package/presets/claude/next/agents/qa-tester.md +56 -0
  86. package/presets/claude/next/agents/security-reviewer.md +64 -0
  87. package/presets/claude/next/agents/solution-architect.md +70 -0
  88. package/presets/claude/next/agents/task-analyst.md +111 -0
  89. package/presets/claude/next/agents/task-router.md +94 -0
  90. package/presets/claude/next/agents/tech-writer.md +61 -0
  91. package/presets/claude/next/agents/unit-test-generator.md +37 -0
  92. package/presets/claude/next/agents/unit-test-healer.md +38 -0
  93. package/presets/claude/next/agents/unit-test-planner.md +62 -0
  94. package/presets/claude/next/commands/README.md +10 -2
  95. package/presets/claude/next/commands/feature-continue.md +51 -0
  96. package/presets/claude/next/commands/feature-start.md +30 -0
  97. package/presets/claude/next/commands/task-continue.md +49 -0
  98. package/presets/claude/next/commands/task.md +50 -0
  99. package/presets/claude/next/commands/technical-retro.md +58 -0
  100. package/presets/claude/next/hooks/README.md +5 -2
  101. package/presets/claude/next/hooks/chain-team-phases.sh +380 -0
  102. package/presets/claude/next/hooks/guard-shell-command.sh +77 -0
  103. package/presets/claude/next/mcp.json +20 -0
  104. package/presets/claude/next/rules/README.md +42 -11
  105. package/presets/claude/next/rules/api-and-data/README.md +7 -1
  106. package/presets/claude/next/rules/api-and-data/api-services.md +57 -0
  107. package/presets/claude/next/rules/api-and-data/http-client.md +40 -0
  108. package/presets/claude/next/rules/api-and-data/store-rtk.md +65 -0
  109. package/presets/claude/next/rules/architecture/README.md +11 -2
  110. package/presets/claude/next/rules/architecture/architecture-boundaries-ui.md +15 -0
  111. package/presets/claude/next/rules/architecture/architecture-boundaries.md +75 -0
  112. package/presets/claude/next/rules/architecture/feature-delivery-workflow.md +79 -0
  113. package/presets/claude/next/rules/architecture/layer-barrel-exports.md +58 -0
  114. package/presets/claude/next/rules/architecture/public-imports.md +46 -0
  115. package/presets/claude/next/rules/architecture/reference-features.md +37 -0
  116. package/presets/claude/next/rules/stack/README.md +10 -1
  117. package/presets/claude/next/rules/stack/arrow-functions.md +45 -0
  118. package/presets/claude/next/rules/stack/navigation-router-ui.md +15 -0
  119. package/presets/claude/next/rules/stack/navigation-router.md +64 -0
  120. package/presets/claude/next/rules/stack/next-app-core.md +33 -0
  121. package/presets/claude/next/rules/stack/next-app-router.md +36 -0
  122. package/presets/claude/next/rules/stack/no-type-assertion.md +59 -0
  123. package/presets/claude/next/rules/stack/types-jsdoc.md +37 -0
  124. package/presets/claude/next/rules/testing/README.md +9 -1
  125. package/presets/claude/next/rules/testing/playwright-agents.md +74 -0
  126. package/presets/claude/next/rules/testing/tests-e2e-structure.md +52 -0
  127. package/presets/claude/next/rules/testing/tests-unit.md +66 -0
  128. package/presets/claude/next/rules/tooling-and-review/README.md +12 -1
  129. package/presets/claude/next/rules/tooling-and-review/agent-team-intake.md +15 -0
  130. package/presets/claude/next/rules/tooling-and-review/agent-team-orchestrator.md +145 -0
  131. package/presets/claude/next/rules/tooling-and-review/code-quality.md +42 -0
  132. package/presets/claude/next/rules/tooling-and-review/code-review-mr.md +30 -0
  133. package/presets/claude/next/rules/tooling-and-review/package-manager.md +11 -0
  134. package/presets/claude/next/rules/tooling-and-review/post-change-lint.md +44 -0
  135. package/presets/claude/next/rules/ui-and-accessibility/README.md +10 -1
  136. package/presets/claude/next/rules/ui-and-accessibility/css-property-order.md +14 -0
  137. package/presets/claude/next/rules/ui-and-accessibility/no-props-spread.md +57 -0
  138. package/presets/claude/next/rules/ui-and-accessibility/react-a11y-coding.md +37 -0
  139. package/presets/claude/next/rules/ui-and-accessibility/react-ui.md +91 -0
  140. package/presets/claude/next/skills/README.md +11 -1
  141. package/presets/claude/next/skills/ci-investigation/SKILL.md +36 -0
  142. package/presets/claude/next/skills/code-review/SKILL.md +26 -0
  143. package/presets/claude/next/skills/debug-investigation/SKILL.md +28 -0
  144. package/presets/claude/next/skills/feature-delivery/SKILL.md +15 -0
  145. package/presets/claude/next/skills/playwright-e2e/SKILL.md +31 -0
  146. package/presets/claude/next/skills/technical-retro/SKILL.md +40 -0
  147. package/presets/claude/next/skills/unit-testing/SKILL.md +32 -0
  148. package/presets/claude/next/team/README.md +105 -0
  149. package/presets/claude/next/team/fixtures/bugfix-standard.json +15 -0
  150. package/presets/claude/next/team/fixtures/feature-full.json +16 -0
  151. package/presets/claude/next/team/fixtures/feature-light.json +17 -0
  152. package/presets/claude/next/team/tasks/.gitkeep +1 -0
  153. package/presets/cursor/ios-swift/AGENTS.md +47 -0
  154. package/presets/cursor/ios-swift/BUGBOT.md +15 -0
  155. package/presets/cursor/ios-swift/MCP.md +16 -0
  156. package/presets/cursor/ios-swift/README.md +27 -7
  157. package/presets/cursor/ios-swift/agents/README.md +55 -0
  158. package/presets/cursor/ios-swift/agents/accessibility-reviewer.md +67 -0
  159. package/presets/cursor/ios-swift/agents/api-contract-reviewer.md +72 -0
  160. package/presets/cursor/ios-swift/agents/build-verifier.md +64 -0
  161. package/presets/cursor/ios-swift/agents/ci-investigator.md +73 -0
  162. package/presets/cursor/ios-swift/agents/code-reviewer.md +75 -0
  163. package/presets/cursor/ios-swift/agents/debugger.md +72 -0
  164. package/presets/cursor/ios-swift/agents/feature-developer.md +35 -0
  165. package/presets/cursor/ios-swift/agents/migration-specialist.md +73 -0
  166. package/presets/cursor/ios-swift/agents/performance-auditor.md +72 -0
  167. package/presets/cursor/ios-swift/agents/qa-tester.md +65 -0
  168. package/presets/cursor/ios-swift/agents/security-reviewer.md +69 -0
  169. package/presets/cursor/ios-swift/agents/solution-architect.md +17 -0
  170. package/presets/cursor/ios-swift/agents/task-analyst.md +25 -0
  171. package/presets/cursor/ios-swift/agents/task-router.md +62 -0
  172. package/presets/cursor/ios-swift/agents/tech-writer.md +63 -0
  173. package/presets/cursor/ios-swift/agents/unit-test-generator.md +54 -0
  174. package/presets/cursor/ios-swift/agents/unit-test-healer.md +53 -0
  175. package/presets/cursor/ios-swift/agents/unit-test-planner.md +64 -0
  176. package/presets/cursor/ios-swift/agents/xcuitest-test-generator.md +47 -0
  177. package/presets/cursor/ios-swift/agents/xcuitest-test-healer.md +47 -0
  178. package/presets/cursor/ios-swift/agents/xcuitest-test-planner.md +67 -0
  179. package/presets/cursor/ios-swift/commands/README.md +49 -1
  180. package/presets/cursor/ios-swift/commands/feature-continue.md +19 -0
  181. package/presets/cursor/ios-swift/commands/feature-start.md +33 -0
  182. package/presets/cursor/ios-swift/commands/task-continue.md +49 -0
  183. package/presets/cursor/ios-swift/commands/task.md +50 -0
  184. package/presets/cursor/ios-swift/commands/technical-retro.md +81 -0
  185. package/presets/cursor/ios-swift/hooks/README.md +8 -0
  186. package/presets/cursor/ios-swift/hooks/chain-team-phases.sh +382 -0
  187. package/presets/cursor/ios-swift/hooks/guard-shell-command.sh +79 -0
  188. package/presets/cursor/ios-swift/hooks.json +17 -0
  189. package/presets/cursor/ios-swift/mcp.json +11 -0
  190. package/presets/cursor/ios-swift/rules/README.md +45 -13
  191. package/presets/cursor/ios-swift/rules/agent-team-intake.mdc +16 -0
  192. package/presets/cursor/ios-swift/rules/agent-team-orchestrator.mdc +85 -0
  193. package/presets/cursor/ios-swift/rules/code-review-mr.mdc +1 -0
  194. package/presets/cursor/ios-swift/rules/feature-delivery-workflow.mdc +1 -1
  195. package/presets/cursor/ios-swift/rules/ios-app-core.mdc +2 -1
  196. package/presets/cursor/ios-swift/rules/module-public-api.mdc +26 -0
  197. package/presets/cursor/ios-swift/rules/navigation-coordinators.mdc +29 -0
  198. package/presets/cursor/ios-swift/rules/networking-services.mdc +2 -2
  199. package/presets/cursor/ios-swift/rules/persistence-data.mdc +31 -0
  200. package/presets/cursor/ios-swift/rules/reference-features.mdc +53 -0
  201. package/presets/cursor/ios-swift/rules/security-ios.mdc +35 -0
  202. package/presets/cursor/ios-swift/rules/technical-retro.mdc +12 -0
  203. package/presets/cursor/ios-swift/rules/tests-ui.mdc +1 -0
  204. package/presets/cursor/ios-swift/rules/xcode-tooling.mdc +20 -0
  205. package/presets/cursor/ios-swift/skills/README.md +13 -0
  206. package/presets/cursor/ios-swift/skills/ci-investigation/SKILL.md +39 -0
  207. package/presets/cursor/ios-swift/skills/code-review/SKILL.md +27 -0
  208. package/presets/cursor/ios-swift/skills/debug-investigation/SKILL.md +30 -0
  209. package/presets/cursor/ios-swift/skills/feature-delivery/SKILL.md +27 -0
  210. package/presets/cursor/ios-swift/skills/technical-retro/SKILL.md +10 -0
  211. package/presets/cursor/ios-swift/skills/unit-testing/SKILL.md +32 -0
  212. package/presets/cursor/ios-swift/skills/xcuitest-e2e/SKILL.md +33 -0
  213. package/presets/cursor/ios-swift/team/README.md +31 -0
  214. package/presets/cursor/ios-swift/team/fixtures/bugfix-standard.json +33 -0
  215. package/presets/cursor/ios-swift/team/fixtures/feature-full.json +48 -0
  216. package/presets/cursor/ios-swift/team/fixtures/feature-light.json +36 -0
  217. package/presets/cursor/next/AGENTS.md +36 -0
  218. package/presets/cursor/next/BUGBOT.md +14 -0
  219. package/presets/cursor/next/MCP.md +16 -0
  220. package/presets/cursor/next/agents/README.md +165 -0
  221. package/presets/cursor/next/agents/accessibility-reviewer.md +67 -0
  222. package/presets/cursor/next/agents/api-contract-reviewer.md +71 -0
  223. package/presets/cursor/next/agents/build-verifier.md +66 -0
  224. package/presets/cursor/next/agents/ci-investigator.md +64 -0
  225. package/presets/cursor/next/agents/code-reviewer.md +64 -0
  226. package/presets/cursor/next/agents/debugger.md +64 -0
  227. package/presets/cursor/next/agents/feature-developer.md +28 -0
  228. package/presets/cursor/next/agents/migration-specialist.md +71 -0
  229. package/presets/cursor/next/agents/performance-auditor.md +70 -0
  230. package/presets/cursor/next/agents/playwright-test-generator.md +27 -0
  231. package/presets/cursor/next/agents/playwright-test-healer.md +27 -0
  232. package/presets/cursor/next/agents/playwright-test-planner.md +28 -0
  233. package/presets/cursor/next/agents/qa-tester.md +58 -0
  234. package/presets/cursor/next/agents/security-reviewer.md +66 -0
  235. package/presets/cursor/next/agents/solution-architect.md +71 -0
  236. package/presets/cursor/next/agents/task-analyst.md +112 -0
  237. package/presets/cursor/next/agents/task-router.md +95 -0
  238. package/presets/cursor/next/agents/tech-writer.md +62 -0
  239. package/presets/cursor/next/agents/unit-test-generator.md +39 -0
  240. package/presets/cursor/next/agents/unit-test-healer.md +40 -0
  241. package/presets/cursor/next/agents/unit-test-planner.md +64 -0
  242. package/presets/cursor/next/commands/README.md +49 -1
  243. package/presets/cursor/next/commands/feature-continue.md +19 -0
  244. package/presets/cursor/next/commands/feature-start.md +33 -0
  245. package/presets/cursor/next/commands/task-continue.md +49 -0
  246. package/presets/cursor/next/commands/task.md +50 -0
  247. package/presets/cursor/next/commands/technical-retro.md +81 -0
  248. package/presets/cursor/next/hooks/README.md +8 -0
  249. package/presets/cursor/next/hooks/chain-team-phases.sh +380 -0
  250. package/presets/cursor/next/hooks/guard-shell-command.sh +77 -0
  251. package/presets/cursor/next/hooks.json +17 -0
  252. package/presets/cursor/next/mcp.json +19 -0
  253. package/presets/cursor/next/rules/README.md +67 -0
  254. package/presets/cursor/next/rules/agent-team-intake.mdc +14 -0
  255. package/presets/cursor/next/rules/agent-team-orchestrator.mdc +147 -0
  256. package/presets/cursor/next/rules/api-services.mdc +12 -10
  257. package/presets/cursor/next/rules/architecture-boundaries-ui.mdc +15 -0
  258. package/presets/cursor/next/rules/architecture-boundaries.mdc +31 -12
  259. package/presets/cursor/next/rules/arrow-functions.mdc +46 -0
  260. package/presets/cursor/next/rules/code-quality-and-refactoring.mdc +5 -4
  261. package/presets/cursor/next/rules/code-review-mr.mdc +21 -40
  262. package/presets/cursor/next/rules/css-property-order-stylelint.mdc +16 -0
  263. package/presets/cursor/next/rules/feature-delivery-workflow.mdc +76 -0
  264. package/presets/cursor/next/rules/http-client.mdc +42 -0
  265. package/presets/cursor/next/rules/layer-barrel-exports.mdc +59 -0
  266. package/presets/cursor/next/rules/navigation-router-stack.mdc +62 -0
  267. package/presets/cursor/next/rules/navigation-router-ui.mdc +16 -0
  268. package/presets/cursor/next/rules/next-app-core.mdc +18 -61
  269. package/presets/cursor/next/rules/next-app-router.mdc +36 -0
  270. package/presets/cursor/next/rules/no-props-spread.mdc +27 -4
  271. package/presets/cursor/next/rules/no-type-assertion-as-import-export.mdc +60 -0
  272. package/presets/cursor/next/rules/package-manager.mdc +16 -0
  273. package/presets/cursor/next/rules/playwright-agents.mdc +2 -1
  274. package/presets/cursor/next/rules/post-change-lint.mdc +40 -0
  275. package/presets/cursor/next/rules/public-imports.mdc +48 -0
  276. package/presets/cursor/next/rules/react-a11y-coding.mdc +37 -0
  277. package/presets/cursor/next/rules/react-ui.mdc +33 -3
  278. package/presets/cursor/next/rules/reference-features.mdc +39 -0
  279. package/presets/cursor/next/rules/store-rtk.mdc +13 -6
  280. package/presets/cursor/next/rules/technical-retro.mdc +12 -0
  281. package/presets/cursor/next/rules/tests-unit.mdc +30 -10
  282. package/presets/cursor/next/rules/types-jsdoc.mdc +42 -0
  283. package/presets/cursor/next/skills/README.md +15 -0
  284. package/presets/cursor/next/skills/ci-investigation/SKILL.md +36 -0
  285. package/presets/cursor/next/skills/code-review/SKILL.md +26 -0
  286. package/presets/cursor/next/skills/debug-investigation/SKILL.md +28 -0
  287. package/presets/cursor/next/skills/feature-delivery/SKILL.md +15 -0
  288. package/presets/cursor/next/skills/playwright-e2e/SKILL.md +31 -0
  289. package/presets/cursor/next/skills/technical-retro/SKILL.md +40 -0
  290. package/presets/cursor/next/skills/unit-testing/SKILL.md +32 -0
  291. package/presets/cursor/next/team/README.md +109 -0
  292. package/presets/cursor/next/team/fixtures/bugfix-standard.json +15 -0
  293. package/presets/cursor/next/team/fixtures/feature-full.json +16 -0
  294. package/presets/cursor/next/team/fixtures/feature-light.json +17 -0
  295. package/presets/cursor/next/team/tasks/.gitkeep +0 -0
@@ -0,0 +1,59 @@
1
+ ---
2
+ description: Двухуровневые barrel-экспорты для слоёв с регламентированным public API
3
+ globs: app/src/**/index.ts
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Barrel-экспорты слоёв с public API
8
+
9
+ ## Когда применять
10
+
11
+ Для **любого слоя** (каталога, пакета, bounded context), у которого:
12
+
13
+ - есть **корневой barrel** — единая точка импорта для внешних потребителей;
14
+ - deep-импорты внутрь слоя **запрещены** снаружи (ESLint `no-restricted-imports`, правила `public-imports.mdc`).
15
+
16
+ Примеры alias/entry point в разных проектах: `@/api`, `@/types`, `@/core`, `@/store`, `packages/foo`.
17
+
18
+ ## Два уровня barrel
19
+
20
+ 1. **Локальный** — `index.ts` модуля/фичи внутри слоя.
21
+ 2. **Корневой public API** — barrel слоя (например `src/<layer>/index.ts`).
22
+
23
+ **Внутри** слоя — относительные импорты и пути между подмодулями. **Снаружи** — только корневой barrel и **явно разрешённые** вторичные entry points (если зафиксированы в правилах проекта, напр. `@/types/enums`).
24
+
25
+ ## Что реэкспортировать наружу
26
+
27
+ Только символы, которые **должны быть доступны** потребителям слоя: публичные функции/сервисы/фасады, типы контракта, константы и helpers, нужные другим слоям или тестам.
28
+
29
+ **Не реэкспортировать:** внутренние адаптеры, мапперы, детали транспорта, промежуточные объекты для сборки фасада внутри слоя.
30
+
31
+ Группировка в корневом barrel — **по конвенции репозитория** (ориентир — соседние модули того же слоя).
32
+
33
+ ## Чеклист агента (обязателен)
34
+
35
+ При добавлении или существенном расширении **модуля внутри регламентированного слоя**:
36
+
37
+ 1. Определить слой, его **корневой barrel** и доп. entry points (`public-imports.mdc`).
38
+ 2. Создать/обновить **локальный** `index.ts` — только публичные символы.
39
+ 3. Если в слое есть **фасад/агрегатор** (`*ApiService.ts`, `rootReducer`, …) — подключить модуль там.
40
+ 4. Добавить **реэкспорт** новых публичных символов в **корневой barrel** слоя.
41
+ 5. **Проверка:** grep по имени символа или пути `./<Module>` в корневом barrel; снаружи слоя нет deep-импортов.
42
+
43
+ Модуль **не готов**, пока чеклист не пройден.
44
+
45
+ ## Как найти регламентированные слои в репозитории
46
+
47
+ 1. Правила `public-imports.mdc` в `.cursor/rules/`.
48
+ 2. ESLint `no-restricted-imports` — паттерны `@/<layer>/*` с исключением barrel.
49
+ 3. `architecture-boundaries.mdc`, README проекта.
50
+
51
+ ## В этом репозитории
52
+
53
+ | Слой | Корневой barrel | Правило импортов |
54
+ |------|-------------------|------------------|
55
+ | API | `app/src/api/index.ts` | `public-imports.mdc` |
56
+ | Types | `app/src/types/index.ts` | `public-imports.mdc` (+ `@/types/enums`) |
57
+ | Core | `app/src/core/index.ts` | ESLint: `@/core/index` |
58
+
59
+ Иллюстрация двух уровней (API): локальный `services/.../<Feature>/index.ts` → фасад `*ApiService.ts` → `app/src/api/index.ts`.
@@ -0,0 +1,62 @@
1
+ ---
2
+ description: Выбор API навигации по стеку проекта (Next.js vs React Router)
3
+ globs: app/src/app/**/*,app/**/app/**/*
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Навигация и роутинг: сначала стек проекта
8
+
9
+ **При любой задаче, связанной с навигацией, переходами между страницами, URL, редиректами, хлебными крошками, защищёнными маршрутами или программной сменой маршрута** — перед предложением кода или импортов **нельзя** опираться на «типичный React» по умолчанию. Нужно **явно свериться со стеком целевого репозитория** и использовать **один** согласованный с проектом механизм.
10
+
11
+ ## Зависимости: что проверить в первую очередь
12
+
13
+ 1. **`package.json`** в корне приложения (например `app/package.json` в монорепо — тот пакет, который реально собирается и деплоится). Смотреть **`dependencies`** и при необходимости **`peerDependencies`**:
14
+ - **`next`** — Next.js; версия важна для нюансов API (сверяться с документацией под эту major).
15
+ - **`react-router-dom`**, **`@remix-run/*`**, **`@tanstack/react-router`** и т.д. — отдельный роутинг; не подменять их API вызовами Next без проверки, что в проекте действительно используется этот стек.
16
+ - **`next`** и **`react-router-dom`** одновременно — возможно легаси или гибрид; **не** выбирать API по умолчанию — смотреть раздел «Реализация в коде» ниже.
17
+
18
+ 2. **Монорепо / workspaces** — роутинг может жить не в корневом `package.json`. Открыть **`package.json` того workspace**, где лежат страницы и `next.config.*` / точка входа SPA.
19
+
20
+ 3. **Факт установки** — при сомнениях смотреть lockfile (`bun.lock`, `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`) или каталог `node_modules` у соответствующего пакета: убедиться, что заявленный пакет реально установлен, а не только прописан в документации.
21
+
22
+ ## Реализация роутинга в проекте (код и структура)
23
+
24
+ Перед предложением паттерна навигации **свериться с тем, как уже сделано в репозитории**:
25
+
26
+ 1. **Дерево маршрутов**
27
+ - Next **App Router**: каталог **`app/`** (или `src/app/`) с `layout.tsx`, `page.tsx`, сегменты `[id]` и т.п.
28
+ - Next **Pages Router**: каталог **`pages/`** с `_app`, динамические `[slug].tsx`.
29
+ - Наличие **обоих** `app/` и `pages/` — уточнить по `next.config` и документации проекта, какой слой основной.
30
+
31
+ 2. **Точки входа и обёртки**
32
+ - Поиск по коду импортов: **`from 'next/navigation'`**, **`from 'next/router'`**, **`from 'next/link'`**, **`from 'react-router-dom'`**, **`createBrowserRouter`**, **`RouterProvider`**, **`BrowserRouter`**.
33
+ - Где объявлены маршруты (файловая структура Next vs конфиг маршрутов / `routes.tsx` в SPA).
34
+
35
+ 3. **Общие абстракции проекта**
36
+ - Обертки над ссылками (`@/ui/...`, `Link` из дизайн-системы), хелперы путей, константы роутов — **использовать их**, а не дублировать сырой роутер.
37
+
38
+ 4. **Соседние файлы фичи**
39
+ - Новый код навигации — в том же стиле, что страницы/хуки той же области (`next/navigation` vs `react-router-dom` как в соседних импортах).
40
+
41
+ ## Как определить, что использовать (сводка)
42
+
43
+ 1. **Зависимости** — см. раздел выше; по ним задаётся допустимый набор пакетов.
44
+ 2. **Структура** — App Router vs Pages vs SPA по каталогам и конфигу.
45
+ 3. **Фактический код** — какие импорты и обёртки уже доминируют в приложении.
46
+
47
+ ## Что использовать (краткая матрица)
48
+
49
+ | Стек | Программная навигация / чтение пути | Ссылки |
50
+ |------|-------------------------------------|--------|
51
+ | **Next.js App Router** | `next/navigation` (`useRouter`, `usePathname`, `useSearchParams`, `redirect` и т.д. по документации Next для вашей версии) | `next/link` |
52
+ | **Next.js Pages Router** | `next/router` | `next/link` |
53
+ | **SPA + React Router** | `react-router-dom` (`useNavigate`, `useParams`, `useLocation`, …) | `<Link>` из `react-router-dom` |
54
+
55
+ **Не делать:** подключать `react-router-dom` в проект на Next.js «по привычке»; импортировать хуки из `next/router` в компонентах App Router без проверки; смешивать два роутера в одном приложении без явной архитектурной причины в кодовой базе.
56
+
57
+ ## Требование к агенту
58
+
59
+ - Перед генерацией или ревью кода навигации **коротко зафиксировать вывод** (например: «зависимости: `next` без `react-router-dom`; в коде везде `next/navigation` → используем то же») и следовать ему.
60
+ - **Обязательная проверка:** актуальные **`dependencies`** в `package.json` нужного workspace + **как в проекте уже реализованы** маршруты и импорты (поиск по репозиторию, соседние файлы). Не полагаться только на предположение по одному признаку (например, только на наличие папки `app/`).
61
+ - Если стек неочевиден (два роутера в зависимостях, гибрид) — **сверить lockfile / установленные пакеты** и **доминирующие импорты** в `src`/`app`, затем выбрать API.
62
+ - Для **этого** репозитория базовый ориентир — **`next-app-core.mdc`**: Next.js; предпочитать **`next/navigation`** и **`next/link`** там, где используется App Router.
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Навигация в UI-компонентах — краткий ориентир (полный аудит стека — navigation-router-stack.mdc)
3
+ globs: app/src/ui/**/*.tsx
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Navigation in UI components
8
+
9
+ Перед ссылками, программной навигацией или работой с URL в UI:
10
+
11
+ 1. **`package.json`** workspace приложения — `next` vs `react-router-dom`.
12
+ 2. **Соседние импорты** той же фичи (`next/navigation`, `next/link` vs `react-router-dom`).
13
+ 3. **Обёртки проекта** (`@/ui/...` Link) — предпочтительнее сырого API роутера.
14
+ 4. **По умолчанию (preset):** Next.js App Router → `next/navigation` + `next/link` (`next-app-core.mdc`, `next-app-router.mdc`).
15
+
16
+ Полный аудит (дерево маршрутов, гибриды, lockfile): **`navigation-router-stack.mdc`** — при правках `app/src/app/**`.
@@ -5,73 +5,30 @@ alwaysApply: true
5
5
 
6
6
  # Стек и окружение
7
7
 
8
- Конкретные версии пакетов и инструментов — **из `package.json` и конфигов целевого репозитория**. Ниже — рамка preset (Next.js + React + TypeScript), без привязки к конкретному вендору UI, моков или APM:
8
+ Конкретные версии — **из `package.json` и конфигов целевого репозитория**. Рамка preset: Next.js, React, TypeScript; runner/e2e/mocks/UI/APM как заведено в репо.
9
9
 
10
- - **Фреймворк:** Next.js, React, TypeScript (strict — если включён в проекте).
11
- - **Сборка и Node:** как задано в репозитории.
12
- - **Тесты:** unit/integration — runner и библиотеки проекта; e2e — инструмент проекта (правила для агентов Playwright — в отдельных файлах preset).
13
- - **Моки HTTP/API:** если приняты в репо — повторять существующую схему (каталоги, регистрация, точка входа).
14
- - **Стили и UI:** способ стилизации и **дизайн‑система / токены** — как уже заведено в коде; приоритет общим примитивам и токенам вместо разрозненных «магических» значений.
15
- - **Наблюдаемость:** только если уже подключена в проекте — централизованно (клиент, обёртки), без дублирования в каждом методе.
10
+ # Структура проекта
16
11
 
17
- # Структура проекта (верхний уровень)
18
-
19
- - `app/` корень Next.js приложения.
20
- - `app/src/**` — исходный код приложения.
21
- - `app/__tests__/e2e/**` — e2e‑тесты и планы.
22
- - `app/tsconfig.json`:
23
- - `baseUrl: "."`
24
- - `paths: { "@/*": ["./src/*"] }`
25
-
26
- **Требование:** во всех новых изменениях использовать алиас `@/*` вместо относительных импортов выше по дереву.
12
+ - `app/` корень Next.js; `app/src/**` — код; `app/__tests__/e2e/**` — e2e.
13
+ - `app/tsconfig.json`: `baseUrl: "."`, `paths: { "@/*": ["./src/*"] }`.
14
+ - **Требование:** `@/*` вместо относительных импортов выше по дереву.
27
15
 
28
16
  # Архитектурные слои
29
17
 
30
- - **UI слой** (`src/ui/**`):
31
- - `src/ui/pages/**` — страницы и контейнеры.
32
- - `src/ui/components/**` переиспользуемые компоненты.
33
- - **Store слой** (`src/store/**`):
34
- - `src/store/slices/**` — модули состояния (в этом preset Redux Toolkit; подробности в `store-rtk.mdc`).
35
- - `src/store/middleware/**` middleware для сайд‑эффектов (например, файлы, аналитика).
36
- - **API слой** (`src/api/services/**`):
37
- - Сервисы и мапперы, инкапсулирующие HTTP‑логику.
38
- - **Типы** (`src/types/**`):
39
- - Общие доменные типы продукта (сущности предметной области, агрегаты и т.д.).
40
- - **Моки и тестовые данные** (`src/mocks/**`):
41
- - По структуре и назначению — как принято в репозитории.
42
-
43
- # Общие архитектурные принципы
18
+ | Слой | Каталог | Детали |
19
+ |------|---------|--------|
20
+ | UI | `app/src/ui/**` (pages, components) | `react-ui.mdc`, `architecture-boundaries-ui.mdc` |
21
+ | Store | `app/src/store/**` (slices, middleware) | `store-rtk.mdc` |
22
+ | API | `app/src/api/**` (services, clients, barrel) | `api-services.mdc`, `http-client.mdc` |
23
+ | HTTP | `app/src/lib/clients/**`, `app/src/api/clients/**` | `http-client.mdc` |
24
+ | Types | `app/src/types/**` | `public-imports.mdc`, `types-jsdoc.mdc` |
25
+ | Mocks | `app/src/mocks/**` | по схеме репозитория |
44
26
 
45
- - **Чёткое разделение слоёв**:
46
- - UI знает только о доменных типах и публичных интерфейсах store/API.
47
- - Store знает о доменных типах и API‑сервисах.
48
- - API знает о транспортном слое (HTTP, выбранный клиент) и DTO.
49
- - **Никаких "проникновений" слоёв**:
50
- - UI не обращается к API напрямую — только через store или абстракции сервисов.
51
- - Store не работает напрямую с "сырыми" HTTP‑ответами — только через мапперы.
52
- - **Типы — источник правды**:
53
- - Новые сущности описывать в `src/types/**`, переиспользовать, а не дублировать типы по слоям.
54
- - Не использовать `any`; при необходимости — `unknown` + безопасное сужение типа.
55
-
56
- # Кодстайл и качества кода
57
-
58
- - Следовать конфигам линтеров и форматтера **проекта** (`eslint`, `prettier`, `stylelint` — какие есть в репо).
59
- - Поддерживать:
60
- - KISS, DRY, SOLID (в разумных пределах для фронта).
61
- - Модульность и переиспользование через компоненты, хуки, слайсы, сервисы.
62
- - Визуальную консистентность за счёт принятых в проекте UI‑примитивов и токенов, а не разовых литералов в стилях.
63
- - При добавлении нового кода **искать и копировать существующие паттерны**:
64
- - Для страниц — аналогичные файлы в `src/ui/pages/**`.
65
- - Для блоков — компоненты в `src/ui/components/**`.
66
- - Для API — сервисы в `src/api/services/**`.
67
- - Для состояния — слайсы в `src/store/slices/**`.
27
+ Границы слоёв, порты/адаптеры, UI→API — **`architecture-boundaries.mdc`**. Импорты `@/types`, `@/api` — **`public-imports.mdc`**.
68
28
 
69
29
  # Работа агента
70
30
 
71
- При генерации кода:
72
- - Определить целевой слой (UI/store/API/типизация/тесты).
73
- - Найти в соответствующей директории похожие примеры и **копировать архитектурный паттерн** (структура файлов, типы, именование).
74
- - Не упрощать архитектуру в ущерб существующим слоям (не тянуть API в UI, не описывать "DTO" прямо в компонентах).
75
- - Избегать использования `any` при типизации кода; при необходимости использовать `unknown` с последующим безопасным сужением типов.
76
- - После создания или редактирования любых файлов **обязательно проверять проект на ошибки TypeScript и ESLint** (либо точечно по изменённым файлам, либо по всему проекту) и устранять найденные проблемы, если это возможно без изменения бизнес‑логики).
77
-
31
+ - Архитектура и импорты: `architecture-boundaries.mdc`, `public-imports.mdc`
32
+ - Фичи: `feature-delivery-workflow.mdc` + skill `feature-delivery`
33
+ - После правок: **вызвать** `post-change-lint.mdc` (requestable, обязателен после code edits); менеджер пакетов: `package-manager.mdc`
34
+ - Копировать паттерны соседних файлов в целевом слое; не использовать `any` (предпочитать `unknown` + сужение)
@@ -0,0 +1,36 @@
1
+ ---
2
+ description: Next.js App Router — Server/Client Components, data fetching, loading and error UI
3
+ globs: app/src/app/**/*,app/**/app/**/*
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # Next.js App Router
8
+
9
+ Применять при работе с `app/src/app/**` или маршрутами App Router в целевом репо.
10
+
11
+ ## Server vs Client
12
+
13
+ - **Server Components по умолчанию** — без `'use client'`, если не нужны hooks, browser API, event handlers.
14
+ - **`'use client'`** — только для интерактива, `useState`/`useEffect`, browser-only API.
15
+ - Не тянуть store/RTK и тяжёлый client-state в Server Components без необходимости.
16
+
17
+ ## Data fetching
18
+
19
+ - Предпочитать fetch/data-loader на **server** (RSC, route handlers, server actions — по принятому в репо паттерну).
20
+ - **Не дублировать** один запрос в RSC и client без причины.
21
+ - Кеш и revalidate — как в существующих страницах репо (`fetch` options, `revalidate`, tags).
22
+
23
+ ## Маршруты и UX
24
+
25
+ - Для async routes использовать **`loading.tsx`**, **`error.tsx`**, **`not-found.tsx`** по образцу соседних routes.
26
+ - **Suspense** — для медленных client/server секций; fallback согласован с дизайн-системой.
27
+ - Навигация — `navigation-router-stack.mdc` + router/link паттерны проекта.
28
+
29
+ ## Границы слоёв
30
+
31
+ - RSC/route handlers **не импортируют UI-компоненты с client-only зависимостями** напрямую в server tree без `'use client'` границы.
32
+ - Доменные типы — `@/types`; вызовы backend — через `@/api` / services, не raw `fetch` из page.tsx без слоя API.
33
+
34
+ ## Эталон
35
+
36
+ Смотри существующий route той же сложности в `app/src/app/**` и повтори структуру (`reference-features.mdc`).
@@ -1,11 +1,14 @@
1
1
  ---
2
2
  description: Избегать спред-а пропов при передаче в компоненты
3
- alwaysApply: true
3
+ globs: app/src/**/*.tsx
4
+ alwaysApply: false
4
5
  ---
5
6
 
6
7
  # Не использовать спред пропов при передаче в компоненты
7
8
 
8
- При вызове React-компонентов **передавать пропы явно**, а не через spread (`{...props}`).
9
+ При вызове **пользовательских** React-компонентов (имя с заглавной буквы: `IconBox`, `TextField`, ваши `FooBar`) **передавать пропы явно**, а не через spread (`{...props}`, `{...obj}`).
10
+
11
+ **Агентам и при ревью:** не «упрощать» JSX через объект с последующим spread — это нарушение. Если ветвление по пропам длинное, используйте два явных JSX-блока (`condition ? <A … /> : <B … />`) или отдельные маленькие компоненты, а не `{...mergedProps}`.
9
12
 
10
13
  ## Почему
11
14
 
@@ -13,6 +16,11 @@ alwaysApply: true
13
16
  - Упрощает рефакторинг и поиск использований.
14
17
  - Снижает риск случайно пробросить лишние или устаревшие пропы.
15
18
 
19
+ ## Проверка в репозитории
20
+
21
+ - Для файлов `app/src/ui/**/*.tsx` включено ESLint-правило `react/jsx-props-no-spreading` (`app/eslint.config.mjs`): несоблюдение увидит линтер и CI.
22
+ - Легитимное исключение в конкретном месте — **однострочный** `eslint-disable-next-line react/jsx-props-no-spreading` с кратким комментарием «почему»; для редких обёрток допустим disable на файл (как в `PromocodeInput`).
23
+
16
24
  ## Примеры
17
25
 
18
26
  ```tsx
@@ -23,6 +31,10 @@ return <Child {...commonProps} />
23
31
  // ❌ Плохо
24
32
  return <Child {...props} />
25
33
 
34
+ // ❌ Плохо (spread из соседнего модуля стилей тоже не оправдание)
35
+ const iconProps = cond ? { name, size: 'm' } : { name, size: 'm', ...styles.IconBoxAccent }
36
+ return <IconBox {...iconProps} />
37
+
26
38
  // ✅ Хорошо
27
39
  return (
28
40
  <Child
@@ -31,9 +43,20 @@ return (
31
43
  c={c}
32
44
  />
33
45
  )
46
+
47
+ // ✅ Хорошо — явные пропсы по веткам
48
+ return cond ? (
49
+ <IconBox name={name} size="m" variant="warning" />
50
+ ) : (
51
+ <IconBox
52
+ customColors={styles.IconBoxAccent.customColors}
53
+ name={name}
54
+ size="m"
55
+ />
56
+ )
34
57
  ```
35
58
 
36
59
  ## Исключения
37
60
 
38
- - Передача всех пропов в нативный DOM-элемент (`<div {...rest} />`) допустима, если `rest` содержит только валидные HTML-атрибуты.
39
- - Делегирование пропов в обёртку (wrapper) допустимо, если это явно документировано и обосновано.
61
+ - Передача пропов в **нативный** DOM-элемент (`<div {...rest} />`) допустима, если `rest` содержит только валидные HTML-атрибуты.
62
+ - Делегирование пропов в обёртку (wrapper) допустимо, если это явно документировано и обосновано; при необходимости пометьте файл или строку через ESLint-disable, как выше.
@@ -0,0 +1,60 @@
1
+ ---
2
+ description: Избегать приведения типов через as на границах модулей (импорт/экспорт)
3
+ globs:
4
+ - app/src/api/**/*
5
+ - app/src/store/**/*
6
+ - app/src/types/**/*
7
+ alwaysApply: false
8
+ ---
9
+
10
+ # Не использовать `as` для приведения типов при экспорте и импорте (кроме необходимых случаев)
11
+
12
+ ## О чём речь
13
+
14
+ Речь о **type assertion** в TypeScript: выражение вида `значение as Тип`.
15
+
16
+ **Не относится к правилу** (это не assertion, а синтаксис модулей):
17
+
18
+ - переименование при экспорте: `export { foo as bar }`, `export { default as Baz } from '...'`;
19
+ - переименование при импорте: `import { foo as bar } from '...'`;
20
+ - `import type { Foo as Bar }` — алиас типа в импорте типов.
21
+
22
+ ## Требование
23
+
24
+ - На **публичной границе модуля** (то, что **экспортируется** из файла / barrel, и то, что сразу **присваивается импортированным символам** с принудительным приведением) **не использовать** `as Тип` для «подгонки» типов, если можно обойтись нормальной типизацией.
25
+
26
+ ## Предпочитать вместо `as`
27
+
28
+ - явную аннотацию: `const x: T = ...` / `function f(): T`;
29
+ - **дженерики** у функций и классов;
30
+ - **`satisfies`** (когда нужно проверить совместимость без сужения до `any`);
31
+ - сужение **`unknown`** после проверки (type guards, `zod` и т.п.);
32
+ - правку **исходных типов/DTO/мапперов**, а не assertion на выходе.
33
+
34
+ ## Когда `as` допустим
35
+
36
+ - взаимодействие с **не типизированными** или некорректно типизированными внешними модулями, где нет разумной альтернативы;
37
+ - узкие места после **валидации** данных, если типовый гард всё ещё не выразить без шума (предпочтительно всё же guard/`satisfies`);
38
+ - **`as const`** — когда нужны литеральные типы и широкий вывод ломает контракт (это отдельный механизм; применять по делу, не как замену типизации API).
39
+ - блок **`catch (error)`** после вызова HTTP через общий клиент: по возможности сужать через **`instanceof`** на **класс ошибки транспорта** из `@/types` (какой именно — по существующей реализации) и работать с уже суженным типом; голый **`as` к тому же типу** — только если `instanceof` недоступен (иной источник выброса) и осознанно.
40
+
41
+ ## Примеры
42
+
43
+ ```typescript
44
+ // ❌ Плохо: assertion на экспортируемом API
45
+ export const config = loadRaw() as AppConfig
46
+
47
+ // ✅ Лучше: аннотация + проверка или маппер
48
+ export const config: AppConfig = mapToAppConfig(loadRaw())
49
+
50
+ // ❌ Плохо: сразу после импорта «ломаем» тип
51
+ import { getData } from './api'
52
+ export const data = getData() as MyDto[]
53
+
54
+ // ✅ Лучше: типизировать getData / обернуть типобезопасной функцией
55
+ ```
56
+
57
+ ## Требование к агенту
58
+
59
+ При ревью и генерации кода **не добавлять** новые `as Тип` на экспортируемые сущности и на цепочку import → export без явной необходимости; по возможности исправлять контракт типов в источнике.
60
+ - В слайсах и сервисах при обработке ошибок API сначала рассматривать **`instanceof`** на класс ошибки транспорта из `@/types` по образцу существующего кода (`http-client.mdc`, `store-rtk.mdc`).
@@ -0,0 +1,16 @@
1
+ ---
2
+ description: Перед командами в терминале определять менеджер пакетов репозитория и использовать только его
3
+ alwaysApply: true
4
+ ---
5
+
6
+ # Менеджер пакетов (терминал)
7
+
8
+ Перед **`npm install` / `yarn` / `pnpm` / `bun`** и **`… run …`** определи менеджер репозитория и **используй только его**.
9
+
10
+ ## Как определить
11
+
12
+ 1. **`packageManager`** в `package.json` (корень или `app/package.json`).
13
+ 2. **Lockfile** рядом: `yarn.lock` → yarn; `pnpm-lock.yaml` → pnpm; `package-lock.json` → npm; `bun.lock(b)` → bun.
14
+ 3. Если неоднозначно — где `node_modules` и какой lockfile в CI.
15
+
16
+ Рабочий каталог для scripts — **`app/`**. Примеры: `yarn lint`, `pnpm run test`. Не угадывай — проверь файлы.
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  description: Playwright Agents (planner/generator/healer) configuration for e2e structure in app/__tests__/e2e
3
- alwaysApply: true
3
+ globs: app/__tests__/e2e/**/*
4
+ alwaysApply: false
4
5
  ---
5
6
 
6
7
  # Playwright Agents in this project
@@ -0,0 +1,40 @@
1
+ ---
2
+ description: Прогон ESLint и Stylelint после изменений кода. Requestable — подгружать после правок app/**; агенты обязаны запускать после code edits.
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Линтеры после изменений кода
7
+
8
+ **Requestable, но обязателен при изменениях кода:** правило не always-on (экономия контекста); после правок исходников агент **должен** следовать этому чеклисту.
9
+
10
+ ## Когда применять
11
+
12
+ После **любого** изменения исходников в `app/**` (TS/TSX/JS/MJS, CSS, styled/Linaria в `.ts`/`.tsx`).
13
+
14
+ Исключения: правки документации вне `app/`, конфигов CI, `.cursor/rules/**`, если исполняемый код приложения не менялся.
15
+
16
+ **Pipeline exception:** если задача идёт через agent team и следующий шаг — `build-verifier`, developer может ограничиться lint/type-check **изменённых файлов**; полный прогон — обязанность `build-verifier`. В single-agent режиме (без pipeline) — всегда полный прогон.
17
+
18
+ ## Обязательные команды
19
+
20
+ Рабочий каталог — **`app/`**. Менеджер пакетов — **`package-manager.mdc`**.
21
+
22
+ 1. **`lint:js`** — полный ESLint по проекту.
23
+ 2. **`lint:css`** — полный Stylelint (`**/*.{css,ts}`).
24
+
25
+ Точечный lint на один файл **не заменяет** полный прогон перед завершением задачи (кроме pipeline exception выше).
26
+
27
+ ## Алгоритм
28
+
29
+ 1. Завершить правки кода.
30
+ 2. Запустить **`lint:js`** и **`lint:css`** из `app/`.
31
+ 3. Проанализировать весь вывод; исправить errors/warnings в изменённых файлах; для Stylelint — **`lint:css --fix`** если автоисправимо.
32
+ 4. Повторить до exit code 0 или зафиксировать блокер в ответе пользователю.
33
+ 5. **`type-check`** при изменениях TypeScript. CI-уровень: **`lint`** (= `lint:js` + `lint:css` + `type-check`).
34
+
35
+ ## Что исправлять
36
+
37
+ - **Errors** — обязательно.
38
+ - **Warnings** — обязательно в файлах задачи; вне скоупа — упомянуть, если мешают нулевому exit code.
39
+
40
+ Конфиги: `app/eslint.config.mjs`, `app/.stylelintrc` (порядок CSS — `css-property-order-stylelint.mdc`).
@@ -0,0 +1,48 @@
1
+ ---
2
+ description: Импорт доменных типов и API только через публичные barrel @/types и @/api
3
+ globs:
4
+ - app/src/ui/**/*
5
+ - app/src/store/**/*
6
+ - app/src/lib/**/*
7
+ - app/src/types/**/*
8
+ - app/src/api/**/*
9
+ alwaysApply: false
10
+ ---
11
+
12
+ # Публичные импорты (`@/types`, `@/api`)
13
+
14
+ **Коллизии:** импорт типов — раздел `@/types` ниже; API вне `app/src/api/**` — раздел `@/api` ниже (дублирует ESLint `no-restricted-imports` в `app/eslint.config.mjs`).
15
+
16
+ ## `@/types`
17
+
18
+ - **Публичный API типов** — barrel `app/src/types/index.ts`; импортировать типы только как `@/types` (или `@/types/index`).
19
+ - **Запрещено** обходить barrel: `@/types/<что‑угодно>`, кроме enum.
20
+ - **Enum** — только `@/types/enums` / `@/types/enums.ts`.
21
+ - Внутри `app/src/types/**` — относительные импорты между файлами слоя.
22
+
23
+ ```typescript
24
+ // ✅
25
+ import type { TUserProfile } from '@/types'
26
+ import { SomeEnum } from '@/types/enums'
27
+
28
+ // ❌
29
+ import type { TUserProfile } from '@/types/User.types'
30
+ ```
31
+
32
+ Новые публичные типы — реэкспорт в `app/src/types/index.ts` по **`layer-barrel-exports.mdc`**.
33
+
34
+ ## `@/api`
35
+
36
+ - **Публичный API** — barrel `app/src/api/index.ts`. Вне `app/src/api/**` — только `import … from '@/api'` (или `@/api/index`).
37
+ - **Запрещено** снаружи слоя: `@/api/<что‑угодно>`, кроме `@/api/index`.
38
+ - Внутри `app/src/api/**` — относительные импорты и `@/api/services/**`, `@/api/clients/**`.
39
+
40
+ ```typescript
41
+ // ✅ в store, UI, lib вне app/src/api
42
+ import { MedcardApiService } from '@/api'
43
+
44
+ // ❌ снаружи app/src/api
45
+ import { MedcardApiService } from '@/api/services/MedcardApiService/MedcardApiService'
46
+ ```
47
+
48
+ Новые публичные символы API — реэкспорт в `app/src/api/index.ts` по **`layer-barrel-exports.mdc`**.
@@ -0,0 +1,37 @@
1
+ ---
2
+ description: Accessibility при написании React UI — семантика, формы, focus, keyboard
3
+ globs: app/src/ui/**/*.tsx,app/src/ui/**/*.ts
4
+ alwaysApply: false
5
+ ---
6
+
7
+ # A11y при разработке UI
8
+
9
+ Reviewer (`accessibility-reviewer`) проверяет diff; эти правила — **при написании** кода.
10
+
11
+ ## Семантика и ARIA
12
+
13
+ - Предпочитать **нативные элементы** (`button`, `a`, `label`, `input`) вместо `div` с `onClick`.
14
+ - **`role` / `aria-*`** — только когда нативного аналога нет; не дублировать то, что даёт семантика.
15
+ - Заголовки — иераархия `h1`–`h6` без пропусков уровней ради стилей.
16
+
17
+ ## Формы
18
+
19
+ - Каждый input связан с **`label`** (`htmlFor` / `id` или обёртка).
20
+ - Сообщения об ошибках — **`aria-describedby`**, `aria-invalid` при validation errors.
21
+ - Кнопки submit vs button — явный `type`.
22
+
23
+ ## Клавиатура и focus
24
+
25
+ - Все интерактивные элементы **достижимы с Tab** и активируются Enter/Space где ожидается.
26
+ - **Modals/drawers** — focus trap, возврат focus на trigger при закрытии, Esc закрывает (если по UX).
27
+ - Не удалять видимый **focus outline** без замены на доступный custom focus style.
28
+
29
+ ## Контент
30
+
31
+ - Изображения — **`alt`** (пустой `alt` только для декора).
32
+ - Иконки-кнопки — **`aria-label`** или visually hidden text.
33
+ - Динамические обновления — `aria-live` для критичных status/error (умеренно).
34
+
35
+ ## Проверка
36
+
37
+ - При сомнении — devtools a11y tree или `accessibility-reviewer` в pipeline для UI-heavy фич.