@mrciphersmith/keryx 0.2.71 → 0.2.73

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 (162) hide show
  1. package/dist/cli.js +4632 -2229
  2. package/package.json +2 -2
  3. package/src/gdskills/bundled/rules/core/code-review-learned-profile.mdc +81 -0
  4. package/src/gdskills/bundled/rules/core/gproject-contracts.mdc +1 -1
  5. package/src/gdskills/bundled/rules/core/jobs-documentation.mdc +2 -2
  6. package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +8 -4
  7. package/src/gdskills/bundled/rules/core/subagent-context-construction.md +1 -1
  8. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +326 -20
  9. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +320 -22
  10. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +326 -12
  11. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +333 -9
  12. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +94 -6
  13. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +94 -6
  14. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +2 -2
  15. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +94 -6
  16. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +94 -6
  17. package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +3 -3
  18. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +154 -1098
  19. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +154 -1098
  20. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +3 -3
  21. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +154 -1098
  22. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +154 -1098
  23. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +1 -1
  24. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +102 -42
  25. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +102 -42
  26. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +2 -2
  27. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +2 -2
  28. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +115 -49
  29. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +115 -49
  30. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +115 -49
  31. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +115 -49
  32. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
  33. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +16 -7
  34. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +16 -7
  35. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +1 -1
  36. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +16 -7
  37. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +16 -7
  38. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +973 -510
  39. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +973 -510
  40. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +944 -514
  41. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +973 -510
  42. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +973 -510
  43. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/input-contract.schema.json +38 -28
  44. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/orchestrator-prompt.md +98 -66
  45. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/output-contract.schema.json +27 -5
  46. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +300 -55
  47. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +300 -55
  48. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +120 -37
  49. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +300 -55
  50. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +300 -55
  51. package/src/gdskills/bundled/skills/orchestration/task-implementer/input-contract.schema.json +57 -15
  52. package/src/gdskills/bundled/skills/orchestration/task-implementer/orchestrator-prompt.md +50 -23
  53. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +6 -2
  54. package/src/gdskills/bundled/skills/orchestration/task-implementer/task-request.template.md +18 -12
  55. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +1 -1
  56. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +1 -1
  57. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +168 -9
  58. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +168 -9
  59. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +7 -1
  60. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +7 -1
  61. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +7 -1
  62. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +7 -1
  63. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +215 -9
  64. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +215 -9
  65. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +168 -9
  66. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +168 -9
  67. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +2 -2
  68. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +2 -2
  69. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +2 -2
  70. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +2 -2
  71. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +133 -9
  72. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +133 -9
  73. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +145 -9
  74. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +145 -9
  75. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +210 -9
  76. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +210 -9
  77. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +161 -9
  78. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +161 -9
  79. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +1 -1
  80. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +1 -1
  81. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +1 -1
  82. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +1 -1
  83. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +1 -1
  84. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +1 -1
  85. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +1 -1
  86. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +1 -1
  87. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +1 -1
  88. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +1 -1
  89. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +1 -1
  90. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +1 -1
  91. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +1 -1
  92. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +1 -1
  93. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +1 -1
  94. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +1 -1
  95. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +1 -1
  96. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +1 -1
  97. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +15 -1
  98. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +248 -165
  99. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +15 -1
  100. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +359 -19
  101. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +1 -1
  102. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +1 -1
  103. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +1 -1
  104. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +1 -1
  105. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +1 -1
  106. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +1 -1
  107. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +299 -24
  108. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +296 -31
  109. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +309 -18
  110. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +312 -17
  111. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +29 -30
  112. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +29 -30
  113. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +2 -2
  114. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +29 -30
  115. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +29 -30
  116. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +243 -0
  117. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +243 -0
  118. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +243 -0
  119. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +243 -0
  120. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +243 -0
  121. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +19 -23
  122. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +19 -23
  123. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +1 -1
  124. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +19 -23
  125. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +19 -23
  126. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +17 -24
  127. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +17 -24
  128. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +1 -1
  129. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +17 -24
  130. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +17 -24
  131. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +1 -1
  132. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +1 -1
  133. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +1 -1
  134. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +1 -1
  135. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +1 -1
  136. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +1 -1
  137. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +1 -1
  138. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +1 -1
  139. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +2 -2
  140. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +26 -13
  141. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +1 -1
  142. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +36 -17
  143. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +1 -1
  144. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +1 -1
  145. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +1 -1
  146. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
  147. package/src/gdskills/bundled/skills/shared/git-merge-base.md +1 -1
  148. package/src/gdskills/bundled/rules/core/code-review-b091-profile.mdc +0 -48
  149. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.claude.md +0 -46
  150. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.claude.md +0 -94
  151. package/src/gdskills/bundled/skills/quality/changelog/SKILL.claude.md +0 -45
  152. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.claude.md +0 -40
  153. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.claude.md +0 -45
  154. package/src/gdskills/bundled/skills/quality/deploy/SKILL.claude.md +0 -42
  155. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.claude.md +0 -48
  156. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.claude.md +0 -40
  157. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.claude.md +0 -30
  158. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.codex.md +0 -209
  159. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.cursor.md +0 -209
  160. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.md +0 -208
  161. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.opencode.md +0 -209
  162. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.zed.md +0 -209
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrciphersmith/keryx",
3
- "version": "0.2.71",
3
+ "version": "0.2.73",
4
4
  "description": "Version-controlled project context for AI coding agents: code graph, architecture wiki, project memory, relevant tests, quality signals, and task flows.",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -42,7 +42,7 @@
