@mrciphersmith/keryx 0.2.98 → 0.2.100

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 (182) hide show
  1. package/dist/cli.js +4605 -2695
  2. package/dist/core.js +39 -1
  3. package/package.json +1 -1
  4. package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
  5. package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
  6. package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +101 -11
  7. package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
  8. package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
  9. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +19 -3
  10. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +20 -4
  11. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +32 -9
  12. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +18 -4
  13. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +21 -5
  14. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +4 -4
  15. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
  16. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +42 -2
  17. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +23 -9
  18. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +33 -31
  19. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
  20. package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
  21. package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
  22. package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
  23. package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
  24. package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
  25. package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
  26. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +28 -3
  27. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
  28. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
  29. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
  30. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
  31. package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
  32. package/src/gdskills/bundled/skills/planning/interview/SKILL.md +29 -7
  33. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +32 -6
  34. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
  35. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
  36. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
  37. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
  38. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
  39. package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
  40. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +20 -3
  41. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
  42. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
  43. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
  44. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
  45. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
  46. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
  47. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
  48. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
  49. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
  50. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
  51. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
  52. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
  53. package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
  54. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +26 -2
  55. package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +28 -3
  56. package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
  57. package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +24 -4
  58. package/src/gdskills/bundled/skills/quality/commit/SKILL.md +24 -3
  59. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +24 -3
  60. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +25 -4
  61. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +26 -3
  62. package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
  63. package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
  64. package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
  65. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +29 -8
  66. package/src/gdskills/bundled/skills/quality/pr/SKILL.md +24 -4
  67. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +25 -2
  68. package/src/gdskills/bundled/skills/quality/push/SKILL.md +24 -3
  69. package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
  70. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
  71. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +24 -3
  72. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +17 -2
  73. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +40 -5
  74. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +41 -1
  75. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +44 -2
  76. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +44 -4
  77. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +3 -3
  78. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +2 -3
  79. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +4 -4
  80. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +36 -2
  81. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +37 -3
  82. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +2 -4
  83. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +36 -2
  84. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +3 -5
  85. package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +23 -2
  86. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +3 -3
  87. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +9 -29
  88. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +9 -9
  89. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +3 -2
  90. package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
  91. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +4 -2
  92. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +2 -2
  93. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +40 -2
  94. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
  95. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -330
  96. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -330
  97. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -330
  98. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -330
  99. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
  100. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
  101. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
  102. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
  103. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -424
  104. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -424
  105. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -424
  106. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -424
  107. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
  108. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
  109. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
  110. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
  111. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
  112. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
  113. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
  114. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
  115. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
  116. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
  117. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2232
  118. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2232
  119. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2232
  120. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2232
  121. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -668
  122. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -668
  123. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -668
  124. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -668
  125. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
  126. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
  127. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
  128. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
  129. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
  130. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
  131. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
  132. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
  133. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
  134. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
  135. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
  136. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
  137. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
  138. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
  139. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
  140. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
  141. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
  142. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
  143. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
  144. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
  145. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
  146. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
  147. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
  148. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
  149. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
  150. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
  151. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
  152. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
  153. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
  154. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
  155. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
  156. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
  157. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
  158. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
  159. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
  160. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
  161. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -80
  162. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -80
  163. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -345
  164. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -345
  165. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -345
  166. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -345
  167. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
  168. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
  169. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
  170. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
  171. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
  172. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
  173. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
  174. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
  175. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
  176. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
  177. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
  178. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
  179. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
  180. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
  181. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
  182. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +0 -168
@@ -1,11 +1,12 @@
1
1
  ---
2
2
  name: push
3
- description: "Use when pushing the current branch to the remote, especially when upstream tracking or safety checks are needed."
3
+ description: "Use when pushing the current branch to the remote, especially when upstream tracking or safety checks are needed. NOT for creating the commits themselves (use `commit`) or opening a pull request afterwards (use `pr`)."
4
4
  triggers:
5
- - "/push"
5
+ - "push branch"
6
+ - "git push"
7
+ - "publish branch"
6
8
  - "Push changes"
7
9
  - "Push to remote"
8
- - "Push branch"
9
10
  metadata:
10
11
  author: "MrCipherSmith"
11
12
  version: "1.0.0"
@@ -50,3 +51,23 @@ Show result: confirm push success with commit count.
50
51
  - NEVER force push to main/master without double confirmation
51
52
  - NEVER use `--no-verify`
52
53
  - If push is rejected (non-fast-forward), suggest `git pull --rebase` first
