@mrciphersmith/keryx 0.2.71 → 0.2.72

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 (65) hide show
  1. package/dist/cli.js +4296 -2223
  2. package/package.json +1 -1
  3. package/src/gdskills/bundled/rules/core/code-review-learned-profile.mdc +81 -0
  4. package/src/gdskills/bundled/rules/core/jobs-documentation.mdc +1 -1
  5. package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +8 -4
  6. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +2 -2
  7. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +2 -2
  8. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +2 -2
  9. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +2 -2
  10. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +2 -2
  11. package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +2 -2
  12. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +3 -3
  13. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +3 -3
  14. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +3 -3
  15. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +3 -3
  16. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +3 -3
  17. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +1 -1
  18. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +1 -1
  19. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +2 -2
  20. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +2 -2
  21. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +1 -1
  22. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +1 -1
  23. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +1 -1
  24. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +1 -1
  25. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +1 -1
  26. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +972 -509
  27. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +972 -509
  28. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +943 -513
  29. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +972 -509
  30. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +972 -509
  31. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/input-contract.schema.json +38 -28
  32. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/orchestrator-prompt.md +98 -66
  33. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/output-contract.schema.json +27 -5
  34. package/src/gdskills/bundled/skills/orchestration/task-implementer/input-contract.schema.json +1 -1
  35. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +2 -2
  36. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +252 -0
  37. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +252 -0
  38. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +243 -0
  39. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +252 -0
  40. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +252 -0
  41. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +1 -1
  42. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +1 -1
  43. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +1 -1
  44. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +1 -1
  45. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +1 -1
  46. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +1 -1
  47. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +1 -1
  48. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +1 -1
  49. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +1 -1
  50. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +1 -1
  51. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +2 -2
  52. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +10 -10
  53. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +1 -1
  54. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +36 -17
  55. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +1 -1
  56. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +1 -1
  57. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +1 -1
  58. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
  59. package/src/gdskills/bundled/skills/shared/git-merge-base.md +1 -1
  60. package/src/gdskills/bundled/rules/core/code-review-b091-profile.mdc +0 -48
  61. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.codex.md +0 -209
  62. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.cursor.md +0 -209
  63. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.md +0 -208
  64. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.opencode.md +0 -209
  65. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.zed.md +0 -209
