@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
@@ -131,7 +131,7 @@ Three fields, three different jobs, and mixing them is the recorded failure mode
131
131
  somewhere else and will move on; without the hash, a reviewer built from last
132
132
  month's version reads as current forever, and nobody finds out until its findings
133
133
  disagree with the standard it claims to encode. With it,
134
- `keryx review reviewers` reports `drift: changed` the moment the file differs.
134
+ `keryx review reviewers` prints that reviewer's row as `- <name> (<origin> — changed)` the moment the file differs.
135
135
 
136
136
  Quote the path if it starts with `~` and you want it stored that way; an
137
137
  unquoted `~` is expanded by the shell before keryx sees it. Either is fine —
@@ -192,8 +192,8 @@ keryx review reviewers
192
192
 
193
193
  The second is the one that matters: it is the same call
194
194
  `review-orchestrator` makes, so its output is proof the reviewer will be
195
- dispatched rather than a hope. Check the row shows your reviewer with
196
- `drift: clean`.
195
+ dispatched rather than a hope. Check the row reads `- <reviewer-name> (<origin> — clean)` — `changed` means the
196
+ source moved, `missing` that it no longer resolves, `no recorded origin` that the reviewer was created without `--origin`.
197
197
 
198
198
  Then say, in your reply, which of the three piles from Step 1 you kept, which you
199
199
  dropped, and what you could not verify against this project.
@@ -216,8 +216,8 @@ dropped, and what you could not verify against this project.
216
216
 
217
217
  ## Refreshing a reviewer whose source moved on
218
218
 
219
- `keryx review reviewers` reporting `drift: changed` means the source file differs
220
- from what was imported. It does **not** mean the reviewer is wrong.
219
+ A row of `- <name> (<origin> — changed)` from `keryx review reviewers` means the
220
+ source file differs from what was imported. It does **not** mean the reviewer is wrong.
221
221
 
222
222
  Re-read the source, diff it against what the skill encodes, and then decide per
223
223
  change: fold it in, or record in the skill why this project deliberately differs.
@@ -241,3 +241,40 @@ undocumented is drift that will be silently "fixed" by whoever refreshes next.
241
241
  | Decide which reviewers a round dispatches | NO | `review-orchestrator` |
242
242
  | Import a tree of overlay reviewers | YES — `keryx skills import --from <dir> --module review` (`keryx review import` alias) | — |
243
243
  | Import a non-review SKILL.md / GitHub URL | NO | `entity-skill-creator` / `keryx skills import` |
244
+
245
+ ---
246
+
247
+ ## Red Flags
248
+
249
+ | Rationalization | Why it is wrong |
250
+ |----------------|-----------------|
251
+ | "The source's voice is what makes it a good standard — stripping it loses the edge." | A reviewer distilled from someone's tone reviews tone. Step 4 drops the persona pile whole and keeps the method with its reason beside it; a reason transplants into a codebase the author never saw, and an assertion does not. |
252
+ | "I know where the source file lives, so `--origin` adds nothing." | Without the recorded hash, a reviewer built from last month's version of that file reads as current forever, and nobody finds out until its findings disagree with the standard it claims to encode. `drift: changed` is the whole point. |
253
+ | "The target should say what the reviewer is for, so a sentence is clearer." | The target is a routing key that `keryx skills route` matches queries against. A sentence there produces a skill that matches nothing and verifies as permanently stale. The prose belongs in `--note`. |
254
+ | "The source has a clear severity scale, so I will carry it over." | Ten private rubrics feeding one sorted report produce a ranking that means ten things at once. Point at **Severity (canonical)** and add one table saying where this reviewer's recurring conditions land under it. |
255
+ | "The files are written and the frontmatter is valid, so the reviewer is wired." | Creating files is not registration, and registration is not discovery. Until `keryx review reviewers` prints the name, the orchestrator will never dispatch it. |
256
+ | "The source's conventions are sensible, so they will hold in this project too." | They are true of the source's own codebase until verified here. Keep a convention only after checking it against this project, and say in your reply which ones you could not check. |
257
+ | "The row came back `— changed`, so the reviewer is wrong and I will overwrite it." | It means the source moved, not that the reviewer is wrong. Diff the two and decide per change: fold it in, or write down why this project deliberately differs. An undocumented divergence is drift the next refresh silently "fixes". |
258
+
259
+ ---
260
+
261
+ ## Verification
262
+
263
+ Report done only once all of these hold:
264
+
265
+ - `keryx skills verify review/<reviewer-name>` passes.
266
+ - `keryx review reviewers` lists the reviewer as `- <reviewer-name> (<origin> — clean)` — that literal row, not a `drift:` field, which the command never prints. This is the
267
+ same call `review-orchestrator` makes, so its output — not the presence of the
268
+ files — is what proves the reviewer will be dispatched.
269
+ - The `SKILL.md` carries all six required parts from Step 3: Scope naming the
270
+ neighbouring reviewers it excludes, a Checklist of performable checks, a
271
+ pointer to the canonical severity rubric with no rubric of its own, the three
272
+ shared laws verbatim, the class-scope contract, and the Orchestrated Review
273
+ Contract with its own finding-id prefix.
274
+ - `--origin` was passed whenever a source file exists, and the recorded path is
275
+ the one a human would read later.
276
+ - Any method that only works when a command is run — a mutation, a measurement, a
277
+ probe — is stated as an iron law, together with what the finding is worth
278
+ without it.
279
+ - The reply says which of Step 1's three piles were kept, which were dropped, and
280
+ what could not be verified against this project.
@@ -1,20 +1,21 @@
1
1
  ---