54
+
55
+ ## Red Flags
56
+
57
+ | Rationalization | Why it is wrong |
58
+ |---|---|
59
+ | "It was rejected, but `--force-with-lease` is safe enough here" | The lease only compares against the ref you last fetched. A teammate's push that landed since then is still discarded, silently. Rebase and push normally, or ask |
60
+ | "It's my own feature branch, so a force push hurts nobody" | Open PRs, CI runs, review threads and other worktrees read that ref. Rewriting it invalidates all of them. Force only when the user says "force push" in this conversation |
61
+ | "There are uncommitted changes, but they're unrelated to what I'm pushing" | The push ships what is committed, so unrelated work silently stays behind while the branch looks complete to a reviewer. Warn and ask before pushing over a dirty tree |
62
+ | "No upstream is set, so `git push origin HEAD` will do" | That leaves the branch untracked, and every later `git status` / `git push` has to guess. Use `git push -u origin <branch>` so the tracking is recorded once |
63
+ | "The pre-push hook is slow and this is a tiny change" | `--no-verify` is never the answer here — a tiny change is exactly what an unrun hook lets through |
64
+
65
+ ## Verification
66
+
67
+ Do not report the push as done until all of the following hold:
68
+
69
+ - `git status` reports the branch up to date with its upstream
70
+ - `git branch -vv` shows an upstream for the current branch (set with `-u` if it had none)
71
+ - `git log @{upstream}..HEAD --oneline` is empty — nothing left unpushed
72
+ - The report states the commit count pushed and the remote/branch they landed on
73
+ - `--force` was used only if the user asked for it in this conversation, and never against main/master without double confirmation
@@ -0,0 +1,204 @@
1
+ ---
2
+ name: root-cause
3
+ model_tier: deep
4
+ description: |
5
+ Use when a defect exists and nobody can yet say what produces it — a crash, a
6
+ wrong result, a failure a user hits and the suite never sees. The order is
7
+ fixed: reproduce it and write down how, localize before editing anything,
8
+ reduce to the smallest failing case, repair the mechanism rather than the
9
+ symptom, and leave behind a guard that was WATCHED failing without the repair.
10
+ Covers the case the defect refuses to appear: which evidence is admissible,
11
+ when to stop looking, and what to report in place of a fix.
12
+ NOT for: a defect already pinned to a line and a mechanism, where nothing
13
+ remains but writing the patch and its guard.
14
+ triggers:
15
+ - "root cause"
16
+ - "why does this fail"
17
+ - "cannot reproduce"
18
+ - "track down the bug"
19
+ - "debugging"
20
+ - "bisect"
21
+ metadata:
22
+ author: "MrCipherSmith"
23
+ version: "1.0.0"
24
+ category: "quality"
25
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
26
+ license: "MIT"
27
+ ---
28
+
29
+ # Root Cause
30
+
31
+ A defect exists and nobody knows why. Your job is **not** to make the symptom
32
+ stop. It is to name the mechanism that produces it, change that, and leave
33
+ something behind that fails if it ever comes back.
34
+
35
+ The five steps below are an order, not a menu. Every one of them is skipped by
36
+ agents in the same way — forward, into the edit — and each skip costs the step
37
+ after it.
38
+
39
+ ## 1. Reproduce, and write the reproduction down
40
+
41
+ Before any code is read: the exact command, the input, the environment, what you
42
+ expected, what happened, and **how often** — `10/10` and `3/10` are different
43
+ defects with different causes.
44
+
45
+ A fix produced without a reproduction is a guess with a diff attached. It cannot
46
+ be verified, because there is nothing that was failing to stop failing.
47
+
48
+ If the reproduction needs setup (a seeded row, a cleared cache, a second
49
+ process), that setup is part of it. Write it as commands someone else can run.
50
+
51
+ ## 2. Localize before you edit
52
+
53
+ Reading a file top to bottom is not localization; it is hoping. Localization is
54
+ a **search that halves**:
55
+
56
+ - over history — `git bisect` between a known-good and known-bad revision;
57
+ - over the call path — `keryx gdgraph affected <file>` for what reaches the
58
+ site, then a probe at the midpoint of the path;
59
+ - over the input — cut the payload in half, keep the failing half;
60
+ - over the environment — one variable, one flag, one version at a time.
61
+
62
+ Two rules hold for the whole step. **Change one thing and record what happened.**
63
+ And **an edit made "to see what happens" is not a fix** — it either goes away or
64
+ it gets named in the diff as instrumentation.
65
+
66
+ Long output (a bisect run, a failing suite, a log) goes through
67
+ `keryx ctx run -- <cmd>` rather than into the reading window whole.
68
+
69
+ ## 3. Reduce to the smallest failing case
70
+
71
+ Delete everything that can be deleted while it still fails. Each removal that
72
+ keeps the failure is evidence about what does **not** matter, and the residue is
73
+ usually the cause stated in the shortest possible form.
74
+
75
+ A reduced case is also the guard from step 5, already written.
76
+
77
+ ## 4. Name the cause, then repair it
78
+
79
+ Say it in one sentence carrying a **mechanism**, not a location: "the cache key
80
+ omits the tenant id, so the second tenant reads the first tenant's row". "It is
81
+ in `store.ts`" is a location. "It is a race" is a category. Neither is a cause.
82
+
83
+ Then check the repair against that sentence:
84
+
85
+ | The repair | What it actually is |
86
+ |---|---|
87
+ | A guard that returns early when the value is missing | The missing value is the defect; you hid the only thing reporting it |
88
+ | A retry, a longer timeout, a `sleep` | The mechanism is untouched and now it is slower and intermittent |
89
+ | A widened type, a cast, an `any` | The compiler was right; the wrong value is still produced |
90
+ | A changed assertion or an expectation loosened to match | The test was the last thing telling the truth here |
91
+
92
+ Every row above makes the symptom go away. None of them is this skill's output.
93
+
94
+ ## 5. Leave a guard that was seen failing
95
+
96
+ A test written after a fix and never observed red proves the test runs. It does
97
+ not prove it catches anything.
98
+
99
+ So: run the new test against the **unfixed** code and watch it fail. If the fix
100
+ is already applied, undo it in place (never `git stash` — a scoped stash takes
101
+ other people's uncommitted work with it), watch the test fail, restore the fix,
102
+ watch it pass. Record both observations.
103
+
104
+ If the defect cannot be reached from a test — it needs a device, a customer's
105
+ data, real concurrency — say so, and say what the guard would be instead: an
106
+ assertion, a counter, a log line at the decision point.
107
+
108
+ ---
109
+
110
+ ## When it does not reproduce
111
+
112
+ This is the case handled worst, and it is handled worst in one specific way: the
113
+ search for the defect quietly becomes a search for *something wrong*, and a
114
+ plausible-looking repair is shipped for a failure nobody ever saw.
115
+
116
+ ### What is admissible
117
+
118
+ In descending strength:
119
+
120
+ 1. **A failure you produced yourself.** Nothing else is in this class.
121
+ 2. **An artifact of the original failure** — a stack trace, a log line with a
122
+ timestamp, a CI run id, an error string quoted by the reporter, a dump.
123
+ 3. **A path you can show reaches the reported state**, with the input that
124
+ drives it *named and shown to exist*.
125
+ 4. **A measured environment delta** — a version, a locale, a timezone, a clock
126
+ skew, an ordering, a concurrency level you actually varied and observed.
127
+
128
+ Not admissible, at any strength: this looks wrong; this pattern is usually a
129
+ bug; this is the kind of thing that causes that; two readings of the same file
130
+ agreeing. Reading harder produces no new evidence — the file says the same thing
131
+ the third time.
132
+
133
+ ### Widen the attempt before you give up
134
+
135
+ One axis at a time, each attempt and its result recorded: input, environment and
136
+ versions, ordering and concurrency, persisted state (cache, DB, temp files),
137
+ clock and timezone, isolation (the single test vs the whole suite), random seed.
138
+
139
+ For anything intermittent, a count replaces a verdict. Run it 50 times and
140
+ report `1/50`. "It passed when I re-ran it" is not a result.
141
+
142
+ ### When to stop
143
+
144
+ Stop when any of these is true, and stop deliberately rather than by drifting
145
+ into a fix:
146
+
147
+ - the next axis is one you cannot control — production data, a customer's
148
+ machine, hardware you do not have;
149
+ - the budget the task set for reproduction is spent;
150
+ - going further requires changing the code under investigation to see anything
151
+ at all. That is instrumentation, and landing it is a separate decision the
152
+ requester gets to make.
153
+
154
+ ### Report instead of a fix
155
+
156
+ Not reproducing is a result, and it is reportable. What it is not is permission
157
+ to ship a change. The report carries:
158
+
159
+ - every reproduction attempt, one line each, with what happened;
160
+ - the strongest evidence held, labelled with its class from the list above;
161
+ - the hypotheses that survive that evidence — two or three, each with **the
162
+ observation that would kill it**;
163
+ - the instrumentation that would settle it, and where it goes;
164
+ - what was left unchanged.
165
+
166
+ Landing instrumentation alone and stopping is legitimate work. Landing a
167
+ speculative repair and closing the issue is not: if no experiment can tell your
168
+ change from a no-op, nothing was fixed, and the next person's bisect now
169
+ straddles a commit that did nothing.
170
+
171
+ ## Red Flags
172
+
173
+ | Rationalization | Why it is wrong |
174
+ |---|---|
175
+ | "It never reproduced, but I found something that looks wrong — I will fix that." | A smell you found and a defect you never saw are different objects. Repairing the smell closes the ticket with the reported failure still live, and the next report now arrives against code you changed for unrelated reasons. |
176
+ | "It passed when I ran it again, so it is flaky / it is gone." | A single pass is not evidence of absence for a failure that was observed. Run it 50 times and report the rate; `1/50` is a finding, "it passed" is a sentence about one run. |
177
+ | "The stack trace names this line, so this line is the cause." | The trace names where the bad value surfaced, not where it was produced. The throwing frame is usually innocent; walk back to where the value was created and prove it was already wrong there. |
178
+ | "A null check here makes the crash go away." | The crash was the only thing reporting that the value was missing. A guard moves the failure somewhere later, quieter, and further from its cause — and the next report will not mention this file. |
179
+ | "I fixed it and the test I added passes." | A guard never watched failing proves the test executes. Run it against the unfixed code first; if it passes there, it is testing something other than the defect. |
180
+ | "I changed three things and now it works." | You have a working tree and no cause. One of the three was the fix and two are unexplained edits nobody can review. Revert to one change at a time, or the repair is folklore. |
181
+ | "It only breaks in CI, so it is an infrastructure problem." | "Only in CI" is an environment difference you have not named yet — ordering, concurrency, a clock, a locale, a missing file, a cold cache. Name the difference before assigning the defect to somebody else. |
182
+ | "It is obviously a race condition." | "Race" is a category, not a cause. Which two operations, over which piece of state, in which interleaving? Without those three, the word ends the investigation instead of advancing it. |
183
+ | "The reproduction takes too long to write down; I have it in my head." | The reproduction is the artifact the fix is verified against. Unwritten, it cannot be re-run after the change, and "it works now" becomes unfalsifiable. |
184
+
185
+ ## Verification
186
+
187
+ Report the defect fixed only when all of these hold:
188
+
189
+ - The reproduction is written down as commands plus expected/observed, and it
190
+ failed before the change.
191
+ - The cause is one sentence naming a mechanism, not a file and not a category.
192
+ - The change alters that mechanism. No symptom was suppressed by a guard, a
193
+ retry, a widened type, or a loosened assertion.
194
+ - A guard exists and was **watched failing** against the unfixed code; the
195
+ report says where that was observed.
196
+ - Everything added to investigate — logging, timeouts, skipped tests, scratch
197
+ edits — is either removed or deliberately kept and named in the diff.
198
+ - If it never reproduced, no fix is claimed: the report carries the attempts,
199
+ the evidence and its class, the surviving hypotheses with their killing
200
+ observations, and the instrumentation that would settle it.
201
+
202
+ Credit: [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills)
203
+ (MIT) is why this set carries a debugging skill at all; the step order, the
204
+ evidence classes and the non-reproduction protocol were written here, not taken.
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: security-audit
3
- description: "Use when checking for dependency vulnerabilities, accidentally committed secrets, or security issues in Docker images."
3
+ description: "Use when checking for dependency vulnerabilities, accidentally committed secrets, or security issues in Docker images. NOT for Metaproject security policy — prompt-injection, redaction and memory/wiki/report writes belong to `metaproject-security` — and NOT for performing the upgrades a finding calls for (use `dependency-update`)."
4
4
  triggers:
5
- - "Security audit"
6
- - "Check vulnerabilities"
7
- - "Audit dependencies"
5
+ - "security audit"
6
+ - "audit dependencies"
7
+ - "scan secrets"
8
8
  - "Security scan"
9
9
  - "Check for CVEs"
10
10
  - "npm audit"
@@ -106,3 +106,24 @@ Otherwise report `container-scan: NOT RUN — <no Dockerfile | docker unavailabl
106
106
  selected, could not run, or returned no vulnerability data. Report `not
107
107
  measured` and name the reason. In a security report, silence read as "clean"
108
108
  is the most expensive defect available.
109
+
110
+ ## Red Flags
111
+
112
+ | Rationalization | Why it is wrong |
113
+ |---|---|
114
+ | "The advisory is informational / low severity — ship it" | This skill reports severity, it does not filter it. Accepting a known CVE is the caller's decision to make explicitly, not one you make for them by omission |
115
+ | "`npm audit` returned JSON with no vulnerabilities in it, so the project is clean" | Check for the `vulnerabilities` / `advisories` key before grouping. `ENOLOCK` is ~240 bytes of error that groups to zero in every severity — indistinguishable from clean, and that is the whole point of Step 1 |
116
+ | "No lockfile row matched, but `npm audit` is the usual one" | Falling through to another package manager's audit is a guess dressed as a result. The outcome is `dependency-audit: NOT RUN — no recognised lockfile`, with no totals attached |
117
+ | "There's no Dockerfile, so container scan: 0 issues" | "No Dockerfile" and "scanned, found nothing" are different results and only one of them is evidence. Report `container-scan: NOT RUN — no Dockerfile` |
118
+ | "`npm audit fix --force` clears the whole list" | `--force` installs semver-major upgrades across the tree. Never recommend it without stating which packages it would move and by how much |
119
+ | "That key looks like a test fixture, not a real secret" | A committed credential gets reported with its path and rotated first; whether it was live is decided afterwards, by someone who can check. Never print its value in the report |
120
+
121
+ ## Verification
122
+
123
+ Do not report the audit as done until all of the following hold:
124
+
125
+ - Every step carries `RAN` or `NOT RUN — <reason>`, and no step marked NOT RUN carries a numeric total
126
+ - Severity totals appear only for steps that ran; everywhere else the report reads `not measured`, never `0`
127
+ - Every critical/high entry names a CVE or advisory id, the package, and the version range that pulls it in
128
+ - No raw secret value appears anywhere in the report — only path, line, and a redacted preview
129
+ - The report names the package manager and lockfile detected in Step 1, so a reader can tell which tree was audited
@@ -1,9 +1,10 @@
1
1
  ---
2
2
  name: test-gen
3
- description: "Use when unit or integration tests need to be written for a specific file or module."
3
+ description: "Use when unit or integration tests need to be written for a specific file or module that already exists. NOT for writing failing test stubs ahead of the implementation (use `tests-creator`)."
4
4
  triggers:
5
- - "/test-gen"
6
- - "Generate tests"
5
+ - "generate tests"
6
+ - "write tests"
7
+ - "add coverage"
7
8
  - "Write tests for"
8
9
  - "Add tests"
9
10
  - "Create test file"
@@ -78,3 +79,23 @@ Fix failing tests (max 3 iterations) — fix the test, not the source.
78
79
  - Mock external dependencies, not internal modules
79
80
  - Meaningful test descriptions
80
81
  - If no test framework detected, suggest installing one
82
+
83
+ ## Red Flags
84
+
85
+ | Rationalization | Why it is wrong |
86
+ |---|---|
87
+ | "The test fails because the source has a bug — I'll fix the source" | This skill writes test files only. A source change buried inside a test-generation run is an unreviewed fix, and it also hides the bug the new test just found. Report the failure instead |
88
+ | "Still failing on iteration four; I'll loosen the assertion until it's green" | A test that asserts nothing covers nothing while reporting coverage — strictly worse than no test. After 3 iterations, stop and report the failing case |
89
+ | "No test framework here, so I'll install vitest and a config" | Choosing a test framework is a project decision with config, CI and convention consequences. Suggest one; do not add it |
90
+ | "Mocking the neighbouring module is easier than building its input" | Mock external dependencies, not internal ones. A test whose collaborators are all mocked asserts that your mocks agree with each other |
91
+ | "One test that exercises the whole file covers more per line written" | It reports one failure for any of a dozen causes, so nobody can tell what broke. One behaviour per test, and let the description name it |
92
+
93
+ ## Verification
94
+
95
+ Do not report generation as done until all of the following hold:
96
+
97
+ - The test file sits at the project's own convention path, with the import style, describe/it structure and assertion style of the neighbouring tests read in Step 2
98
+ - `keryx test run --changed --strict` — or, with no keryx testing config, the project's own discovered test command — exits 0 with every generated test passing
99
+ - `git status` shows only test files added or modified; no source file changed
100
+ - Every exported function, component, endpoint or class identified in Step 1 has at least one test, or the report says why it does not
101
+ - The Step 6 report states the file path and the test-case count, and that count matches what the runner reported
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  name: tests-creator
3
- description: "Use when writing test cases BEFORE implementation — converts acceptance criteria into failing test stubs that task-implementer will make pass. Mandatory step in the TDD pipeline between issue-analyzer and task-implementer."
3
+ description: "Use when writing test cases BEFORE implementation — converts acceptance criteria into failing test stubs that task-implementer will make pass. Mandatory step in the TDD pipeline between issue-analyzer and task-implementer. NOT for adding tests to code that already exists (use `test-gen`)."
4
4
  triggers:
5
- - "Create tests"
5
+ - "create tests first"
6
+ - "test scenarios"
7
+ - "tdd"
6
8
  - "Write tests first"
7
9
  - "Generate test specs"
8
10
  - "Tests before implementation"
@@ -330,6 +332,19 @@ This ensures the TDD cycle is maintained end-to-end.
330
332
 
331
333
  ---
332
334
 
335
+ ## Red Flags
336
+
337
+ | Rationalization | Why it is wrong |
338
+ |---|---|
339
+ | "The module doesn't exist, so the import breaks the whole suite — I'll create a stub module first" | That stub is implementation code, and it is exactly what Rule 1 forbids. A failing import IS the RED phase; `task-implementer` creates the module |
340
+ | "A placeholder like `expect(true).toBe(true)` gets the file committed and the pipeline moving" | A test that passes before implementation proves nothing and goes green forever after. RED means failing (Rule 2) — use `it.todo`, or the forward-declared assertion from 3.3 |
341
+ | "I know how this will be built, so I'll assert it calls the repository method" | That tests HOW, not WHAT (Rule 3), and it fails the moment the implementer picks a different — valid — structure. Assert observable behaviour |
342
+ | "This acceptance criterion is too vague to test, so I'll skip it" | Every criterion needs at least one test (Rule 4). Derive from the task description, log the warning, and say in `notes` what you assumed — an untested criterion silently leaves the pipeline |
343
+ | "`verify_red` shows the test passing already; close enough, report DONE" | A test green before implementation is a wrong test, not an early win. Fix the assertion, or report it as a concern — do not pass it downstream as covered |
344
+ | "I'll leave the stubs uncommitted and let `task-implementer` commit everything together" | The handoff assumes committed RED files (Rule 6): the implementer's first step is to run them and confirm they fail. Uncommitted stubs make that step unverifiable |
345
+
346
+ ---
347
+
333
348
  ## Job Context Awareness
334
349
 
335
350
  When dispatched by `job-orchestrator`:
@@ -1,11 +1,10 @@
1
1
  ---
2
2
  name: code-ai-review
3
- description: "Performs strict AI code review following code-review-ai-assistant.mdc standards. Reviews current branch changes from merge-base by default, including both committed and local uncommitted changes. Use when: code review requested, checking branch changes, reviewing implementation quality."
3
+ description: "Use when the legacy strict AI review profile (code-review-ai-assistant.mdc) is asked for by name — reviews the current branch from its merge-base, committed and uncommitted changes together. NOT for: a code review request that names no profile (review-orchestrator)."
4
4
  triggers:
5
- - "Code review"
6
- - "Review my changes"
7
- - "Check this code"
8
- - "Review code"
5
+ - "code-ai-review"
6
+ - "AI review baseline"
7
+ - "strict AI review"
9
8
  metadata:
10
9
  author: "MrCipherSmith"
11
10
  version: "1.0.0"
@@ -201,3 +200,39 @@ If provided and the file exists, read the context document before starting the r
201
200
  - Reference context when justifying suggestions
202
201
 
203
202
  If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
203
+
204
+ ---
205
+
206
+ ## Red Flags
207
+
208
+ This profile is a thin wrapper around `code-review-ai-assistant.mdc`, and it
209
+ predates everything the review domain standardised afterwards. The rows below are
210
+ the ways that gap makes it misfire.
211
+
212
+ | Rationalization | Why it is wrong |
213
+ |----------------|-----------------|
214
+ | "A review was requested, so I will run this profile." | It is a legacy opt-in profile, reached by name or through `review --legacy-profiles`. An unqualified review request belongs to `review-orchestrator`; running this one instead silently drops every specialised lane along with the finding schema. |
215
+ | "The output template has a Severity field, so my report is a review result." | It is not. This profile predates `reviewer-finding.schema.json`: it emits free prose with no machine-readable finding and no class enumeration, so nothing downstream can screen, verify or deduplicate it. Hand the report to a person, never to `keryx review ingest`. |
216
+ | "Half these instructions are in Russian, so the report should be in Russian." | The mixed language is an artefact of when this file was written, not an instruction about the report. Write the report in the language the requester used. |
217
+ | "I noticed a store problem and a naming problem, so I will include them here." | The Scope Boundaries table above routes those to `code-mobx-store-review` and `code-style-review`. A finding filed under the wrong profile is a finding the requester did not ask this profile for, and it arrives without the checks that lane would have applied. |
218
+ | "One entry per occurrence is more thorough." | It is longer, not more thorough. Where one shape repeats, report it once and list every site — ten entries that are one problem hide the other nine. |
219
+ | "I cannot reach the code path, but the pattern is usually wrong." | Then it is an observation, not a finding. Say what input, call or condition would reach it, and let the reader decide. |
220
+
221
+ ---
222
+
223
+ ## Verification
224
+
225
+ Report done only once all of these hold:
226
+
227
+ - The requester asked for this profile by name, or through
228
+ `review --legacy-profiles`. If they asked for "a review", stop and hand the
229
+ request to `review-orchestrator` instead.
230
+ - The scope block carries the real branch, parent ref, merge-base and scope mode —
231
+ not the template placeholders.
232
+ - Every finding carries Severity, Location (path plus the lines from the diff),
233
+ Problem, Why it matters and a concrete Suggested fix; a patch where the fix is
234
+ a line or two.
235
+ - Every finding is anchored to a line the branch slice actually changed. Nothing
236
+ outside `merge-base..worktree` is discussed.
237
+ - The report is free prose by design, so it is delivered to a person and is not
238
+ fed into the managed-review pipeline.
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: code-learned-review
3
- description: "Reviews the current branch against conventions this project learned from its own pull-request comments, recorded in a local project skill. Ships with an empty checklist: the content comes from `keryx review learn`, never from the tool. Use when: a project has a learned review skill and wants its own accumulated conventions applied."
3
+ description: "Use when a project has a learned review skill — built by `keryx review learn` from its own pull-request comments — and wants those accumulated conventions applied to the current branch. Ships with an empty checklist: the content comes from the project, never from the tool. NOT for: a project with no learned skill, or a review request that names no profile (review-orchestrator)."
4
4
  triggers:
5
5
  - "learned review"
6
+ - "code-learned-review"
6
7
  - "review with our conventions"
7
8
  - "review using what we learned"
8
9
  metadata:
@@ -241,3 +242,42 @@ review. Use it to:
241
242
 
242
243
  If the file does not exist or is not provided, proceed normally — context is
243
244
  optional and non-blocking.
245
+
246
+ ---
247
+
248
+ ## Red Flags
249
+
250
+ This profile is a mechanism with an empty checklist, and it predates the finding
251
+ contract the rest of the review domain now shares. Both facts produce their own
252
+ failure modes, and they are the rows below.
253
+
254
+ | Rationalization | Why it is wrong |
255
+ |----------------|-----------------|
256
+ | "This project has no learned skill, but I can review against sensible conventions." | An empty learned review is not a generic review. Say the project has no learned skill and stop; `review-orchestrator` is what a generic request wants. Inventing conventions here ships one model's taste as the team's agreed standard. |
257
+ | "This lesson is about a slightly different case, but the spirit applies." | Do not generalise a lesson past its text. A lesson about one shape of function is about that shape; widening it into a rule about a layer or a language invents a convention the project never agreed to. |
258
+ | "The lesson came from a named reviewer, so I will report it as what they would want." | Do not attribute. The record says a comment was left, nothing more. Reporting a finding as a person's preference turns the checklist back into the persona this skill exists to remove. |
259
+ | "This pull-request comment is good even though the config does not name its author." | An author the config does not name contributes nothing — not to a proposal, not to a `SKILL.md`, and not to this review. Changing who counts is a config change, made deliberately, not a judgement call mid-review. |
260
+ | "A lesson exists for this, so the finding stands." | A lesson is evidence, not authority. If the diff has a reason the original objection does not apply here, the reason wins and the finding is not raised. |
261
+ | "The report has a Severity field, so it is a review result." | It is not. This profile predates `reviewer-finding.schema.json` and emits free prose with no machine-readable finding, so nothing downstream can screen, verify or deduplicate it. Hand it to a person, never to `keryx review ingest`. |
262
+ | "The lessons I checked that matched nothing are not worth mentioning." | They are the only way anyone learns a lesson has gone stale. Record the count of lessons checked and the count that matched, either way. |
263
+
264
+ ---
265
+
266
+ ## Verification
267
+
268
+ Report done only once all of these hold:
269
+
270
+ - `.metaproject/review-learning.config.json` was read and the project skill it
271
+ names was opened. If that skill carries no lessons, the reply says so and stops
272
+ rather than reviewing generically.
273
+ - The report states the project skill and version, the number of lessons checked
274
+ and the number that matched.
275
+ - Every finding cites the line in the project skill it rests on. Findings with no
276
+ learned lesson behind them are listed in their own section and routed to the
277
+ reviewer that owns them.
278
+ - No finding names a person, quotes a personal catchphrase, or reports a lesson as
279
+ somebody's preference.
280
+ - The scope block carries the real branch, parent ref, merge-base and scope mode,
281
+ and every finding is anchored to a line the branch slice changed.
282
+ - The report is free prose by design, so it is delivered to a person and is not
283
+ fed into the managed-review pipeline.
@@ -1,10 +1,12 @@
1
1
  ---
2
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."
3
+ description: "Use when MobX store changes need a focused review — actions, computed values, reactions, async runInAction, state typing, and View↔Store boundaries. NOT for: a general frontend review (review-frontend) or a review request that names no domain (review-orchestrator)."
4
4
  triggers:
5
+ - "mobx review"
6
+ - "store review"
7
+ - "code-mobx-store-review"
5
8
  - "Review MobX store"
6
9
  - "Check store changes"
7
- - "MobX review"
8
10
  metadata:
9
11
  author: "MrCipherSmith"
10
12
  version: "1.1.0"
@@ -257,3 +259,43 @@ If provided and the file exists, read the context document before starting the r
257
259
  - Avoid flagging intentional architectural decisions as issues
258
260
 
259
261
  If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
262
+
263
+ ---
264
+
265
+ ## Red Flags
266
+
267
+ This profile is a thin legacy wrapper around `mobx-store-template.mdc`. It
268
+ predates the shared finding contract, it does not use the review domain's
269
+ severity vocabulary at all, and half of it is written in Russian — each of those
270
+ is a way it misfires, and they are the rows below.
271
+
272
+ | Rationalization | Why it is wrong |
273
+ |----------------|-----------------|
274
+ | "The checklist prints severities, so this report is a review result." | It is not. `Critical` / `Warnings` / `Suggestions` are section headings in a Markdown document, not a severity field: this profile predates `reviewer-finding.schema.json` and emits free prose with no machine-readable finding. Hand it to a person, never to `keryx review ingest`. |
275
+ | "Half the instructions are in Russian, so the report should be." | The mixed language is an artefact of when this file was written. Write the report in the language the requester used. |
276
+ | "The two stores sync both ways and I have not seen an infinite loop." | A bounce needs one ordering to appear, and reading the code is not running it. The checklist rates a bidirectional sync with no equality guard as **critical** for exactly that reason: the absence of the guard is the finding, not the absence of a reproduction. |
277
+ | "`if (value && value !== other)` is the safer guard." | It is the guard that silently refuses to clear. `undefined`, `null`, `0` and `""` are legitimate values to propagate, and a truthy check strands the stale one instead. |
278
+ | "The component's `useEffect` calls `store.init()` — that is ordinary React." | Not under this architecture. The parent store orchestrates its children's lifecycle, and moving that into a component is how `dispose()` stops being called and stale async writes start landing. |
279
+ | "The method is only called by another store, so `@action.bound` is harmless." | The decorator publishes it. Inter-store callbacks and internal handlers are `private` here; the naming patterns the checklist lists are the tell, and the decision question is whether a React component calls it. |
280
+ | "While I was in the store I also noticed naming and component problems." | The Scope Boundaries table routes those to `code-style-review` and `code-ai-review`. A finding filed under the wrong profile arrives without the checks that lane would have applied. |
281
+
282
+ ---
283
+
284
+ ## Verification
285
+
286
+ Report done only once all of these hold:
287
+
288
+ - The requester asked for this profile by name, or through
289
+ `review --legacy-profiles`. A general frontend or store review with no profile
290
+ named belongs to `review-orchestrator`.
291
+ - The scope block carries the real branch, parent ref, merge-base and scope mode —
292
+ not the template placeholders.
293
+ - Every entry carries Rule, Why, Where (path plus the lines from the diff) and
294
+ Fix, with a minimal unified diff where the fix is a line or two.
295
+ - Every entry is anchored to a line the branch slice actually changed; legacy
296
+ store code outside that slice is not discussed.
297
+ - Entries are sorted into this document's own Critical / Warnings / Suggestions
298
+ sections, and are not presented as a severity any other reviewer or tool
299
+ consumes.
300
+ - The report is free prose by design, so it is delivered to a person and is not
301
+ fed into the managed-review pipeline.
@@ -1,10 +1,9 @@
1
1
  ---
2
2
  name: code-style-review
3
- description: "Detailed code style and architecture review using code-style-patterns.mdc. Reviews current branch changes. Checks naming, organization, patterns, TypeScript usage. Use when: style validation needed, architecture review."
3
+ description: "Use when the legacy code style and architecture review profile (code-style-patterns.mdc) is asked for by name — naming, organization, patterns, and TypeScript usage on the current branch. NOT for: a general style review (review-style) or an architecture review (review-architecture)."
4
4
  triggers:
5
- - "Style review"
6
- - "Check code style"
7
- - "Architecture review"
5
+ - "code-style-review"
6
+ - "architecture style"
8
7
  metadata:
9
8
  author: "MrCipherSmith"
10
9
  version: "1.0.0"
@@ -166,3 +165,44 @@ If provided and the file exists, read the context document before starting the r
166
165
  - Provide more accurate findings by understanding the project's architectural decisions
167
166
 
168
167
  If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
168
+
169
+ ---
170
+
171
+ ## Red Flags
172
+
173
+ This profile is a thin legacy wrapper around `code-style-patterns.mdc`. It
174
+ predates the shared finding contract, it does not use the review domain's
175
+ severity vocabulary at all, and it is written mostly in Russian — each of those
176
+ is a way it misfires, and they are the rows below.
177
+
178
+ | Rationalization | Why it is wrong |
179
+ |----------------|-----------------|
180
+ | "A style review was asked for, so I will run this profile." | It is a legacy opt-in profile pinned to one rules file, reached by name or through `review --legacy-profiles`. A general style request belongs to `review-style`, and an architecture request to `review-architecture`; running this instead answers a narrower question than the one that was asked. |
181
+ | "The report has a Critical section, so downstream can consume it." | It cannot. `Critical` / `Warnings` / `Suggestions` are headings in a Markdown document, not a severity field: this profile predates `reviewer-finding.schema.json` and emits free prose with no machine-readable finding. Hand it to a person, never to `keryx review ingest`. |
182
+ | "The instructions are in Russian, so the report should be." | The language is an artefact of when this file was written. Write the report in the language the requester used. |
183
+ | "`public` reads more clearly than leaving the modifier off." | The project's ESLint configuration forbids the keyword outright, at error level. That is a build failure, not a matter of taste, and a reviewer arguing the taste is arguing with a gate that already decided. |
184
+ | "This component does not look like it reads observables, so the wrapper is optional." | Check what it reads through props and through the store getters it calls. Missing `observer` is rated critical in the checklist above because the failure is silent: the component simply stops updating. |
185
+ | "The `any` is temporary — the author will type it properly later." | Nothing records that intent and nothing revisits it. Rate the code in the diff, and propose `unknown` plus a type guard as the concrete fix. |
186
+ | "While reading for style I found a real bug, so I will report it here." | This report has nowhere to carry it and the requester is not reading it for that. Route it to `code-ai-review` (or `review-logic`) and say in one line that you did. |
187
+
188
+ ---
189
+
190
+ ## Verification
191
+
192
+ Report done only once all of these hold:
193
+
194
+ - The requester asked for this profile by name, or through
195
+ `review --legacy-profiles`. A style or architecture request that names no
196
+ profile belongs to `review-style` or `review-architecture`.
197
+ - The scope block carries the real branch, parent ref, merge-base and scope mode —
198
+ not the template placeholders.
199
+ - Every entry carries Rule (the section of `code-style-patterns.mdc` it rests on),
200
+ Why, Where (path plus the lines from the diff) and Fix, with a minimal unified
201
+ diff rather than an edit applied to the tree.
202
+ - Every entry is anchored to a line the branch slice actually changed; legacy code
203
+ outside that slice is not discussed.
204
+ - Entries are sorted into this document's own Critical / Warnings / Suggestions
205
+ sections, and are not presented as a severity any other reviewer or tool
206
+ consumes.
207
+ - The report is free prose by design, so it is delivered to a person and is not
208
+ fed into the managed-review pipeline.
@@ -8,12 +8,12 @@ description: |
8
8
  Dispatched by review-orchestrator with --architecture or --backend.
9
9
  NOT for: style/naming preferences, logic correctness bugs, or security vulnerabilities.
10
10
  triggers:
11
- - "review architecture"
11
+ - "architecture review"
12
+ - "boundary review"
13
+ - "layering"
12
14
  - "check architecture"
13
15
  - "architectural review"
14
- - "architecture review"
15
16
  - "check layers"
16
- - "dispatched by review-orchestrator"
17
17
  metadata:
18
18
  author: "MrCipherSmith"
19
19
  version: "1.0.0"
@@ -9,11 +9,10 @@ description: |
9
9
  (use review-security-code for XSS/injection/auth-bypass), or performance profiling
10
10
  (use review-performance).
11
11
  triggers:
12
- - "review backend"
13
12
  - "backend review"
14
- - "review API"
13
+ - "api review"
14
+ - "service review"
15
15
  - "review NestJS"
16
- - "review --backend"
17
16
  metadata:
18
17
  author: "MrCipherSmith"
19
18
  version: "1.0.0"
@@ -10,12 +10,12 @@ description: |
10
10
  NOT for: architectural layer violations (review-architecture), naming convention formatting
11
11
  (review-style), logic correctness bugs (review-logic), or security (review-security-code).
12
12
  triggers:
13
- - "review clean code"
13
+ - "clean code review"
14
+ - "functions do too much"
15
+ - "solid review"
16
+ - "maintainability"
14
17
  - "check clean code"
15
18
  - "Uncle Bob review"
16
- - "SOLID review"
17
- - "review --clean-code"
18
- - dispatched by review-orchestrator
19
19
  metadata:
20
20
  author: "MrCipherSmith"
21
21
  version: "1.0.0"