@@ -0,0 +1,252 @@
1
+ ---
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."
4
+ triggers:
5
+ - "learned review"
6
+ - "review with our conventions"
7
+ - "review using what we learned"
8
+ metadata:
9
+ author: "keryx"
10
+ version: "2.0.0"
11
+ category: "review"
12
+ compatible_harnesses: "cursor,codex,zed,opencode"
13
+ license: "MIT"
14
+ ---
15
+
16
+ # Learned Code Review (current branch only)
17
+
18
+ ## What this skill is, and what it is not
19
+
20
+ This skill carries **no review conventions of its own**. It is a mechanism with
21
+ an empty checklist, and the checklist is filled in by the project that installs
22
+ it.
23
+
24
+ What it applies is a **project skill** under
25
+ `.metaproject/project-skills/<module>/<skill>/SKILL.md`, whose `Review Lessons`,
26
+ `Review Checklist` and `Anti-patterns` sections were written from pull-request
27
+ comments left by the people that project named. Point a second project at
28
+ different reviewers and its learned skill diverges from the first. That is the
29
+ intended behaviour: there is no single correct checklist, and shipping one would
30
+ mean shipping one team's opinions to everybody.
31
+
32
+ If this project has no learned skill yet, **say so and stop**. An empty learned
33
+ review is not a generic review; use `review-orchestrator` for that.
34
+
35
+ ## Workflow
36
+
37
+ Copy this checklist and track progress:
38
+
39
+ ```
40
+ Learned Review Progress:
41
+ - [ ] Step 1: Read .metaproject/review-learning.config.json — which skill is this project's?
42
+ - [ ] Step 2: Read that project skill; if it has no lessons, stop and say so
43
+ - [ ] Step 3: Determine parent branch and calculate merge-base
44
+ - [ ] Step 4: Collect git diff (committed + local changes)
45
+ - [ ] Step 5: Apply the learned checklist, lesson by lesson
46
+ - [ ] Step 6: Report each finding with the learned lesson it rests on
47
+ - [ ] Step 7: Feed new pull-request comments back with `keryx review learn`
48
+ ```
49
+
50
+ ## Mandatory rules
51
+
52
+ 1. **Default scope (no commit hash/range given)**: the review covers **all**
53
+ changes on the current branch from the merge-base with its parent branch —
54
+ committed (`BASE_SHA..HEAD`) and local uncommitted (staged/unstaged/untracked).
55
+ 2. **Explicit commit hash/range**: review only the requested range; do not add
56
+ local uncommitted changes unless asked separately.
57
+ 3. **The checklist is the project's, not this file's**: every finding cites a
58
+ line in the project skill named by
59
+ `.metaproject/review-learning.config.json`. A finding with nothing behind it
60
+ there is a generic finding and belongs to the reviewer that owns it —
61
+ `review-logic`, `review-architecture`, `review-security-code`.
62
+ 4. **Result**: a detailed report with an explanation per finding and a concrete
63
+ fix (a minimal patch where the fix is obvious).
64
+
65
+ ## Where the checklist comes from
66
+
67
+ ```bash
68
+ # 1. Which local skill does this project teach, from which repository,
69
+ # and whose comments count?
70
+ cat .metaproject/review-learning.config.json
71
+
72
+ # 2. The comments themselves, collected once per round and kept on disk.
73
+ keryx review comments collect --repo <owner/repo> --pr <n> --sha <head-sha>
74
+
75
+ # 3. The join: configured authors only, read from the record above, never
76
+ # re-fetched. Writes a proposal and changes nothing.
77
+ keryx review learn --pr <n>
78
+
79
+ # 4. The only writer. Bumps the skill version, appends to skill-changelog.md,
80
+ # and refuses any target outside .metaproject/project-skills/.
81
+ keryx skills learn apply .metaproject/data/gdskills/proposals/<id>.json
82
+ ```
83
+
84
+ An author the config does not name contributes nothing — their text reaches no
85
+ proposal and no `SKILL.md`. A project with no config file does not learn, and
86
+ that is a supported state rather than an error.
87
+
88
+ ## Determining the parent ref (deterministic — the branch parent, not the upstream)
89
+
90
+ Use the first variant that exists:
91
+
92
+ 1. `origin/main`
93
+ 2. `origin/master`
94
+ 3. `main`
95
+ 4. `master`
96
+ 5. `@{upstream}` **only when it is not the current feature branch**
97
+
98
+ ```bash
99
+ BRANCH="$(git rev-parse --abbrev-ref HEAD)"
100
+ UPSTREAM_REF="$(git rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2>/dev/null || true)"
101
+
102
+ PARENT=""
103
+ if git rev-parse --verify -q "origin/main" >/dev/null; then
104
+ PARENT="origin/main"
105
+ elif git rev-parse --verify -q "origin/master" >/dev/null; then
106
+ PARENT="origin/master"
107
+ elif git rev-parse --verify -q "main" >/dev/null; then
108
+ PARENT="main"
109
+ elif git rev-parse --verify -q "master" >/dev/null; then
110
+ PARENT="master"
111
+ elif [ -n "$UPSTREAM_REF" ] && [ "$UPSTREAM_REF" != "$BRANCH" ] && [ "$UPSTREAM_REF" != "origin/$BRANCH" ]; then
112
+ PARENT="@{upstream}"
113
+ else
114
+ echo "Cannot determine parent ref" >&2
115
+ exit 1
116
+ fi
117
+
118
+ BASE_SHA="$(git merge-base HEAD "$PARENT")"
119
+ ```
120
+
121
+ ## Commands to assemble the review slice
122
+
123
+ ### A) Default mode (no hash/range from the user)
124
+
125
+ ```bash
126
+ git status
127
+
128
+ # The committed part of the branch
129
+ git log --oneline "${BASE_SHA}..HEAD"
130
+ git diff --stat "${BASE_SHA}..HEAD"
131
+ git diff --name-status "${BASE_SHA}..HEAD"
132
+ git diff "${BASE_SHA}..HEAD"
133
+
134
+ # The full current slice from merge-base to the working tree:
135
+ # commits + staged + unstaged
136
+ # (untracked files via git status / git ls-files)
137
+ git diff --stat "${BASE_SHA}"
138
+ git diff --name-status "${BASE_SHA}"
139
+ git diff "${BASE_SHA}"
140
+ git ls-files --others --exclude-standard
141
+ ```
142
+
143
+ ### B) Explicit hash/range mode
144
+
145
+ ```bash
146
+ git show --stat --name-status --patch <COMMIT_SHA>
147
+ git log --oneline <FROM_SHA>..<TO_SHA>
148
+ git diff --stat <FROM_SHA>..<TO_SHA>
149
+ git diff --name-status <FROM_SHA>..<TO_SHA>
150
+ git diff <FROM_SHA>..<TO_SHA>
151
+ ```
152
+
153
+ ## How to review
154
+
155
+ Work the learned checklist one lesson at a time against the diff. For each
156
+ lesson in the project skill, ask whether the diff contains the situation the
157
+ lesson describes, and record the answer either way — a lesson that never matches
158
+ anything is a lesson worth retiring, and only a review that checked it can say
159
+ so.
160
+
161
+ Three rules govern the application, and they are the same three whatever the
162
+ lessons say:
163
+
164
+ - **A lesson is evidence, not authority.** It records that somebody objected to
165
+ something once. If the diff has a reason the objection does not apply here, the
166
+ reason wins and the finding is not raised.
167
+ - **Do not generalise a lesson past its text.** A lesson about one function is
168
+ about that shape of function. Widening it into a rule about a layer, a module
169
+ or a language is inventing a convention the project never agreed to.
170
+ - **Do not attribute.** The record says a comment was left. Reporting a finding
171
+ as what a particular person would want turns a checklist back into a persona,
172
+ which is the defect this skill exists to remove.
173
+
174
+ ## Output format
175
+
176
+ ```markdown
177
+ ## Verdict
178
+
179
+ <APPROVE / APPROVE WITH SUGGESTIONS / REQUEST CHANGES / COMMENT> + the 1-3 most
180
+ important points.
181
+
182
+ ## Review scope (current branch only)
183
+
184
+ - Branch: `<BRANCH>`
185
+ - Parent ref: `<PARENT>`
186
+ - Merge-base: `<BASE_SHA>`
187
+ - Scope mode: `<default-with-uncommitted | explicit-hash-range>`
188
+ - Commits (merge-base..HEAD): <N>
189
+ - Changed files: <list or count>
190
+
191
+ ## Learned checklist applied
192
+
193
+ - Project skill: `<module>/<skill>` version `<x.y.z>`
194
+ - Lessons checked: <N>
195
+ - Lessons that matched: <N>
196
+
197
+ ## Findings
198
+
199
+ <findings, grouped by the learned lesson each rests on>
200
+
201
+ ## Findings with no learned lesson behind them
202
+
203
+ <either empty, or listed separately and routed to the reviewer that owns them>
204
+
205
+ ## Suggested fixes (patches)
206
+
207
+ <minimal unified diffs for the obvious ones>
208
+ ```
209
+
210
+ ### Required shape of each finding
211
+
212
+ - **Severity**: `blocker` / `major` / `minor`
213
+ - **Learned lesson**: the line from the project skill this rests on
214
+ - **Location**: file path + the relevant hunk from the diff
215
+ - **Problem**: what is wrong
216
+ - **Why it matters**: correctness / testability / conventions / maintainability
217
+ - **Suggested fix**: what specifically to do, without widening scope
218
+ - **Optional patch**: a unified diff when the fix is simple
219
+
220
+ Example patch block:
221
+
222
+ ```diff
223
+ diff --git a/path/file.ts b/path/file.ts
224
+ index 0000000..1111111 100644
225
+ --- a/path/file.ts
226
+ +++ b/path/file.ts
227
+ @@ -1,3 +1,3 @@
228
+ -const x = 1;
229
+ +const x = 2;
230
+ ```
231
+
232
+ ## Job Context Awareness
233
+
234
+ When dispatched by `job-orchestrator` as part of a job pipeline, the prompt MAY
235
+ include:
236
+
237
+ ```
238
+ JOB_NAME: <job-name>
239
+ CONTEXT_PATH: .metaproject/jobs/<job-name>/ai/context.md
240
+ ```
241
+
242
+ If provided and the file exists, read the context document before starting the
243
+ review. Use it to:
244
+
245
+ - Understand which libraries and patterns were intentionally chosen for the
246
+ implementation
247
+ - Avoid flagging correct library usage as issues
248
+ - Provide more accurate findings by understanding the project's architectural
249
+ decisions
250
+
251
+ If the file does not exist or is not provided, proceed normally — context is
252
+ optional and non-blocking.
@@ -237,7 +237,7 @@ This skill covers **MobX store and state logic** — targeted review of store in
237
237
  | Store structure, actions, computed, reactions, async runInAction | ✅ YES | — |