2
2
  name: code-verifier
3
3
  model_tier: light
4
- description: "Use when running a full quality gate after implementation — lint, type-check, tests, and import validation. Mandatory step in job-orchestrator after task-implementer and after fix iterations. Use standalone when you need a structured verification report."
4
+ description: "Use when running a full quality gate after implementation — lint, type-check, tests, and import validation. Mandatory step in job-orchestrator after task-implementer and after fix iterations. Use standalone when you need a structured verification report. NOT for: fixing what the gate reports — this skill is read-only (use task-implementer)."
5
5
  triggers:
6
+ - "verify code"
7
+ - "run checks"
8
+ - "quality gate"
6
9
  - "Run verification"
7
- - "Quality gate"
8
10
  - "Check code quality"
9
11
  - "Run lint and tests"
10
12
  - "Verify implementation"
11
- - "Run checks"
12
13
  metadata:
13
14
  author: "MrCipherSmith"
14
15
  version: "1.0.0"
15
- category: "verification"
16
+ category: "orchestration"
16
17
  agent_worthy: true
17
- compatible_harnesses: "cursor,codex,zed,opencode"
18
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
18
19
  license: "MIT"
19
20
  ---
20
21
 
@@ -61,56 +62,43 @@ Code Verifier Progress:
61
62
 
62
63
  ### Phase 1: DETECT
63
64
 
64
- Auto-detect the project stack and available verification tools.
65
+ Determine scope. Stack and tool discovery is delegated to `keryx health run`
66
+ and `keryx test run` — do NOT hand-roll package-manager or
67
+ lint/type-check/test tool detection here.
65
68
 
66
- **1.1 Package manager and runner:**
67
-
68
- ```bash
69
- cd <codebase_path>
70
-
71
- if [ -f bun.lock ] || [ -f bun.lockb ]; then PM=bun; RUNNER="bun run"
72
- elif [ -f pnpm-lock.yaml ]; then PM=pnpm; RUNNER="pnpm run"
73
- elif [ -f yarn.lock ]; then PM=yarn; RUNNER="yarn"
74
- elif [ -f package-lock.json ]; then PM=npm; RUNNER="npm run"
75
- elif [ -f pyproject.toml ] || [ -f requirements.txt ]; then PM=python; RUNNER=""
76
- elif [ -f go.mod ]; then PM=go; RUNNER=""
77
- else PM=unknown; RUNNER=""
78
- fi
79
- ```
80
-
81
- **1.2 Detect available check commands:**
82
-
83
- | Check | How to detect | Command |
84
- |---|---|---|
85
- | Lint | `package.json` has `"lint"` script | `$RUNNER lint` |
86
- | Lint (auto) | `eslint.config.*` or `.eslintrc*` present | `npx eslint . --max-warnings 0` |
87
- | Biome | `biome.json` present | `npx biome check .` |
88
- | Type-check | `package.json` has `"type-check"` or `"typecheck"` script | `$RUNNER type-check` |
89
- | Type-check (auto) | `tsconfig.json` present | `npx tsc --noEmit` |
90
- | Tests | `package.json` has `"test"` script | `$RUNNER test --run` (vitest) or `$RUNNER test` |
91
- | pytest | `pytest` in `pyproject.toml` or `requirements.txt` | `pytest --tb=short -q` |
92
- | Go tests | `go.mod` present | `go test ./...` |
93
- | Circular imports | `madge` in devDependencies | `npx madge --circular src/` |
94
-
95
- **1.3 Determine scope:**
69
+ **1.1 Determine scope:**
96
70
 