42
42
  "check": "tsc --noEmit && bun test",
43
43
  "check:doc-links": "bun scripts/check-doc-links.ts",
44
44
  "baseline:review-precision": "bun scripts/review-precision-baseline.ts",
45
- "test:guards": "bun test src/lib/config-dir.ast.test.ts src/lib/config-dir.readers.test.ts src/lib/production-graph.test.ts src/harness/policy/profiles.test.ts src/lib/serve-server.test.ts"
45
+ "test:guards": "bun test src/lib/config-dir.ast.test.ts src/lib/config-dir.readers.test.ts src/lib/production-graph.test.ts src/harness/policy/profiles.test.ts src/lib/serve-server.test.ts src/gdskills/agent-catalogue-xref.test.ts src/gdskills/enforcement-claims.test.ts"
46
46
  },
47
47
  "files": [
48
48
  "dist",
@@ -0,0 +1,81 @@
1
+ ---
2
+ description: "Learned review profile: a review checklist this project built from its own pull-request comments, not a style shipped with the tool."
3
+ alwaysApply: false
4
+ ---
5
+
6
+ # Learned Review Profile
7
+
8
+ ## What This Rule Is
9
+
10
+ This is a **dynamic rule**. It carries no conventions of its own, and it ships
11
+ empty of them on purpose.
12
+
13
+ Every other review rule in `rules/core/` states what to flag. This one states
14
+ **where the things to flag come from**: the pull-request comments left on this
15
+ project, by the people this project named, applied to this project's own code.
16
+ Nothing here describes a reviewer, a team, or a stack — because a rule that
17
+ described one would be wrong for the next project that installed it.
18
+
19
+ The checklist a reader wants lives in the project, in a project skill under
20
+ `.metaproject/project-skills/<module>/<skill>/SKILL.md`. That file is written by
21
+ `keryx review learn` proposing and `keryx skills learn apply` applying, and it
22
+ never travels back into the tool.
23
+
24
+ ## Where The Content Comes From
25
+
26
+ ```
27
+ keryx review comments collect → the durable record: who commented, and what they said
28
+ keryx review learn → keeps the configured authors, writes a proposal
29
+ keryx skills learn apply → writes the lesson into the project skill, bumps its version
30
+ ```
31
+
32
+ `.metaproject/review-learning.config.json` names the three things the join needs:
33
+ the local skill to teach, the repository to read, and the comment authors whose
34
+ text counts. A project without that file does not learn — that is a supported
35
+ state, not an error.
36
+
37
+ `keryx review learn` reads the record `collect` already wrote; it does not talk
38
+ to GitHub. An author the config does not name contributes nothing: their text
39
+ reaches no proposal and no `SKILL.md`.
40
+
41
+ ## Two Boundaries That Are Enforced In Code, Not Advised Here
42
+
43
+ - **Proposing never writes.** `keryx review learn` writes a proposal under
44
+ `.metaproject/data/gdskills/proposals/` and changes no skill. `keryx skills
45
+ learn apply` is the only writer, it refuses a proposal it has already applied,
46
+ and it records what it did in `skill-changelog.md`.
47
+ - **Learned content cannot leave the project.** `applyLearningProposal` resolves
48
+ the target and refuses any path outside `.metaproject/project-skills/`. A
49
+ project that misconfigures its skill path cannot write into the shipped
50
+ templates under `src/gdskills/bundled/`; the apply fails instead.
51
+
52
+ Both are assertions about code that exists. Neither is a request to be careful.
53
+
54
+ ## When To Apply
55
+
56
+ Apply when the project has a learned review skill and the reader wants that
57
+ project's accumulated review conventions rather than a generic pass. If the
58
+ project has no learned skill yet, prefer `review-orchestrator` and its
59
+ domain reviewers — an empty learned profile has nothing to say and should say
60
+ nothing.
61
+
62
+ ## Response Format
63
+
64
+ 1. Verdict in one line — the canonical verdict vocabulary (same set as
65
+ `core/code-review-ai-assistant.mdc`):
66
+ - `APPROVE` — no blocking issues; changes accepted as-is
67
+ - `APPROVE WITH SUGGESTIONS` — accepted but improvements noted for follow-up
68
+ - `REQUEST CHANGES` — has issues that must be fixed before merge
69
+ - `COMMENT` — informational findings only; no blocking action required
70
+ 2. Top 1-3 blocking findings, each traceable to a line in the learned skill.
71
+ 3. Concrete replacement/fix path.
72
+
73
+ ## Guardrails
74
+
75
+ - Cite the learned lesson a finding rests on. A finding with no line behind it in
76
+ the project skill is a generic review finding and belongs to the reviewer that
77
+ owns it.
78
+ - Do not restate a lesson as a rule about people. The record says a comment was
79
+ left; it does not license a claim about who is usually right.
80
+ - No personal attacks. No empty nitpicks. Keep recommendations lint-safe and
81
+ scoped.
@@ -33,7 +33,7 @@ Every dispatch from gproject-orchestrator MUST include:
33
33
  ```yaml
34
34
  # Required (from base protocol)
35
35
  description: "<phase>: <task>"
36
- subagent_type: "general"
36
+ subagent_type: "general-purpose"
37
37
  prompt: "<structured prompt — see template below>"
38
38
 
39
39
  # gproject-specific (inside prompt)
@@ -80,7 +80,7 @@ Every job folder MUST contain at minimum:
80
80
  ...
81
81
  ```
82
82
 
83
- > **`results/` folder:** Created by `task-implementer` during Phase 6 (one file per task). The orchestrator and wave-executor never receive full task results inline — they read these files only when a task reports `DONE_WITH_CONCERNS` or `BLOCKED`. This keeps the orchestrator context bounded.
83
+ > **`results/` folder:** Written by `task-implementer` during Phase 6.1 (one file per task), then validated with `keryx skills contracts validate … --schema task-implementer-output` and recorded with `keryx job document <job-name> --type implementation-report --file <that file>`, which refuses if the file was never written. There is no `wave-executor` agent: the orchestrator dispatches each task itself, never receives a full task result inline, and reads a `results/` file only when a task reports `DONE_WITH_CONCERNS` or `BLOCKED`. This keeps the orchestrator context bounded.
84
84
 
85
85
  ## README.md Format
86
86
 
@@ -112,7 +112,7 @@ The README is the entry point for both humans and AI agents. It MUST contain:
112
112
  1. [x] Analyze issue (issue-analyzer)
113
113
  2. [ ] Prepare feature branch
114
114
  3. [ ] Implement tasks (task-implementer)
115
- 4. [ ] Review (code-ai-review, code-boss-review, code-style-review)
115
+ 4. [ ] Review (code-ai-review, code-learned-review, code-style-review)
116
116
  5. [ ] Fix review findings
117
117
  6. [ ] Final checks
118
118
  7. [ ] Generate report
@@ -1,15 +1,19 @@
1
1
  ---
2
- description: "boss-style review profile: direct, strict, architecture-first feedback with concrete fixes."
2
+ description: "Strict review profile: direct, architecture-first feedback with concrete fixes."
3
3
  alwaysApply: false
4
4
  ---
5
5
 
6
- # boss Review Profile
6
+ # Strict Review Profile
7
7
 
8
8
  ## Purpose
9
- Replicate the boss review style for requested reviews.
9
+ Apply a strict, architecture-first pass: name the defect, name where the logic
10
+ belongs, and give the replacement.
10
11
 
11
12
  ## When To Apply
12
- Apply when user explicitly asks for review in boss style.
13
+ Apply when the caller explicitly asks for a strict review. For a checklist this
14
+ project learned from its own pull-request comments, use
15
+ `core/code-review-learned-profile.mdc` instead — that one carries no conventions
16
+ of its own and reads them from the project.
13
17
 
14
18
  ## Style Profile
15
19
  - Direct and concise.
@@ -62,7 +62,7 @@ Use this template for every subagent dispatch:
62
62
  ```
63
63
  Task({
64
64
  description: "<one-line summary for logs>",
65
- subagent_type: "general",
65
+ subagent_type: "general-purpose",
66
66
  prompt: |
67
67
  ## Task
68
68
  <Exactly what to do — no ambiguity>
@@ -1,47 +1,353 @@
1
1
  ---
2
2
  name: code-verifier
3
- description: "Full quality gate: lint, type-check, tests, circular imports. Mandatory post-implementation step in job-orchestrator. Use when: verifying code after implementation, running quality gate before review, checking code health standalone."
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
5
  triggers:
5
6
  - "Run verification"
6
7
  - "Quality gate"
8
+ - "Check code quality"
7
9
  - "Run lint and tests"
8
10
  - "Verify implementation"
11
+ - "Run checks"
9
12
  metadata:
10
13
  author: "MrCipherSmith"
11
14
  version: "1.0.0"
12
15
  category: "verification"
16
+ agent_worthy: true
13
17
  compatible_harnesses: "cursor,codex,zed,opencode"
14
18
  license: "MIT"
15
19
  ---
16
20
 
17
21
  # Code Verifier
18
22
 
19
- Full quality gate: lint → type-check → tests → circular imports.
23
+ ## Purpose
20
24
 
21
- **Position:** task-implementer → **code-verifier** → review
25
+ Runs the full quality gate for a project: lint, type-check, tests, and import validation. Provides a structured, parseable result that the orchestrator uses to decide whether to proceed or trigger a fix loop.
22
26
 
23
- ## Steps
24
- 1. Detect PM and tooling (bun/npm/pnpm/yarn/python/go)
25
- 2. Run lint (ESLint/Biome/ruff)
26
- 3. Run type-check (tsc --noEmit / mypy / pyright)
27
- 4. Run tests (vitest/jest/pytest/go test)
28
- 5. Check circular imports (madge, if available)
29
- 6. Classify findings by severity, determine gate
30
- 7. Emit VERIFICATION_RESULT
27
+ **Distinct from `task-implementer` Phase 5:** task-implementer does inline self-verification during implementation. `code-verifier` is an independent gate that runs after all tasks in a wave are complete — giving a clean, consolidated view of the whole diff, not per-task.
31
28
 
32
- ## Gate
33
- - CRITICAL (type errors, test failures) or HIGH (lint errors, cycles) → GATE: FAIL
34
- - LOW only → GATE: PASS_WITH_WARNINGS
29
+ **Input:** Codebase path + worktree path + scope (changed files or full project)
30
+ **Output:** `VERIFICATION_RESULT` structured report — gate status (pass/fail), per-check results, actionable findings
31
+
32
+ ## When to Use
33
+
34
+ - Dispatched by `job-orchestrator` after each task-implementer wave (mandatory)
35
+ - Dispatched by `job-orchestrator` after each fix iteration
36
+ - Run standalone: "verify my code", "run quality gate", "/code-verifier"
37
+ - Any time you need a reproducible, structured view of project health
38
+
39
+ ## Architecture: 4 Phases
40
+
41
+ ```
42
+ Phase 1: DETECT → Auto-detect stack, tooling, commands
43
+ Phase 2: RUN → Execute lint → type-check → tests → import-check
44
+ Phase 3: ANALYZE → Parse outputs, classify findings by severity
45
+ Phase 4: REPORT → Emit VERIFICATION_RESULT
46
+ ```
47
+
48
+ ---
49
+
50
+ ## Workflow
51
+
52
+ ```
53
+ Code Verifier Progress:
54
+ - [ ] Phase 1: Detect stack and tooling
55
+ - [ ] Phase 2: Run verification checks
56
+ - [ ] Phase 3: Analyze and classify findings
57
+ - [ ] Phase 4: Report results
58
+ ```
59
+
60
+ ---
61
+
62
+ ### Phase 1: DETECT
63
+
64
+ Auto-detect the project stack and available verification tools.
65
+
66
+ **1.1 Package manager and runner:**
67
+
68
+ ```bash
69
+ cd <codebase_path>
70
+
71
+ if [ -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:**
96
+
97
+ ```
98
+ IF scope = "changed" (default when dispatched by orchestrator):
99
+ 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)
103
+
104
+ IF scope = "full":
105
+ Run all checks on full project
106
+ ```
107
+
108
+ **Output of Phase 1:**
109
+ ```
110
+ TOOLING:
111
+ pm: bun | pnpm | yarn | npm | python | go | unknown
112
+ runner: "bun run" | ...
113
+ checks_available: [lint, type-check, tests, circular-imports]
114
+ checks_skipped: [<reason>]
115
+ scope: changed | full
116
+ changed_files: [<paths>]
117
+ ```
118
+
119
+ ---
120
+
121
+ ### Phase 2: RUN
122
+
123
+ Execute each available check in order. Capture full output.
124
+
125
+ **Execution order:** lint → type-check → tests → import-check
126
+
127
+ **Do NOT abort early** — run all checks even if one fails. The orchestrator needs the complete picture.
128
+
129
+ **2.1 Lint:**
130
+ ```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
135
+ ```
136
+
137
+ Capture:
138
+ - Exit code (0 = pass, non-zero = fail)
139
+ - Number of errors and warnings
140
+ - Per-file error list (file path, line, column, rule, message)
141
+
142
+ **2.2 Type-check:**
143
+ ```bash
144
+ npx tsc --noEmit 2>&1
145
+ # OR:
146
+ $RUNNER type-check
147
+ ```
148
+
149
+ 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
164
+ - Tests passed / failed / skipped counts
165
+ - Per-failure: test name, file, error message, stack (first 5 lines)
166
+
167
+ **2.4 Circular import check (if madge available):**
168
+ ```bash
169
+ npx madge --circular --extensions ts,tsx src/ 2>&1
170
+ ```
171
+
172
+ Capture:
173
+ - Exit code
174
+ - List of circular chains (if any)
175
+
176
+ ---
177
+
178
+ ### Phase 3: ANALYZE
179
+
180
+ Parse raw outputs into structured findings. Classify by severity.
181
+
182
+ **3.1 Severity classification:**
183
+
184
+ | Finding | Severity |
185
+ |---|---|
186
+ | Type error | CRITICAL |
187
+ | Test failure | CRITICAL |
188
+ | ESLint error (not warning) | HIGH |
189
+ | Circular import | HIGH |
190
+ | ESLint warning | LOW |
191
+ | Skipped test | INFO |
192
+
193
+ **3.2 Gate decision:**
194
+
195
+ ```
196
+ GATE = PASS
197
+ IF any CRITICAL findings → GATE = FAIL (blocks proceed)
198
+ IF any HIGH findings → GATE = FAIL (blocks proceed)
199
+ IF only LOW/INFO findings → GATE = PASS_WITH_WARNINGS
200
+ ```
201
+
202
+ **3.3 Actionable finding format:**
203
+
204
+ Each finding must include enough context for `task-implementer` (fix mode) to resolve it without re-reading the full output:
205
+
206
+ ```
207
+ {
208
+ severity: CRITICAL | HIGH | LOW | INFO,
209
+ check: lint | type-check | test | circular-import,
210
+ file: <path>,
211
+ line: <N> | null,
212
+ column: <N> | null,
213
+ rule: <ESLint rule or TS error code> | null,
214
+ message: <error text>,
215
+ suggestion: <optional fix hint>
216
+ }
217
+ ```
218
+
219
+ ---
220
+
221
+ ### Phase 4: REPORT
222
+
223
+ Emit the structured `VERIFICATION_RESULT` as the final message.
35
224
 
36
- ## Output
37
225
  ```
38
226
  VERIFICATION_RESULT:
39
227
  gate: PASS | PASS_WITH_WARNINGS | FAIL
40
- checks: { lint, type_check, tests, circular_imports }
41
- findings: [{ severity, check, file, line, rule, message }]
42
- summary: "..."
228
+ scope: changed | full
229
+
230
+ checks:
231
+ lint:
232
+ status: pass | fail | skipped
233
+ errors: <N>
234
+ warnings: <N>
235
+ command_used: "<command>"
236
+
237
+ type_check:
238
+ status: pass | fail | skipped
239
+ errors: <N>
240
+ command_used: "<command>"
241
+
242
+ tests:
243
+ status: pass | fail | skipped
244
+ passed: <N>
245
+ failed: <N>
246
+ skipped: <N>
247
+ command_used: "<command>"
248
+
249
+ circular_imports:
250
+ status: pass | fail | skipped
251
+ cycles: <N>
252
+
253
+ findings:
254
+ - severity: CRITICAL
255
+ check: type-check
256
+ file: src/services/UserService.ts
257
+ line: 42
258
+ rule: TS2345
259
+ message: "Argument of type 'string' is not assignable to parameter of type 'number'"
260
+ - severity: HIGH
261
+ check: lint
262
+ file: src/components/Form.tsx
263
+ line: 18
264
+ rule: "no-unused-vars"
265
+ message: "'value' is defined but never used"
266
+
267
+ summary: "<1-2 sentence human-readable summary>"
268
+ ```
269
+
270
+ **STATUS reporting:**
271
+
272
+ ```
273
+ STATUS: DONE — gate PASS or PASS_WITH_WARNINGS, report follows
274
+ STATUS: DONE_WITH_CONCERNS — PASS_WITH_WARNINGS with notable warnings
275
+ STATUS: BLOCKED — could not run checks (missing tooling, wrong directory)
276
+ ```
277
+
278
+ > If `gate: FAIL` → STATUS is still `DONE` (the gate result, not the skill's execution). The orchestrator reads `gate: FAIL` and decides to trigger fix.
279
+
280
+ ---
43
281
 
44
- STATUS: DONE
282
+ ## Integration with job-orchestrator
283
+
284
+ The orchestrator dispatches `code-verifier` at two points:
285
+
286
+ **After task-implementer wave (pre-review gate):**
45
287
  ```
288
+ code-verifier:
289
+ codebase_path: <worktree_path>
290
+ scope: changed
291
+ base_branch: <base_branch from JOB_STATE>
292
+ → If gate: FAIL → dispatch fix tasks → re-run code-verifier
293
+ → If gate: PASS → proceed to review
294
+ ```
295
+
296
+ **After fix iterations (post-fix gate):**
297
+ ```
298
+ code-verifier:
299
+ codebase_path: <worktree_path>
300
+ scope: changed
301
+ → If gate still FAIL after 2 iterations → report as BLOCKED, skip to report
302
+ → If gate: PASS → proceed to report
303
+ ```
304
+
305
+ **The orchestrator's internal "checks" step (2.8) is replaced by `code-verifier` dispatch.**
306
+
307
+ ---
308
+
309
+ ## Standalone Usage
310
+
311
+ ```bash
312
+ # Run on current directory, changed files only
313
+ /code-verifier
314
+
315
+ # Run on specific project
316
+ /code-verifier --path /path/to/project
317
+
318
+ # Full project scan (not just changed files)
319
+ /code-verifier --scope full
320
+ ```
321
+
322
+ ---
323
+
324
+ ## Automation Settings
325
+
326
+ | Setting | Default | Options | Description |
327
+ |---------|---------|---------|-------------|
328
+ | `scope` | `changed` | `changed` / `full` | Limit checks to changed files or run full project |
329
+ | `fail_on_warnings` | `false` | true/false | Treat ESLint warnings as gate failures |
330
+ | `include_circular` | `true` | true/false | Run circular import detection if madge available |
331
+ | `max_findings_reported` | `20` | 1-100 | Cap findings in report to avoid overflow |
332
+
333
+ ---
334
+
335
+ ## Error Handling
336
+
337
+ | Error | Action |
338
+ |---|---|
339
+ | Check command not found | Mark check as `skipped`, continue others |
340
+ | Wrong working directory | ABORT with `STATUS: BLOCKED` and directory hint |
341
+ | Command times out (>120s) | Mark check as `skipped (timeout)`, continue |
342
+ | Zero checks available | `STATUS: BLOCKED` — cannot verify without any tooling |
343
+ | Circular import tool missing | Skip silently (not installed in all projects) |
344
+
345
+ ---
346
+
347
+ ## Rules of Engagement
46
348
 
47
- Full spec: `.metaproject/skills/gdskills/orchestration/code-verifier/SKILL.md`
349
+ 1. **Run ALL checks** — never abort after first failure. The orchestrator needs the full picture.
350
+ 2. **Do NOT modify files** — this is read-only verification.
351
+ 3. **Scope to changed files** by default — full scans are slow and produce noise.
352
+ 4. **Be specific** in findings — include file, line, rule, message. Vague "lint failed" is not actionable.
353
+ 5. Return `VERIFICATION_RESULT` as the **final message** to the orchestrator.