238
238
  | View↔Store boundary violations | ✅ YES | — |
239
239
  | General code quality, readability, tests | ❌ NO | `code-ai-review` |
240
- | b091-style logic enforcement | ❌ NO | `code-b091-review` |
240
+ | Learned-convention enforcement | ❌ NO | `code-learned-review` |
241
241
  | Naming/style/architecture patterns outside stores | ❌ NO | `code-style-review` |
242
242
 
243
243
  ---
@@ -146,7 +146,7 @@ This skill covers **code style and architecture patterns** — naming, organizat
146
146
  | Naming conventions, file organization, import order | ✅ YES | — |
147
147
  | TypeScript patterns, component/hook structure | ✅ YES | — |
148
148
  | Architecture pattern compliance | ✅ YES | — |
149
- | Logic correctness, type safety deep dives | ❌ NO | `code-ai-review` or `code-b091-review` |
149
+ | Logic correctness, type safety deep dives | ❌ NO | `code-ai-review` or `code-learned-review` |
150
150
  | MobX store internals | ❌ NO | `code-mobx-store-review` |
151
151
 
152
152
  ---
@@ -211,7 +211,7 @@ Focus on **SRP** and **DIP** — the two most commonly violated in practice.
211
211
 
212
212
  ## Orchestrated Review Contract