97
71
  ```
98
72
  IF scope = "changed" (default when dispatched by orchestrator):
99
73
  FILES = git diff --name-only <base_branch>...HEAD
100
- Run tests only for files related to changed code
101
- Run lint only on changed files: npx eslint <changed_files>
102
- Run type-check on full project (tsc doesn't support file-level scope)
74
+ Pass --changed to keryx health run and keryx test run below.
103
75
 
104
76
  IF scope = "full":
105
- Run all checks on full project
77
+ Run all checks on the full project (omit --changed).
106
78
  ```
107
79
 
80
+ **1.2 Checks used:**
81
+
82
+ | Check | Command |
83
+ |---|---|
84
+ | Lint + type-check | `keryx health run --changed --source eslint,typescript` (drop `--changed` for full scope) |
85
+ | Tests | `keryx test run --changed --strict` (drop `--changed` for full scope) |
86
+ | Circular imports | the project's own package-manager runner + `madge --circular --extensions ts,tsx src/`, if `madge` is a devDependency — optional; not covered by `keryx health run` / `keryx test run` |
87
+
88
+ `src/health/sources/eslint.ts` and `src/health/sources/typescript.ts` resolve
89
+ the real lint/type-check invocation for the project; `src/testing/service.ts`
90
+ detects `bun` / `pnpm` / `yarn` / `npm` from the lockfile and builds the test
91
+ invocation from the project's own test script. Do NOT hard-code a package
92
+ manager, linter, type-checker, or test binary here — that is the if-chain
93
+ these commands already resolve. On a project with no keryx health/testing
94
+ config, fall back to the project's own configured lint/type-check/test
95
+ command (discovered from its `package.json` scripts or equivalent, not a
96
+ hardcoded tool).
97
+
108
98
  **Output of Phase 1:**
109
99
  ```
110
100
  TOOLING:
111
- pm: bun | pnpm | yarn | npm | python | go | unknown
112
- runner: "bun run" | ...
113
- checks_available: [lint, type-check, tests, circular-imports]
101
+ checks_available: [lint+type-check, tests, circular-imports]
114
102
  checks_skipped: [<reason>]
115
103
  scope: changed | full
116
104
  changed_files: [<paths>]
@@ -120,54 +108,44 @@ TOOLING:
120
108
 
121
109
  ### Phase 2: RUN
122
110
 
123
- Execute each available check in order. Capture full output.
111
+ Execute each available check. Capture full output.
124
112
 
125
- **Execution order:** lint → type-check → tests → import-check
113
+ **Execution order:** lint+type-check → tests → import-check
126
114
 
127
115
  **Do NOT abort early** — run all checks even if one fails. The orchestrator needs the complete picture.
128
116
 
129
- **2.1 Lint:**
117
+ **2.1 Lint + type-check:**
130
118
  ```bash
131
- # Changed files only (faster, more actionable)
132
- npx eslint <changed_files> --format=json --max-warnings 0
133
- # OR if lint script exists:
134
- $RUNNER lint
119
+ keryx health run --changed --source eslint,typescript
120
+ # OR, full scope:
121
+ keryx health run --source eslint,typescript
135
122
  ```
136
123
 
137
- Capture:
138
- - Exit code (0 = pass, non-zero = fail)
124
+ Read the result with `keryx health status` (or the report path the command
125
+ prints). Capture:
126
+ - Gate status (pass/fail) per source
139
127
  - Number of errors and warnings
140
- - Per-file error list (file path, line, column, rule, message)
128
+ - Per-finding: file, line, column, rule/TS code, message
141
129
 
142
- **2.2 Type-check:**
130
+ **2.2 Tests:**
143
131
  ```bash
144
- npx tsc --noEmit 2>&1
145
- # OR:
146
- $RUNNER type-check
132
+ keryx test run --changed --strict
133
+ # OR, full scope:
134
+ keryx test run --strict
147
135
  ```
148
136
 
149
137
  Capture:
150
- - Exit code
151
- - Number of errors
152
- - Per-error: file, line, column, message, TS error code
153
-
154
- **2.3 Tests:**
155
- ```bash
156
- $RUNNER test --run 2>&1 # vitest
157
- # OR: npx jest --ci 2>&1
158
- # OR: pytest --tb=short -q 2>&1
159
- # OR: go test ./... 2>&1
160
- ```
161
-
162
- Capture:
163
- - Exit code
138
+ - Report status / exit code
164
139
  - Tests passed / failed / skipped counts
165
140
  - Per-failure: test name, file, error message, stack (first 5 lines)
166
141
 
167
- **2.4 Circular import check (if madge available):**
142
+ **2.3 Circular import check (if madge available):**
168
143
  ```bash
