@mrciphersmith/keryx 0.2.97 → 0.2.99

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 (210) hide show
  1. package/dist/cli.js +4583 -2702
  2. package/dist/core.js +40 -2
  3. package/package.json +1 -1
  4. package/src/gdskills/bundled/rules/core/api-contracts.mdc +1 -0
  5. package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
  6. package/src/gdskills/bundled/rules/core/code-style-patterns.mdc +1 -0
  7. package/src/gdskills/bundled/rules/core/database-patterns.mdc +1 -0
  8. package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
  9. package/src/gdskills/bundled/rules/core/documentation-management.mdc +33 -38
  10. package/src/gdskills/bundled/rules/core/error-handling.mdc +1 -11
  11. package/src/gdskills/bundled/rules/core/execution-metrics.md +1 -2
  12. package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +1 -0
  13. package/src/gdskills/bundled/rules/core/git-concurrency.mdc +101 -0
  14. package/src/gdskills/bundled/rules/core/implementation-plans.mdc +23 -11
  15. package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +1 -0
  16. package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +1 -0
  17. package/src/gdskills/bundled/rules/core/playwright-testing.mdc +1 -0
  18. package/src/gdskills/bundled/rules/core/requirements-management.mdc +15 -11
  19. package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +29 -14
  20. package/src/gdskills/bundled/rules/core/shared-definitions.mdc +1 -1
  21. package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +9 -5
  22. package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +156 -23
  23. package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +1 -0
  24. package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
  25. package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
  26. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +67 -74
  27. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +24 -8
  28. package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +2 -2
  29. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +12 -22
  30. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +44 -31
  31. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +2 -2
  32. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +1 -1
  33. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +4 -4
  34. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +2 -2
  35. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +20 -6
  36. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +67 -9
  37. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +6 -6
  38. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
  39. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +45 -5
  40. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +88 -32
  41. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +52 -41
  42. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
  43. package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
  44. package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
  45. package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
  46. package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
  47. package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
  48. package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
  49. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +29 -4
  50. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
  51. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
  52. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
  53. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
  54. package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
  55. package/src/gdskills/bundled/skills/planning/interview/SKILL.md +30 -8
  56. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +33 -7
  57. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
  58. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
  59. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
  60. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
  61. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
  62. package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
  63. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +27 -10
  64. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
  65. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
  66. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
  67. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
  68. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
  69. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
  70. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
  71. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
  72. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
  73. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
  74. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
  75. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
  76. package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
  77. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +27 -3
  78. package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +29 -4
  79. package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
  80. package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +25 -5
  81. package/src/gdskills/bundled/skills/quality/commit/SKILL.md +26 -5
  82. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +25 -4
  83. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +26 -5
  84. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +27 -4
  85. package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
  86. package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
  87. package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
  88. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +30 -9
  89. package/src/gdskills/bundled/skills/quality/pr/SKILL.md +25 -5
  90. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +27 -4
  91. package/src/gdskills/bundled/skills/quality/push/SKILL.md +25 -4
  92. package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
  93. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
  94. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +31 -5
  95. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +32 -11
  96. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +42 -7
  97. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +43 -3
  98. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +46 -4
  99. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +46 -6
  100. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +5 -5
  101. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +5 -6
  102. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +6 -6
  103. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +37 -3
  104. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +38 -4
  105. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +4 -6
  106. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +37 -3
  107. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +5 -7
  108. package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +24 -3
  109. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +5 -5
  110. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +49 -64
  111. package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +1 -2
  112. package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +1 -5
  113. package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +53 -9
  114. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +11 -11
  115. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +9 -8
  116. package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
  117. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +6 -4
  118. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +5 -5
  119. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +41 -3
  120. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +2 -2
  121. package/src/gdskills/bundled/rules/core/review-agent-profile.mdc +0 -49
  122. package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +0 -48
  123. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -353
  124. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -353
  125. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -353
  126. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -353
  127. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
  128. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
  129. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
  130. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
  131. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -434
  132. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -434
  133. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -434
  134. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -434
  135. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
  136. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
  137. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
  138. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
  139. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
  140. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
  141. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
  142. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
  143. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
  144. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
  145. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2190
  146. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2190
  147. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2190
  148. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2190
  149. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -659
  150. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -659
  151. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -659
  152. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -659
  153. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
  154. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
  155. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
  156. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
  157. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
  158. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
  159. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
  160. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
  161. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
  162. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
  163. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
  164. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
  165. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
  166. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
  167. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
  168. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
  169. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
  170. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
  171. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
  172. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
  173. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
  174. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
  175. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
  176. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
  177. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
  178. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
  179. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
  180. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
  181. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
  182. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
  183. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
  184. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
  185. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
  186. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
  187. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
  188. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
  189. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -75
  190. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -75
  191. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -339
  192. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -339
  193. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -339
  194. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -339
  195. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
  196. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
  197. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
  198. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
  199. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
  200. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
  201. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
  202. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
  203. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
  204. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
  205. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
  206. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
  207. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
  208. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
  209. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
  210. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +0 -168