213
213
 
214
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
214
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
215
215
 
216
216
  ---
217
217
 
@@ -230,7 +230,7 @@ is, and a condition that cannot name one is not a `blocker`.
230
230
 
231
231
  ## Orchestrated Review Contract
232
232
 
233
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
233
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
234
234
 
235
235
  ---
236
236
 
@@ -367,7 +367,7 @@ Flags:
367
367
 
368
368
  ## Orchestrated Review Contract
369
369
 
370
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
370
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
371
371
 
372
372
  ---
373
373
 
@@ -69,7 +69,7 @@ boundary is the trigger-and-outcome test.
69
69
 
70
70
  ## Orchestrated Review Contract
71
71
 
72
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
72
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
73
73
 
74
74
  ---
75
75
 
@@ -95,7 +95,7 @@ boundary is the trigger-and-outcome test.
95
95
 
96
96
  ## Orchestrated Review Contract
97
97
 
98
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
98
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
99
99
 
100
100
  ---
101
101
 
@@ -630,7 +630,7 @@ If the file does not exist or is not provided, proceed normally — context is o
630
630
 
631
631
  ## Orchestrated Review Contract
632
632
 
633
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
633
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
634
634
 
635
635
  ---
636
636
 
@@ -120,7 +120,7 @@ boundary is the trigger-and-outcome test.
120
120
 
121
121
  ## Orchestrated Review Contract
122
122
 
123
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
123
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
124
124
 
125
125
  ---
126
126
 
@@ -406,7 +406,7 @@ Flags:
406
406
 
407
407
  ## Orchestrated Review Contract
408
408
 
409
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
409
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
410
410
 
411
411
  ---
412
412
 
@@ -26,7 +26,7 @@ license: "MIT"
26
26
  # Review Logic
27
27
 
28
28
  Specialized reviewer for **logic correctness and algorithmic soundness**.
29
- Inherits from the original `code-ai-review` + `code-boss-review` correctness phases
29
+ Inherits from the original `code-ai-review` + `code-learned-review` correctness phases
30
30
  and unifies them into a single focused pass.
31
31
 
32
32
  This reviewer does not care about formatting, naming, or architecture opinions.
@@ -174,7 +174,7 @@ Do not review unrelated files.
174
174
 
175
175
  ## Orchestrated Review Contract
176
176
 
177
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
177
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
178
178
 
179
179
  ---
180
180
 
@@ -28,7 +28,7 @@ triggers:
28
28
  - "review --flow-graph"
29
29
  - "review --legacy-profiles"
30
30
  - "review --code-ai"
31
- - "review --b091"
31
+ - "review --learned"
32
32
  - "review --code-style"
33
33
  - "review --mobx-store"
34
34
  metadata:
@@ -153,7 +153,7 @@ which of its inputs were recovered and which were never written down.
153
153
 
154
154
  | Field | Type | Required | Description |
155
155
  |-------|------|----------|-------------|
156
- | `flags` | string[] | no | One or more of: `--frontend`, `--backend`, `--architecture`, `--security`, `--performance`, `--style`, `--clean-code`, `--highload`, `--project-conventions`, `--frontend-conventions`, `--testing-practices`, `--core-boundaries`, `--flow-graph`, `--legacy-profiles`, `--code-ai`, `--b091`, `--code-style`, `--mobx-store`, `--verify`, `--all` |
156
+ | `flags` | string[] | no | One or more of: `--frontend`, `--backend`, `--architecture`, `--security`, `--performance`, `--style`, `--clean-code`, `--highload`, `--project-conventions`, `--frontend-conventions`, `--testing-practices`, `--core-boundaries`, `--flow-graph`, `--legacy-profiles`, `--code-ai`, `--learned`, `--code-style`, `--mobx-store`, `--verify`, `--all` |
157
157
  | `path` | string | no | File or directory path to review (e.g., `src/stores/`, `src/components/UserCard.tsx`). Activates **path mode** — reviews the files at this path directly, not a git diff. |
158
158
  | `commit_range` | string | no | Explicit commit hash or range (e.g., `abc123..HEAD`). Overrides merge-base detection. Ignored in path mode. |
159
159
  | `issue_url` | string | no | GitHub issue or task URL. If provided, Stage 1 gate checks spec compliance before dispatching reviewers. |
@@ -420,7 +420,7 @@ not ask for our reasoning and is reading between other tasks.
420
420
 
421
421
  ## Review Context Pack
422
422
 
423
- Before routing reviewers, build a compact `review_context` object. This is the shared source of truth for all sub-agents and must follow `skills/review-orchestrator/review-context.schema.json`.
423
+ Before routing reviewers, build a compact `review_context` object. This is the shared source of truth for all sub-agents and must follow `skills/review/review-orchestrator/review-context.schema.json`.
424
424
 
425
425
  Required content:
426
426
  - Request: raw user request, flags, review mode, explicit paths or commit range.
@@ -817,9 +817,9 @@ Legacy/profile reviewers are specialized review profiles that predate the review
817
817
 
818
818
  | Trigger | Reviewers appended |
819
819
  |---|---|
820
- | `--legacy-profiles` | `code-ai-review` + `code-b091-review` + `code-style-review` + `code-mobx-store-review` when MobX/store files are present |
820
+ | `--legacy-profiles` | `code-ai-review` + `code-learned-review` + `code-style-review` + `code-mobx-store-review` when MobX/store files are present |
821
821
  | `--code-ai` | `code-ai-review` |
822
- | `--b091` | `code-b091-review` |
822
+ | `--learned` | `code-learned-review` |
823
823
  | `--code-style` | `code-style-review` |
824
824
  | `--mobx-store` | `code-mobx-store-review` |
825
825
  | `*.store.ts`, `makeObservable`, `observable`, `computed`, `action.bound` | suggest `code-mobx-store-review` as optional profile reviewer |
@@ -839,13 +839,13 @@ Review Plan Preview must include an `Optional legacy/profile reviewers` group an
839
839
  ```text
840
840
  Optional legacy/profile reviewers:
841
841
  - code-ai-review: available via --code-ai or --legacy-profiles
842
- - code-b091-review: available via --b091 or --legacy-profiles
842
+ - code-learned-review: available via --learned or --legacy-profiles
843
843
  - code-style-review: available via --code-style or --legacy-profiles
844
844
  - code-mobx-store-review: auto-suggest when *.store.ts or MobX patterns are present; available via --mobx-store or --legacy-profiles
845
845
 
846
846
  Skipped reviewers:
847
847
  - code-ai-review: profile reviewer, not selected unless --code-ai/--legacy-profiles
848
- - code-b091-review: profile reviewer, not selected unless --b091/--legacy-profiles
848
+ - code-learned-review: profile reviewer, not selected unless --learned/--legacy-profiles
849
849
  - code-style-review: legacy style profile, not selected unless --code-style/--legacy-profiles
850
850
  - code-mobx-store-review: not selected unless --mobx-store/--legacy-profiles or MobX store files are detected
851
851
  ```