169
- npx madge --circular --extensions ts,tsx src/ 2>&1
144
+ <pm> exec madge --circular --extensions ts,tsx src/ 2>&1
170
145
  ```
146
+ `<pm>` is the project's own package-manager runner for devDependency
147
+ binaries (`pnpm exec`, `yarn`, or the npm-based equivalent), resolved the
148
+ same way `keryx test run` resolves it from the lockfile — not hardcoded.
171
149
 
172
150
  Capture:
173
151
  - Exit code
@@ -298,7 +276,7 @@ code-verifier:
298
276
  code-verifier:
299
277
  codebase_path: <worktree_path>
300
278
  scope: changed
301
- → If gate still FAIL after 2 iterations → report as BLOCKED, skip to report
279
+ → If gate still FAIL after 3 iterations → report as BLOCKED, skip to report
302
280
  → If gate: PASS → proceed to report
303
281
  ```
304
282
 
@@ -351,3 +329,18 @@ code-verifier:
351
329
  3. **Scope to changed files** by default — full scans are slow and produce noise.
352
330
  4. **Be specific** in findings — include file, line, rule, message. Vague "lint failed" is not actionable.
353
331
  5. Return `VERIFICATION_RESULT` as the **final message** to the orchestrator.
332
+
333
+ ---
334
+
335
+ ## Red Flags
336
+
337
+ Stop and re-read this skill if you are thinking:
338
+
339
+ | Rationalization | Rebuttal |
340
+ |---|---|
341
+ | "Lint already failed, so running the type-check and tests adds nothing." | Rule 1: run ALL checks. The orchestrator sizes one fix wave from the full picture. Aborting early means it fixes lint, re-dispatches, then discovers the type errors — one wave per check instead of one wave. |
342
+ | "This type error is a one-line fix — faster to correct it than to report it." | Rule 2: this gate is read-only. A verifier that edits has verified its own edit, and the diff the reviewer sees no longer matches what the implementer wrote. Report it; let the fix come back through the loop. |
343
+ | "The lint binary isn't installed, so there is nothing wrong — the gate passes." | A check that did not run is `status: skipped`, never `pass`. `gate: PASS` on an empty check set is a false all-clear, and zero checks available is `STATUS: BLOCKED` by the Error Handling table. |
344
+ | "`gate: FAIL`, so my STATUS must be BLOCKED." | STATUS reports whether THIS SKILL ran, not what it found. A complete report of a failing gate is `STATUS: DONE`. `BLOCKED` tells the orchestrator verification never happened and it must resolve tooling — a different, wrong branch. |
345
+ | "That failing test is unrelated to the diff, so I'll record it as skipped." | `skipped` means it did not run. A failure you judged out of scope is still `failed`, with a finding. Deciding what is in scope is the orchestrator's call, and it cannot make it on a result you rewrote. |
346
+ | "I hit `max_findings_reported`, so the remaining findings can go unmentioned." | The cap limits the list, not the count. Report the true totals in `checks:` and say in `summary` that the finding list is truncated, or the orchestrator plans a fix wave against a number that is quietly too small. |
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  name: context-collector
3
- description: "Use when a job needs a unified context document — gathering docs, libraries, and references for sub-agents before execution."
3
+ description: "Use when a job needs a unified context document — gathering docs, libraries, and references for sub-agents before execution. NOT for: deciding what to build from that context (use interview, or job-orchestrator for the whole pipeline)."
4
4
  triggers:
5
- - "Collect context"
6
- - "Build context"
7
- - "Gather context"
5
+ - "collect context"
6
+ - "gather context"
7
+ - "build context"
8
8
  - "Update context"
9
9
  - "Refresh context"
10
10
  - "Context for job"
@@ -12,9 +12,9 @@ triggers:
12
12
  metadata:
13
13
  author: "MrCipherSmith"
14
14
  version: "1.1.0"
15
- category: "context"
15
+ category: "orchestration"
16
16
  agent_worthy: true
17
- compatible_harnesses: "cursor,codex,zed,opencode"
17
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
18
18
  license: "MIT"
19
19
  ---
20
20
 
@@ -600,7 +600,7 @@ When the orchestrator dispatches this skill as a sub-agent:
600
600
  You are the context-collector agent. Your task is to research and build
601
601
  a context document for the current job.
602
602
 
603
- Load the skill from: skills/orchestration/context-collector/SKILL.md
603
+ Load the skill from: .metaproject/skills/gdskills/orchestration/context-collector/SKILL.md
604
604
 
605
605
  ACTION: collect
606
606
  JOB_NAME: <job-name>
@@ -622,7 +622,7 @@ For updates:
622
622
  You are the context-collector agent. Your task is to update the existing
623
623
  context document for this job.