@@ -1,259 +0,0 @@
1
- ---
2
- name: code-mobx-store-review
3
- description: "Targeted MobX store and state logic review. Checks store/actions/computed/reactions, async runInAction, state typing, View↔Store boundaries. Use when: reviewing MobX changes, state management validation."
4
- triggers:
5
- - "Review MobX store"
6
- - "Check store changes"
7
- - "MobX review"
8
- metadata:
9
- author: "MrCipherSmith"
10
- version: "1.1.0"
11
- category: "review"
12
- compatible_harnesses: "cursor,codex,zed,opencode"
13
- stack_requires: "mobx"
14
- license: "MIT"
15
- ---
16
-
17
- ---
18
-
19
- # Code MobX Store Review (только текущая ветка)
20
-
21
- Проводи ревью только изменений текущей ветки от merge-base с родительской веткой. Фокусируйся на корректности состояния, MobX-паттернах и границах архитектуры.
22
-
23
- ## Scope
24
-
25
- - Если пользователь **не передал commit hash/range**, ревьюируй полный срез от merge-base до рабочего дерева:
26
- - закоммиченные изменения (`BASE_SHA..HEAD`)
27
- - локальные (`staged/unstaged/untracked`)
28
- - Если пользователь **явно передал commit hash/range**, ревьюируй только его.
29
- - Не ревьюй легаси вне измененного скоупа.
30
- - Привязывай замечания к измененным строкам в diff.
31
-
32
- ## Scope Detection
33
-
34
- See shared script: `skills/shared/git-merge-base.md`
35
-
36
- Run the script from that file to determine MERGE_BASE and SCOPE before proceeding with the review.
37
-
38
- ### Команды сбора изменений
39
-
40
- ```bash
41
- git status
42
- git log --oneline "${BASE_SHA}..HEAD"
43
- git diff --name-status --find-renames "${BASE_SHA}..HEAD"
44
- git diff --find-renames "${BASE_SHA}..HEAD"
45
- git diff --name-status --find-renames "${BASE_SHA}"
46
- git diff --find-renames "${BASE_SHA}"
47
- git ls-files --others --exclude-standard
48
- ```
49
-
50
- ## MobX review checklist
51
-
52
- ### Store structure
53
- - Store-класс должен иметь `makeObservable(this)` в конструкторе.
54
- - Состояние хранится в `@observable`/`@observable.shallow`/`@observable.ref`.
55
- - Производные значения в `@computed`, а не в View.
56
-
57
- ### Member ordering
58
- Проверяй порядок членов класса (соответствие `@typescript-eslint/member-ordering` и проектной конвенции):
59
- 1. `@observable` поля (публичное состояние, без модификатора)
60
- 2. `private` поля (внутреннее состояние: `disposed`, `initialized`, и т.д.)
61
- 3. `constructor`
62
- 4. `@computed` геттеры
63
- 5. `dispose()` — lifecycle очистки
64
- 6. `init()` / `onMount()` — lifecycle инициализации
65
- 7. `@action.bound` методы — UI-facing actions
66
- 8. `private` методы — API-вызовы и внутренняя логика
67
-
68
- ### Member accessibility modifiers
69
- ESLint: `@typescript-eslint/explicit-member-accessibility: ["error", { accessibility: "no-public" }]` — слово `public` **запрещено**.
70
-
71
- - *(без модификатора)*: `@observable` поля, `@computed` геттеры, `@action.bound` методы, `dispose()`, `init()` — публичный API стора.
72
- - `private`: внутреннее состояние (`disposed`, `initialized`), хелпер-методы, методы с API-вызовами (`fetchX`, `performX`), inter-store callbacks (`onChangeX`, `onFireX`, `handleX`, `syncX`).
73
- - `private readonly`: инжектированные через конструктор зависимости, неизменяемая конфигурация (`id`, `context`).
74
- - `readonly`: неизменяемые публичные identity-поля (`pipelineType`, `contextActions`).
75
- - `protected`: только в абстрактных базовых классах для точек расширения.
76
-
77
- Флаги ревью:
78
- - Использование слова `public` — **ошибка ESLint** (error level).
79
- - `private` поле которое можно сделать `private readonly` — предложи `readonly`.
80
- - Отсутствие `private` на внутреннем состоянии или хелпер-методах — **warning**.
81
-
82
- ### Actions and async
83
- - Любая мутация состояния в действиях (`@action.bound` или через `runInAction`).
84
- - После `await` для мутаций использовать `runInAction`.
85
- - Избегать прямых мутаций store извне action-слоя.
86
-
87
- ### Action binding rules
88
- - **`@action.bound`**: только для методов вызываемых из UI (компонентов). Это тонкие обёртки которые делегируют в private-методы.
89
- - **Private метод + `runInAction`**: для методов содержащих API-вызовы и мутации состояния.
90
- - **Никогда** не использовать `@action.bound` на private-методах.
91
- - **Исключение**: `@action.bound private` допустим для inter-store callbacks — методов, передаваемых как bound-ссылки в дочерние/сиблинг сторы (например `new CodeEditorStore(this.onChangeEditorState)`).
92
-
93
- Флаги ревью:
94
- - `@action.bound` метод содержит API-вызов напрямую — **warning**: вынести API в private метод.
95
- - `@action.bound` на private методе (кроме inter-store callbacks) — **warning**: убрать декоратор, использовать `runInAction` внутри.
96
- - Метод вызываемый из другого стора помечен `@action.bound` вместо plain method — **suggestion**.
97
-
98
- ### Inter-store callbacks and internal handlers
99
- Методы служащие **внутренними callback'ами** между сторами или внутренними обработчиками событий ОБЯЗАНЫ быть `private`. Они НЕ являются частью публичного API стора.
100
-
101
- **Паттерны имён которые ОБЯЗАНЫ быть `private`:**
102
- - `onChangeEditorState(state)` — callback получающий состояние от дочернего/сиблинг стора
103
- - `onFireExecutorChange()` — внутренний sync-обработчик при смене executor
104
- - `onChangeX(value)` — обработчик для внутренней синхронизации состояния между сторами
105
- - `handleX()`, `syncX()` — любой метод внутренней координации
106
-
107
- **Правило решения:** Спроси "Этот метод вызывается из React-компонента через JSX/event handler?" Если НЕТ — он `private`.
108
-
109
- Флаги ревью:
110
- - Публичный метод с паттерном `onChangeX`, `onFireX`, `handleX`, `syncX` который не вызывается из компонентов — **warning**: сделать `private`.
111
- - Inter-store callback без `private` — **warning**: нарушение инкапсуляции стора.
112
-
113
- ### Bidirectional sync bounce protection
114
- Когда два стора синхронизируют состояние **в обоих направлениях** (Store A → Store B и Store B → Store A), как минимум одно направление ОБЯЗАНО иметь equality guard (`if (newValue !== currentValue)`) перед записью в другой стор, чтобы предотвратить бесконечный цикл callback'ов.
115
-
116
- ```typescript
117
- // CORRECT — equality guard prevents bounce
118
- private onChangeEditorState(editorState: ICodeEditorState) {
119
- this.setRawScript(editorState.script);
120
- const codeExecutorId = this.codeExecutor?.id;
121
- if (codeExecutorId && this.codeEditorStore.executorId !== codeExecutorId) {
122
- this.codeEditorStore.setExecutorId(codeExecutorId);
123
- }
124
- }
125
-
126
- // WRONG — no guard, infinite loop
127
- private onChangeEditorState(editorState: ICodeEditorState) {
128
- this.setRawScript(editorState.script);
129
- const codeExecutorId = this.codeExecutor?.id;
130
- if (codeExecutorId) {
131
- this.codeEditorStore.setExecutorId(codeExecutorId); // bounces back
132
- }
133
- }
134
- ```
135
-
136
- Флаги ревью:
137
- - Bidirectional store sync без equality guard — **critical**: риск бесконечного цикла callback'ов.
138
- - Store A пишет в Store B в callback'е от Store B без проверки `!==` — **critical**.
139
-
140
- ### Truthy vs equality guards for optional values
141
- Для guard'ов обновления состояния предпочитай **equality comparison** (`!==`) вместо **truthy checks** (`if (value && ...)`) для optional/nullable полей. Truthy guard блокирует пропагацию легитимных `undefined`/`null`/`0`/`""` значений.
142
-
143
- ```typescript
144
- // WRONG — truthy guard blocks clearing
145
- if (executor && executor.id !== this.executorId) {
146
- this.setExecutorId(executor.id);
147
- }
148
- // executor = undefined → ничего не происходит → stale value
149
-
150
- // CORRECT — equality guard allows clearing
151
- if (executor?.id !== this.executorId) {
152
- this.setExecutorId(executor?.id);
153
- }
154
- // executor = undefined → executorId = undefined → поле очищено
155
- ```
156
-
157
- Флаги ревью:
158
- - Truthy guard (`if (x && x !== y)`) на optional/nullable поле — **warning**: блокирует пропагацию `undefined`/falsy clearing.
159
- - `if (value)` вместо `if (value !== currentValue)` в sync-логике между сторами — **warning**: потенциально блокирует clearing.
160
-
161
- ### API calls placement
162
- - API/IO вызовы **только** в `private` методах стора.
163
- - `@action.bound` методы — тонкие: guard-check → делегирование в private метод.
164
- - Компоненты **никогда** не вызывают API напрямую.
165
-
166
- Флаги ревью:
167
- - API-вызов внутри `@action.bound` метода — **warning**: вынести в private метод.
168
- - API-вызов в компоненте — **critical**: перенести в стор.
169
-
170
- ### Lifecycle initialization
171
- - `init()` / `onMount()` дочернего стора вызывается из **родительского стора**, не из component `useEffect`.
172
- - Компоненты **не должны** триггерить загрузку данных стора через `useEffect`. Родительский стор оркестрирует lifecycle дочерних сторов.
173
- - `dispose()` вызывается родительским стором в его `onUnmount()` для предотвращения stale-state обновлений.
174
-
175
- Флаги ревью:
176
- - Component `useEffect` вызывает `store.loadX()` или `store.init()` — **warning**: перенести вызов в родительский стор `onMount`.
177
- - Отсутствие `dispose()` / disposed guard в сторе с async операциями — **warning**.
178
- - Parent store не вызывает `child.dispose()` в `onUnmount()` — **warning**.
179
-
180
- ### View ↔ Store boundaries
181
- - Бизнес-логика и IO остаются в Store/Service, не во View.
182
- - Компоненты, читающие observable, должны быть `observer(...)`.
183
- - `useEffect` не должен подменять lifecycle store-логики.
184
-
185
- ### TypeScript safety
186
- - Не использовать `any` и небезопасные касты.
187
- - Использовать явные интерфейсы для state и публичного API store.
188
- - Избегать `!` без строгого доказательства инициализации.
189
-
190
- ## Output format
191
-
192
- ```markdown
193
- ## Summary
194
- - [1-3 bullets по итогам]
195
-
196
- ## Scope
197
- - Branch: `<BRANCH>`
198
- - Parent ref: `<PARENT>`
199
- - Merge-base: `<BASE_SHA>`
200
- - Scope mode: `<default-with-uncommitted | explicit-hash-range>`
201
-
202
- ## Critical issues (must fix)
203
- ### [Короткий заголовок]
204
- - **Rule**: [core/mobx-store-template.mdc / core/code-style-patterns.mdc]
205
- - **Why**: [почему это риск]
206
- - **Where**: `path/to/file.ts` (строки из diff)
207
- - **Fix**: [минимальное исправление]
208
- - **Proposed patch**:
209
- ```diff
210
- [unified diff]
211
- ```
212
-
213
- ## Warnings
214
- [тот же формат]
215
-
216
- ## Suggestions
217
- [точечные улучшения без расширения scope]
218
-
219
- ## File-by-file notes
220
- - `path/to/file`: [краткие заметки]
221
- ```
222
-
223
- ## Rules of engagement
224
-
225
- - Не предлагай новые библиотеки без запроса.
226
- - Если есть несколько вариантов, дай один default и один краткий альтернативный.
227
- - Исправления предлагай как минимальные патчи, не переписывай крупные блоки без необходимости.
228
-
229
- ---
230
-
231
- ## Scope Boundaries
232
-
233
- This skill covers **MobX store and state logic** — targeted review of store internals following `mobx-store-template.mdc` and `code-style-patterns.mdc`.
234
-
235
- | Concern | This skill | Use instead |
236
- |---------|-----------|-------------|
237
- | Store structure, actions, computed, reactions, async runInAction | ✅ YES | — |
238
- | View↔Store boundary violations | ✅ YES | — |
239
- | General code quality, readability, tests | ❌ NO | `code-ai-review` |
240
- | Learned-convention enforcement | ❌ NO | `code-learned-review` |
241
- | Naming/style/architecture patterns outside stores | ❌ NO | `code-style-review` |
242
-
243
- ---
244
-
245
- ## Job Context Awareness
246
-
247
- When dispatched by `job-orchestrator` as part of a job pipeline, the prompt MAY include:
248
-
249
- ```
250
- JOB_NAME: <job-name>
251
- CONTEXT_PATH: .metaproject/jobs/<job-name>/ai/context.md
252
- ```
253
-
254
- If provided and the file exists, read the context document before starting the review. Use it to:
255
- - Understand which libraries and patterns were intentionally chosen for the implementation
256
- - Validate MobX patterns against documented project conventions
257
- - Avoid flagging intentional architectural decisions as issues
258
-
259
- If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
@@ -1,259 +0,0 @@
1
- ---
2
- name: code-mobx-store-review
3
- description: "Targeted MobX store and state logic review. Checks store/actions/computed/reactions, async runInAction, state typing, View↔Store boundaries. Use when: reviewing MobX changes, state management validation."
4
- triggers:
5
- - "Review MobX store"
6
- - "Check store changes"
7
- - "MobX review"
8
- metadata:
9
- author: "MrCipherSmith"
10
- version: "1.1.0"
11
- category: "review"
12
- compatible_harnesses: "cursor,codex,zed,opencode"
13
- stack_requires: "mobx"
14
- license: "MIT"
15
- ---
16
-
17
- ---
18
-
19
- # Code MobX Store Review (только текущая ветка)
20
-
21
- Проводи ревью только изменений текущей ветки от merge-base с родительской веткой. Фокусируйся на корректности состояния, MobX-паттернах и границах архитектуры.
22
-
23
- ## Scope
24
-
25
- - Если пользователь **не передал commit hash/range**, ревьюируй полный срез от merge-base до рабочего дерева:
26
- - закоммиченные изменения (`BASE_SHA..HEAD`)
27
- - локальные (`staged/unstaged/untracked`)
28
- - Если пользователь **явно передал commit hash/range**, ревьюируй только его.
29
- - Не ревьюй легаси вне измененного скоупа.
30
- - Привязывай замечания к измененным строкам в diff.
31
-
32
- ## Scope Detection
33
-
34
- See shared script: `skills/shared/git-merge-base.md`
35
-
36
- Run the script from that file to determine MERGE_BASE and SCOPE before proceeding with the review.
37
-
38
- ### Команды сбора изменений
39
-
40
- ```bash
41
- git status
42
- git log --oneline "${BASE_SHA}..HEAD"
43
- git diff --name-status --find-renames "${BASE_SHA}..HEAD"
44
- git diff --find-renames "${BASE_SHA}..HEAD"
45
- git diff --name-status --find-renames "${BASE_SHA}"
46
- git diff --find-renames "${BASE_SHA}"
47
- git ls-files --others --exclude-standard
48
- ```
49
-
50
- ## MobX review checklist
51
-
52
- ### Store structure
53
- - Store-класс должен иметь `makeObservable(this)` в конструкторе.
54
- - Состояние хранится в `@observable`/`@observable.shallow`/`@observable.ref`.
55
- - Производные значения в `@computed`, а не в View.
56
-
57
- ### Member ordering
58
- Проверяй порядок членов класса (соответствие `@typescript-eslint/member-ordering` и проектной конвенции):
59
- 1. `@observable` поля (публичное состояние, без модификатора)
60
- 2. `private` поля (внутреннее состояние: `disposed`, `initialized`, и т.д.)
61
- 3. `constructor`
62
- 4. `@computed` геттеры
63
- 5. `dispose()` — lifecycle очистки
64
- 6. `init()` / `onMount()` — lifecycle инициализации
65
- 7. `@action.bound` методы — UI-facing actions
66
- 8. `private` методы — API-вызовы и внутренняя логика
67
-
68
- ### Member accessibility modifiers
69
- ESLint: `@typescript-eslint/explicit-member-accessibility: ["error", { accessibility: "no-public" }]` — слово `public` **запрещено**.
70
-
71
- - *(без модификатора)*: `@observable` поля, `@computed` геттеры, `@action.bound` методы, `dispose()`, `init()` — публичный API стора.
72
- - `private`: внутреннее состояние (`disposed`, `initialized`), хелпер-методы, методы с API-вызовами (`fetchX`, `performX`), inter-store callbacks (`onChangeX`, `onFireX`, `handleX`, `syncX`).
73
- - `private readonly`: инжектированные через конструктор зависимости, неизменяемая конфигурация (`id`, `context`).
74
- - `readonly`: неизменяемые публичные identity-поля (`pipelineType`, `contextActions`).
75
- - `protected`: только в абстрактных базовых классах для точек расширения.
76
-
77
- Флаги ревью:
78
- - Использование слова `public` — **ошибка ESLint** (error level).
79
- - `private` поле которое можно сделать `private readonly` — предложи `readonly`.
80
- - Отсутствие `private` на внутреннем состоянии или хелпер-методах — **warning**.
81
-
82
- ### Actions and async
83
- - Любая мутация состояния в действиях (`@action.bound` или через `runInAction`).
84
- - После `await` для мутаций использовать `runInAction`.
85
- - Избегать прямых мутаций store извне action-слоя.
86
-
87
- ### Action binding rules
88
- - **`@action.bound`**: только для методов вызываемых из UI (компонентов). Это тонкие обёртки которые делегируют в private-методы.
89
- - **Private метод + `runInAction`**: для методов содержащих API-вызовы и мутации состояния.
90
- - **Никогда** не использовать `@action.bound` на private-методах.
91
- - **Исключение**: `@action.bound private` допустим для inter-store callbacks — методов, передаваемых как bound-ссылки в дочерние/сиблинг сторы (например `new CodeEditorStore(this.onChangeEditorState)`).
92
-
93
- Флаги ревью:
94
- - `@action.bound` метод содержит API-вызов напрямую — **warning**: вынести API в private метод.
95
- - `@action.bound` на private методе (кроме inter-store callbacks) — **warning**: убрать декоратор, использовать `runInAction` внутри.
96
- - Метод вызываемый из другого стора помечен `@action.bound` вместо plain method — **suggestion**.
97
-
98
- ### Inter-store callbacks and internal handlers
99
- Методы служащие **внутренними callback'ами** между сторами или внутренними обработчиками событий ОБЯЗАНЫ быть `private`. Они НЕ являются частью публичного API стора.
100
-
101
- **Паттерны имён которые ОБЯЗАНЫ быть `private`:**
102
- - `onChangeEditorState(state)` — callback получающий состояние от дочернего/сиблинг стора
103
- - `onFireExecutorChange()` — внутренний sync-обработчик при смене executor
104
- - `onChangeX(value)` — обработчик для внутренней синхронизации состояния между сторами
105
- - `handleX()`, `syncX()` — любой метод внутренней координации
106
-
107
- **Правило решения:** Спроси "Этот метод вызывается из React-компонента через JSX/event handler?" Если НЕТ — он `private`.
108
-
109
- Флаги ревью:
110
- - Публичный метод с паттерном `onChangeX`, `onFireX`, `handleX`, `syncX` который не вызывается из компонентов — **warning**: сделать `private`.
111
- - Inter-store callback без `private` — **warning**: нарушение инкапсуляции стора.
112
-
113
- ### Bidirectional sync bounce protection
114
- Когда два стора синхронизируют состояние **в обоих направлениях** (Store A → Store B и Store B → Store A), как минимум одно направление ОБЯЗАНО иметь equality guard (`if (newValue !== currentValue)`) перед записью в другой стор, чтобы предотвратить бесконечный цикл callback'ов.
115
-
116
- ```typescript
117
- // CORRECT — equality guard prevents bounce
118
- private onChangeEditorState(editorState: ICodeEditorState) {
119
- this.setRawScript(editorState.script);
120
- const codeExecutorId = this.codeExecutor?.id;
121
- if (codeExecutorId && this.codeEditorStore.executorId !== codeExecutorId) {
122
- this.codeEditorStore.setExecutorId(codeExecutorId);
123
- }
124
- }
125
-
126
- // WRONG — no guard, infinite loop
127
- private onChangeEditorState(editorState: ICodeEditorState) {
128
- this.setRawScript(editorState.script);
129
- const codeExecutorId = this.codeExecutor?.id;
130
- if (codeExecutorId) {
131
- this.codeEditorStore.setExecutorId(codeExecutorId); // bounces back
132
- }
133
- }
134
- ```
135
-
136
- Флаги ревью:
137
- - Bidirectional store sync без equality guard — **critical**: риск бесконечного цикла callback'ов.
138
- - Store A пишет в Store B в callback'е от Store B без проверки `!==` — **critical**.
139
-
140
- ### Truthy vs equality guards for optional values
141
- Для guard'ов обновления состояния предпочитай **equality comparison** (`!==`) вместо **truthy checks** (`if (value && ...)`) для optional/nullable полей. Truthy guard блокирует пропагацию легитимных `undefined`/`null`/`0`/`""` значений.
142
-
143
- ```typescript
144
- // WRONG — truthy guard blocks clearing
145
- if (executor && executor.id !== this.executorId) {
146
- this.setExecutorId(executor.id);
147
- }
148
- // executor = undefined → ничего не происходит → stale value
149
-
150
- // CORRECT — equality guard allows clearing
151
- if (executor?.id !== this.executorId) {
152
- this.setExecutorId(executor?.id);
153
- }
154
- // executor = undefined → executorId = undefined → поле очищено
155
- ```
156
-
157
- Флаги ревью:
158
- - Truthy guard (`if (x && x !== y)`) на optional/nullable поле — **warning**: блокирует пропагацию `undefined`/falsy clearing.
159
- - `if (value)` вместо `if (value !== currentValue)` в sync-логике между сторами — **warning**: потенциально блокирует clearing.
160
-
161
- ### API calls placement
162
- - API/IO вызовы **только** в `private` методах стора.
163
- - `@action.bound` методы — тонкие: guard-check → делегирование в private метод.
164
- - Компоненты **никогда** не вызывают API напрямую.
165
-
166
- Флаги ревью:
167
- - API-вызов внутри `@action.bound` метода — **warning**: вынести в private метод.
168
- - API-вызов в компоненте — **critical**: перенести в стор.
169
-
170
- ### Lifecycle initialization
171
- - `init()` / `onMount()` дочернего стора вызывается из **родительского стора**, не из component `useEffect`.
172
- - Компоненты **не должны** триггерить загрузку данных стора через `useEffect`. Родительский стор оркестрирует lifecycle дочерних сторов.
173
- - `dispose()` вызывается родительским стором в его `onUnmount()` для предотвращения stale-state обновлений.
174
-
175
- Флаги ревью:
176
- - Component `useEffect` вызывает `store.loadX()` или `store.init()` — **warning**: перенести вызов в родительский стор `onMount`.
177
- - Отсутствие `dispose()` / disposed guard в сторе с async операциями — **warning**.
178
- - Parent store не вызывает `child.dispose()` в `onUnmount()` — **warning**.
179
-
180
- ### View ↔ Store boundaries
181
- - Бизнес-логика и IO остаются в Store/Service, не во View.
182
- - Компоненты, читающие observable, должны быть `observer(...)`.
183
- - `useEffect` не должен подменять lifecycle store-логики.
184
-
185
- ### TypeScript safety
186
- - Не использовать `any` и небезопасные касты.
187
- - Использовать явные интерфейсы для state и публичного API store.
188
- - Избегать `!` без строгого доказательства инициализации.
189
-
190
- ## Output format
191
-
192
- ```markdown
193
- ## Summary
194
- - [1-3 bullets по итогам]
195
-
196
- ## Scope
197
- - Branch: `<BRANCH>`
198
- - Parent ref: `<PARENT>`
199
- - Merge-base: `<BASE_SHA>`
200
- - Scope mode: `<default-with-uncommitted | explicit-hash-range>`
201
-
202
- ## Critical issues (must fix)
203
- ### [Короткий заголовок]
204
- - **Rule**: [core/mobx-store-template.mdc / core/code-style-patterns.mdc]
205
- - **Why**: [почему это риск]
206
- - **Where**: `path/to/file.ts` (строки из diff)
207
- - **Fix**: [минимальное исправление]
208
- - **Proposed patch**:
209
- ```diff
210
- [unified diff]
211
- ```
212
-
213
- ## Warnings
214
- [тот же формат]
215
-
216
- ## Suggestions
217
- [точечные улучшения без расширения scope]
218
-
219
- ## File-by-file notes
220
- - `path/to/file`: [краткие заметки]
221
- ```
222
-
223
- ## Rules of engagement
224
-
225
- - Не предлагай новые библиотеки без запроса.
226
- - Если есть несколько вариантов, дай один default и один краткий альтернативный.
227
- - Исправления предлагай как минимальные патчи, не переписывай крупные блоки без необходимости.
228
-
229
- ---
230
-
231
- ## Scope Boundaries
232
-
233
- This skill covers **MobX store and state logic** — targeted review of store internals following `mobx-store-template.mdc` and `code-style-patterns.mdc`.
234
-
235
- | Concern | This skill | Use instead |
236
- |---------|-----------|-------------|
237
- | Store structure, actions, computed, reactions, async runInAction | ✅ YES | — |
238
- | View↔Store boundary violations | ✅ YES | — |
239
- | General code quality, readability, tests | ❌ NO | `code-ai-review` |
240
- | Learned-convention enforcement | ❌ NO | `code-learned-review` |
241
- | Naming/style/architecture patterns outside stores | ❌ NO | `code-style-review` |
242
-
243
- ---
244
-
245
- ## Job Context Awareness
246
-
247
- When dispatched by `job-orchestrator` as part of a job pipeline, the prompt MAY include:
248
-
249
- ```
250
- JOB_NAME: <job-name>
251
- CONTEXT_PATH: .metaproject/jobs/<job-name>/ai/context.md
252
- ```
253
-
254
- If provided and the file exists, read the context document before starting the review. Use it to:
255
- - Understand which libraries and patterns were intentionally chosen for the implementation
256
- - Validate MobX patterns against documented project conventions
257
- - Avoid flagging intentional architectural decisions as issues
258
-
259
- If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.