@@ -989,7 +989,7 @@ Runtime rules:
989
989
 
990
990
  Do not use vague fallback messages such as "running through available agent types" without naming which reviewers used fallback and why.
991
991
 
992
- Pass each sub-reviewer a payload matching `skills/review-orchestrator/reviewer-input.schema.json`:
992
+ Pass each sub-reviewer a payload matching `skills/review/review-orchestrator/reviewer-input.schema.json`:
993
993
 
994
994
  ```yaml
995
995
  review_context: <bounded context pack>
@@ -1012,7 +1012,7 @@ target_path: <resolved path or file list>
1012
1012
  file_contents: <bounded file contents relevant to this reviewer>
1013
1013
  ```
1014
1014
 
1015
- Each reviewer must return a `REVIEW_RESULT` object matching `skills/review-orchestrator/reviewer-finding.schema.json`, followed by a concise markdown summary. The orchestrator must reject or normalize free-form reports before consolidation.
1015
+ Each reviewer must return a `REVIEW_RESULT` object matching `skills/review/review-orchestrator/reviewer-finding.schema.json`, followed by a concise markdown summary. The orchestrator must reject or normalize free-form reports before consolidation.
1016
1016
 
1017
1017
  **Important for path mode:** instruct each reviewer to check the **entire file**, not just changes. The scope report should say "Path: `<TARGET_PATH>`" instead of a branch/merge-base.
1018
1018
 
@@ -1034,7 +1034,7 @@ Each reviewer must return a `REVIEW_RESULT` object matching `skills/review-orche
1034
1034
  | Test / e2e conventions | NO | `review-testing-practices` |
1035
1035
  | Shared core boundary rules | NO | `review-core-boundaries` |
1036
1036
  | Shared flow/graph abstraction contracts | NO | `review-flow-graph` |
1037
- | Legacy/profile review profiles | NO | `code-ai-review`, `code-b091-review`, `code-style-review`, `code-mobx-store-review` |
1037
+ | Legacy/profile review profiles | NO | `code-ai-review`, `code-learned-review`, `code-style-review`, `code-mobx-store-review` |
1038
1038
 
1039
1039
  ---
1040
1040
 
@@ -368,7 +368,7 @@ If the file does not exist or is not provided, proceed normally — context is o
368
368
 
369
369
  ## Orchestrated Review Contract
370
370
 
371
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
371
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
372
372
 
373
373
  ---
374
374
 
@@ -41,7 +41,7 @@ review-pr-feedback Progress:
41
41
  - [ ] Step 4: Group comments by author
42
42
  - [ ] Step 5: Classify comment types (blocker intent / suggestion / question / nitpick)
43
43
  - [ ] Step 6: Explain each comment + suggest concrete fix with code example
44
- - [ ] Step 7: Detect senior/boss reviewer comments — offer pattern extraction (with user consent)
44
+ - [ ] Step 7: Comments from configured learning authors — offer a learning proposal (with user consent)
45
45
  - [ ] Step 8: Emit structured report with action items checklist
46
46
  ```
47
47
 
@@ -183,20 +183,39 @@ If confidence is Low, state both interpretations and ask the user which one appl
183
183
 
184
184
  ---
185
185
 