624
624
 
625
- Load the skill from: skills/orchestration/context-collector/SKILL.md
625
+ Load the skill from: .metaproject/skills/gdskills/orchestration/context-collector/SKILL.md
626
626
 
627
627
  ACTION: update
628
628
  JOB_NAME: <job-name>
@@ -653,3 +653,19 @@ Execute update flow and return a CONTEXT_RESULT block.
653
653
  10. **DO NOT** fetch external docs for standard well-known patterns already covered by project rules.
654
654
  11. **DO NOT** modify any project files — this is a read + research + write-to-jobs skill only.
655
655
  12. **DO NOT** skip the metadata block and update log — they are mandatory for version tracking.
656
+
657
+ ---
658
+
659
+ ## Red Flags
660
+
661
+ Stop and re-read this skill if you are thinking:
662
+
663
+ | Rationalization | Rebuttal |
664
+ |---|---|
665
+ | "More context is safer, so I'll include everything I found." | Rule 9 caps `context.md` at ~500 lines, and 3.4 admits only HIGH and MEDIUM findings. A 1200-line context is read by no sub-agent; the three paragraphs that mattered are now buried, which is the same as not having collected them. |
666
+ | "I know this library well, so I can write the API section from memory." | Phase 3 fetches the docs for the version the project actually pins. A remembered signature is the single most expensive thing in this document: every sub-agent downstream implements against it without checking. |
667
+ | "The task mentions React, so I should fetch React documentation." | Rule 10: no external fetch for well-known patterns already covered by project rules. External research is for the specific API, version gotcha or convention this task turns on — not for a topic overview. |
668
+ | "This section of the existing context looks stale, so I'll drop it while updating." | 4.3 and Rule 4: preserve existing sections unless they are explicitly outdated. "Looks stale" from inside a scoped update usually means "I did not re-research it" — removing it silently deletes a decision another agent is relying on. |
669
+ | "I fixed the small inconsistency I noticed in the source file while reading it." | Rule 11: this skill writes only into the job folder. An edit made during collection lands in a diff nobody attributed to a task, and the implementer inherits it without knowing. |
670
+ | "The context is written, so I can return — job-documenter can be called later." | Phase 5 is part of the skill. A `context.md` that was never persisted through `job-documenter` is absent from the README index, and the next phase resolves the path to nothing. |
671
+ | "The content changed only slightly, so bumping the Version and update log is overkill." | Rule 12 and Rule 3: version, timestamp and update log are mandatory. Without them, two agents reading different revisions have no way to tell which one they have. |
@@ -58,7 +58,7 @@ IF ACTION == "update":
58
58
  You are the context-collector agent. Your task is to research and build
59
59
  a context document for the current job.
60
60
 
61
- Load the skill from: skills/orchestration/context-collector/SKILL.md
61
+ Load the skill from: .metaproject/skills/gdskills/orchestration/context-collector/SKILL.md
62
62
 
63
63
  DO NOT ask the user any questions. Execute all phases autonomously.
64
64
 
@@ -85,7 +85,7 @@ and return a CONTEXT_RESULT block as your final message.
85
85
  You are the context-collector agent. Your task is to update the existing
86
86
  context document for this job.
87
87
 
88
- Load the skill from: skills/orchestration/context-collector/SKILL.md
88
+ Load the skill from: .metaproject/skills/gdskills/orchestration/context-collector/SKILL.md
89
89
 
90
90
  DO NOT ask the user any questions. Execute the update flow autonomously.
91
91
 
@@ -224,26 +224,16 @@ grep -r "focus_keyword" --include="*.spec.ts" --include="*.test.ts" src/
224
224
 
225
225
  ### Output for Mode B
226
226
 
227
- Generate **Feature Specification Document** instead of Change Analysis:
228
-
229
- ```
230
- <DOCS_ROOT>/analysis/<feature>-current-state-<date>/
231
- ├── README.md
232
- ├── specification/
233
- │ ├── en/feature-specification.md
234
- │ ├── ru/feature-specification.md
235
- │ └── ai/feature-specification.md
236
- ├── architecture/
237
- │ ├── data-flow.md
238
- │ ├── component-diagram.md
239
- │ └── api-contracts.md
240
- ├── usage/
241
- │ ├── examples.md
242
- │ └── patterns.md
243
- └── tests/
244
- └── test-coverage.md
227
+ Generate **Feature Specification Document** instead of Change Analysis, using the same flat analysis-category layout as Mode A:
228
+
229
+ ```
230
+ <DOCS_ROOT>/analysis/<feature-name>/
231
+ ├── report.md # Feature specification: purpose, API contracts, business logic, data flow, architecture, usage examples, test coverage
232
+ └── implementation-plan.md # Only if formalization surfaces follow-up implementation work
245
233
  ```
246
234
 
235
+ No date-stamped folder, no `-current-state-<date>` suffix, and no mandatory `en`/`ru`/`ai` split — add language variants only if the user explicitly asks.
236
+
247
237
  ---
248
238
 
249
239
  ## Timeouts and Limits
@@ -397,7 +387,7 @@ Analyzing only new changes...
397
387
  "branch": "feature-name",
398
388
  "sha": "abc123",
399
389
  "base_sha": "def456",
400
- "path": "feature-name-2024-01-15",
390
+ "path": "feature-name",
401
391
  "created_at": "2024-01-15T10:00:00Z",
402
392
  "updated_at": "2024-01-15T10:00:00Z",
403
393
  "status": "complete",
@@ -526,7 +516,7 @@ git log --oneline "${BASE_SHA}..HEAD"
526
516
 
527
517
  ## Step 10: Gherkin Output Format (Full)
528
518
 
529
- The AI-readable format in `report/ai/report.md` and `plans/ai/implementation-plan.md` uses Gherkin-style scenarios.
519
+ Gherkin-style scenarios in `report.md` (and its `ai` language variant, when one is generated) make analysis results parseable by other AI agents. The same applies to `implementation-plan.md` for Phase scenarios.
530
520
 
531
521
  **Purpose**: Enable other AI agents to parse analysis results programmatically.
532
522
 
@@ -633,7 +623,7 @@ Feature: [Concise Feature Name]
633
623
  And the risk level is "[Low/Medium/High]"
634
624
  ```
635
625
 
636
- ### 7. Implementation Plan (in plans/ai/)
626
+ ### 7. Implementation Plan (in implementation-plan.md)
637
627
  ```gherkin
638
628
  Feature: Implementation Plan for [Feature Name]
639
629
  Background:
@@ -711,7 +701,7 @@ Feature: Implementation Plan for [Feature Name]
711
701
 
712
702
  ## Step 13: Full Metrics and Complexity Score
713
703
 
714
- Track and report in `metrics/analysis-metrics.md`:
704
+ Track and report in the `## Analysis Metrics` section of `report.md`:
715
705
 