186
- ## Step 7: Senior / Boss Reviewer Handling
187
-
188
- **Detection**: if an author is identified as a senior or boss reviewer (by username, or by
189
- review authority markers such as "REQUEST_CHANGES from `boss`"), trigger this flow:
190
-
191
- 1. Notify the user: "This PR has comments from a senior reviewer (`<login>`)."
192
- 2. **NEVER update rules, CLAUDE.md, or any configuration without explicit user consent.**
193
- 3. Ask: "Should I analyze `<login>`'s comments for patterns and suggest updates to review rules?"
194
- 4. If the user agrees:
195
- - Identify recurring patterns in that reviewer's feedback (not one-off edge cases)
196
- - Propose specific additions to `.metaproject/rules/core/code-review-boss-profile.mdc` or the relevant rule file
197
- - Present the proposed changes to the user for approval before writing anything
198
- - After approval, update the rule file and note it in the output
199
- 5. Extract generalizable patterns only — not personal phrasing or one-off opinions
186
+ ## Step 7: Feed the comments back into the project's learned skill
187
+
188
+ **Detection is configuration, not judgement.** Which authors teach this project is
189
+ declared in `.metaproject/review-learning.config.json`, alongside the local skill
190
+ to teach and the repository to read. Do not decide that an author is senior,
191
+ authoritative, or worth learning from — the file decides, and an author it does
192
+ not name contributes nothing.
193
+
194
+ If the file is absent, this project does not learn. Say nothing about it and skip
195
+ this step; absence is a supported state, not a misconfiguration.
196
+
197
+ If the file is present and names at least one author who commented on this PR:
198
+
199
+ 1. Notify the user: "This PR has comments from `<login>`, a configured learning
200
+ source for `<module>/<skill>`."
201
+ 2. **NEVER apply a proposal without explicit user consent.**
202
+ 3. Ask: "Should I turn those comments into a learning proposal for
203
+ `<module>/<skill>`?"
204
+ 4. If the user agrees, run the two commands. The first writes a proposal and
205
+ changes nothing; the second is the only writer:
206
+ ```bash
207
+ keryx review learn --pr <n>
208
+ keryx skills learn apply .metaproject/data/gdskills/proposals/<id>.json
209
+ ```
210
+ 5. Present the proposal's lessons before applying. `learn` reads the record
211
+ `keryx review comments collect` already wrote and never re-fetches, so the
212
+ proposal shows exactly what would be written.
213
+
214
+ **The target is the project skill, never a rule file.** `.metaproject/rules/core/`
215
+ holds shipped templates that `keryx update` overwrites with force, and
216
+ `applyLearningProposal` refuses any target outside
217
+ `.metaproject/project-skills/` — a lesson written anywhere else is lost on the
218
+ next update, or refused outright.
200
219
 
201
220
  ---
202
221
 
@@ -318,7 +337,7 @@ If provided and the file exists, read it before fetching PR comments. If absent,
318
337
 
319
338
  | Rationalization | Why it is wrong |
320
339
  |----------------|-----------------|
321
- | "I'll update the rule file based on the boss's comments without asking" | NEVER auto-update rules; always ask first — rules affect all future reviews |
340
+ | "I'll write these comments into a rule file without asking" | NEVER apply a learning proposal unsupervised, and never target a rule file — `keryx skills learn apply` refuses anything outside `.metaproject/project-skills/` |
322
341
  | "The reviewer's question is just curiosity, not a real concern" | Questions often hide concerns; classify carefully |
323
342
  | "I'll skip the 'praise' comments — they're not actionable" | Positive patterns help developers understand what to repeat |
324
343
  | "Confidence High for an ambiguous comment" | Low confidence is honest; false confidence leads to wrong fixes |
@@ -327,7 +346,7 @@ If provided and the file exists, read it before fetching PR comments. If absent,
327
346
 
328
347
  ## Orchestrated Review Contract
329
348
 
330
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
349
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
331
350
 
332
351
  ---
333
352
 
@@ -373,7 +373,7 @@ If the file does not exist or is not provided, proceed normally — context is o
373
373
 
374
374
  ## Orchestrated Review Contract
375
375
 
376
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
376
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
377
377
 
378
378
  ---
379
379
 
@@ -229,7 +229,7 @@ boundary is the trigger-and-outcome test.
229
229
 
230
230
  ## Orchestrated Review Contract
231
231
 
232
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
232
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
233
233
 
234
234
  ---
235
235
 
@@ -109,7 +109,7 @@ boundary is the trigger-and-outcome test.
109
109
 
110
110
  ## Orchestrated Review Contract
111
111
 
112
- When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
112
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
113
113
 
114
114
  ---
115
115
 
@@ -201,7 +201,7 @@ STATUS: DONE | NEEDS_CONTEXT | BLOCKED
201
201
  There is no `DONE_WITH_CONCERNS`: a verifier has no concerns of its own.
202
202
 
203
203
  Return one object conforming to
204
- `skills/review-orchestrator/verification-claim.schema.json`:
204
+ `skills/review/review-orchestrator/verification-claim.schema.json`:
205
205
 
206
206
  ````text
207
207
  ```json keryx:verifications
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Purpose
4
4
  Reusable bash script for determining the review scope (merge-base) for review skills.
5
- Used by: code-ai-review, code-boss-review, code-mobx-store-review, code-style-review.
5
+ Used by: code-ai-review, code-learned-review, code-mobx-store-review, code-style-review.
6
6
 
7
7
  ## Script
8
8