716
706
  ```markdown
717
707
  ## Analysis Metrics
@@ -1,7 +1,10 @@
1
1
  ---
2
2
  name: feature-analyzer
3
- description: "Use when analyzing feature branch changes across repos, planning implementation, or understanding backend→frontend contracts. Requires the source repository, target repository, and branch as confirmed input; the skill's PRE-STEP validates them before any analysis."
3
+ description: "Use when analyzing feature branch changes across repos, planning implementation, or understanding backend→frontend contracts. Requires the source repository, target repository, and branch as confirmed input; the skill's PRE-STEP validates them before any analysis. NOT for: breaking an issue into implementable tasks (use issue-analyzer)."
4
4
  triggers:
5
+ - "analyze feature"
6
+ - "study module"
7
+ - "investigate branch"
5
8
  - "Analyze branch"
6
9
  - "Analyze changes"
7
10
  - "Analyze commit"
@@ -12,8 +15,8 @@ triggers:
12
15
  metadata:
13
16
  author: "MrCipherSmith"
14
17
  version: "2.4.0"
15
- category: "analysis"
16
- compatible_harnesses: "cursor,codex,zed,opencode"
18
+ category: "orchestration"
19
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
17
20
  license: "MIT"
18
21
  ---
19
22
 
@@ -275,7 +278,7 @@ When focus specified: boost files matching focus keywords to P0; select ALL focu
275
278
  1. **Dependency search**: find all target files importing changed DTOs/APIs from source
276
279
  2. **Contract divergence**: compare new source contracts with current target implementation
277
280
  3. **Target deep dive**: read 2-3 key components that will need changes
278
- 4. **Target rules compliance**: check `.cursor/rules/core/*.mdc` in target repo
281
+ 4. **Target rules compliance**: check `.metaproject/rules/core/*.mdc` in target repo
279
282
 
280
283
  ---
281
284
 
@@ -333,24 +336,14 @@ Wait for user confirmation before generating full report.
333
336
  ### Output Structure
334
337
 
335
338
  ```
336
- <DOCS_ROOT>/analysis/<feature-name>-<YYYY-MM-DD>/
337
- ├── README.md # Index and navigation
338
- ├── report/
339
- │ ├── en/report.md # English for humans
340
- │ ├── ru/report.md # Russian for humans
341
- │ └── ai/report.md # Structured for AI agents (EN)
342
- ├── plans/
343
- │ ├── en/implementation-plan.md
344
- │ ├── ru/implementation-plan.md
345
- │ └── ai/implementation-plan.md
346
- ├── contracts/
347
- │ ├── api-changes.md # API contract diff
348
- │ └── dto-comparison.md # Before/after DTOs
349
- └── metrics/
350
- └── analysis-metrics.md # Analysis metadata
339
+ <DOCS_ROOT>/analysis/<feature-name>/
340
+ ├── report.md # Findings, API contract diff, DTO comparison, cross-repo impact, analysis metrics
341
+ └── implementation-plan.md # Actionable implementation plan derived from the analysis
351
342
  ```
352
343
 
353
- The AI-readable format (`report/ai/`, `plans/ai/`) uses Gherkin-style scenarios.
344
+ No date-stamped folder: update `report.md`/`implementation-plan.md` in place for a rerun on the same feature rather than creating a parallel copy. Default output is a single English (`en`) pair. Add other language variants only if the user explicitly asks for them, and keep any variants you create synchronized.
345
+
346
+ `report.md` should use Gherkin-style scenarios where they make findings easier for other AI agents to parse.
354
347
  > For full Gherkin output format and syntax rules, see `SKILL.detail.md`.
355
348
 
356
349
  ---
@@ -360,7 +353,7 @@ The AI-readable format (`report/ai/`, `plans/ai/`) uses Gherkin-style scenarios.
360
353
  - Every claim MUST reference specific code: `[filename.ts:L123](file:///absolute/path#L123)`
361
354
  - Minimum 3 code examples per report
362
355
  - Mermaid diagrams for architecture, tables for DTO changes, flowcharts for data flow
363
- - Multi-language: `en/` for humans, `ru/` for humans, `ai/` for AI agents
356
+ - Default to a single `en` document; add `ru`/`ai` (or other) variants only when the user explicitly asks, keeping them synchronized
364
357
 
365
358
  ---
366
359
 
@@ -378,7 +371,7 @@ The AI-readable format (`report/ai/`, `plans/ai/`) uses Gherkin-style scenarios.
378
371
 
379
372
  ## Step 13: Analysis Metrics
380
373
 
381
- Track and include in `metrics/analysis-metrics.md`:
374
+ Track and include in the `## Analysis Metrics` section of `report.md`:
382
375
  - Duration, files analyzed (P0/P1/P2), lines changed
383
376
  - Cross-repo dependencies, API endpoints changed, DTOs modified
384
377
  - Breaking changes count, test coverage %, risk level
@@ -415,19 +408,39 @@ Follow `documentation-management.mdc`: update `<DOCS_ROOT>/readme.md`, add entry
415
408
  4. **Never assume** — ask user when unclear
416
409
  5. **Never skip** intermediate review for complex analyses (P0 files > 3)
417
410
  6. **Always provide** concrete, actionable recommendations
418
- 7. **Always include** both human-readable and AI-readable formats
411
+ 7. **Always default** to a single-language document (`en`); add other language variants only when the user explicitly asks
419
412
 
420
413
  ---
421
414
 
422
- ## Success Criteria
415
+ ## Red Flags
416
+
417
+ Stop and re-read this skill if you are thinking:
418
+
419
+ | Rationalization | Rebuttal |
420
+ |---|---|
421
+ | "The user named a branch, so I have enough to start." | The PRE-STEP needs source repo, target repo and branch, each confirmed. A branch without its repo pair is how a cross-repo analysis quietly becomes source-only and reports no frontend impact because it never looked at the frontend. |
422
+ | "`git diff` came back empty, so the branch changed nothing." | Step 12 names the three usual causes: the wrong BASE_SHA, changes that are staged or untracked, and the wrong branch checked out. Report "no changes" only after `--cached`, `git status` and the branching point all agree. |
423
+ | "I read the diff hunks, so I understand the change." | A hunk shows the lines that moved, not the contract they belong to. The Deep Dive Protocol reads P0 files whole because the breaking part of a change is usually the caller the diff never touched. |
424
+ | "The finding is clear from the code I just read — the line reference can wait." | Step 11 makes a `file:L123` citation mandatory for every claim. An uncited claim cannot be checked by the developer acting on it, and a report of uncited claims is indistinguishable from a plausible guess. |
425
+ | "There are 6 P0 files but the picture is obvious, so I'll skip the intermediate review." | Rule 5 forbids skipping it above 3 P0 files. The intermediate review is the only point where the user can correct the scope before a full report is written against the wrong one. |
426
+ | "An analysis for this feature already exists, so I'll write mine into a new folder." | Step 10 requires updating `report.md` and `implementation-plan.md` in place. Parallel copies mean the next reader picks one, and nothing marks which is current. |
427
+ | "GitHub MCP is unavailable, so issue and PR context is out of reach." | Step 12's fallback is git history plus a notice to the user — not silence. An analysis that drops the issue context without saying so reads as if the issue held nothing relevant. |
428
+
429
+ ---
430
+
431
+ ## Exit Criteria
432
+
433
+ Do not report the analysis as complete until all of these hold:
423
434
 
424
- Analysis is successful when:
425
- - Business logic is fully understood and documented
426
- - API contracts are clearly specified
427
- - Breaking changes are identified
428
- - Implementation plan is actionable
429
- - User confirms understanding via intermediate review
430
- - All P0 files analyzed completely
435
+ - The PRE-STEP inputs (source repo + branch, target repo + branch, mode) were confirmed by the user, not inferred — and the report states them.
436
+ - Mode A: `BASE_SHA` is recorded in the report. Mode B: the report says explicitly that it describes current state, not a diff.
437
+ - Every P0 file was read in full and appears in the analysed-files list; the P0/P1/P2 counts in `## Analysis Metrics` match that list.
438
+ - `report.md` contains at least 3 code examples, and every claim carries a `file:line` reference.
439
+ - API contracts and breaking changes each have a section — a "none found" is written out with what was checked to reach it.
440
+ - `implementation-plan.md` exists and every step names a file or module to touch; no step reads "investigate".
441
+ - `## Analysis Metrics` includes the computed complexity score and its inputs.
442
+ - The user answered the intermediate review prompt (mandatory whenever P0 files > 3), and any correction they made is reflected in the final report.
443
+ - Step 15 post-analysis is done: `<DOCS_ROOT>/readme.md` and the analysis index name this analysis.
431
444
 
432
445
  ---
433
446
 
@@ -57,6 +57,6 @@
57
57
  | Field | Value |
58
58
  |-------|-------|
59
59
  | Base Dir | `.metaproject/jobs/<job-name>/ai/analysis` |
60
- | Folder Name | `async-search-current-state` |
61
- | Languages | `en, ru, ai` |
60
+ | Folder Name | `async-search` |
61
+ | Languages | `en` |
62
62
  | Include Metrics | `true` |
@@ -75,5 +75,5 @@
75
75
  |-------|-------|
76
76
  | Base Dir | `<DOCS_ROOT>/analysis` |
77
77
  | Folder Name | |
78
- | Languages | `en, ru, ai` |
78
+ | Languages | `en` |
79
79
  | Include Metrics | `true` |
@@ -225,7 +225,7 @@
225
225
  },
226
226
  "folder_name": {
227
227
  "type": "string",
228
- "description": "Custom folder name. Defaults to <feature>-<date> for Mode A, <feature>-current-state-<date> for Mode B"
228
+ "description": "Custom folder name. Defaults to <feature-name> (no date suffix) for both Mode A and Mode B"
229
229
  },
230
230
  "languages": {
231
231
  "type": "array",
@@ -233,13 +233,13 @@
233
233
  "type": "string",
234
234
  "enum": ["en", "ru", "ai"]
235
235
  },
236
- "default": ["en", "ru", "ai"],
237
- "description": "Which report languages to generate. ai = Gherkin format for AI agents"
236
+ "default": ["en"],
237
+ "description": "Which report languages to generate. Defaults to a single 'en' document; add 'ru'/'ai' only when the user explicitly asks for them. ai = Gherkin format for AI agents"
238
238
  },
239
239
  "include_metrics": {
240
240
  "type": "boolean",
241
241
  "default": true,
242
- "description": "Include analysis-metrics.md in output"
242
+ "description": "Include an Analysis Metrics section in report.md"
243
243
  }
244
244
  }
245
245
  }
@@ -19,7 +19,7 @@
19
19
  ↓
20
20
  [Субагент] → выполняет SKILL.md feature-analyzer автономно
21
21
  ↓
22
- [Результат] → docs/analysis/<feature>-<date>/
22
+ [Результат] → docs/analysis/<feature>/
23
23
  -->
24
24
 
25
25
  ## Инструкция для оркестратора
@@ -211,7 +211,7 @@ TICKET REFERENCE:
211
211
 
212
212
  Base directory: {{output.base_dir | default("<DOCS_ROOT>/analysis")}}
213
213
  Folder name: {{output.folder_name | default("auto-generated per SKILL.md rules")}}
214
- Languages: {{output.languages | default("en, ru, ai")}}
214
+ Languages: {{output.languages | default("en")}}
215
215
  Include metrics: {{output.include_metrics | default("true")}}
216
216
 
217
217
  ═══════════════════════════════════════════════