@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.
- package/dist/cli.js +4632 -2229
- package/package.json +2 -2
- package/src/gdskills/bundled/rules/core/code-review-learned-profile.mdc +81 -0
- package/src/gdskills/bundled/rules/core/gproject-contracts.mdc +1 -1
- package/src/gdskills/bundled/rules/core/jobs-documentation.mdc +2 -2
- package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +8 -4
- package/src/gdskills/bundled/rules/core/subagent-context-construction.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +326 -20
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +320 -22
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +326 -12
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +333 -9
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +94 -6
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +94 -6
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +94 -6
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +94 -6
- package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +3 -3
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +154 -1098
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +154 -1098
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +3 -3
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +154 -1098
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +154 -1098
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +102 -42
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +102 -42
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +115 -49
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +115 -49
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +115 -49
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +115 -49
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +16 -7
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +16 -7
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +16 -7
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +16 -7
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +973 -510
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +973 -510
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +944 -514
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +973 -510
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +973 -510
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/input-contract.schema.json +38 -28
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/orchestrator-prompt.md +98 -66
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/output-contract.schema.json +27 -5
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +300 -55
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +300 -55
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +120 -37
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +300 -55
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +300 -55
- package/src/gdskills/bundled/skills/orchestration/task-implementer/input-contract.schema.json +57 -15
- package/src/gdskills/bundled/skills/orchestration/task-implementer/orchestrator-prompt.md +50 -23
- package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +6 -2
- package/src/gdskills/bundled/skills/orchestration/task-implementer/task-request.template.md +18 -12
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +168 -9
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +168 -9
- package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +7 -1
- package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +7 -1
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +7 -1
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +7 -1
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +215 -9
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +215 -9
- package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +168 -9
- package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +168 -9
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +2 -2
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +2 -2
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +2 -2
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +133 -9
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +133 -9
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +145 -9
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +145 -9
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +210 -9
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +210 -9
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +161 -9
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +161 -9
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +15 -1
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +248 -165
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +15 -1
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +359 -19
- package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +299 -24
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +296 -31
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +309 -18
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +312 -17
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +29 -30
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +29 -30
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +29 -30
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +29 -30
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +243 -0
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +243 -0
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +243 -0
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +243 -0
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +243 -0
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +19 -23
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +19 -23
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +19 -23
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +19 -23
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +17 -24
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +17 -24
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +17 -24
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +17 -24
- package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +26 -13
- package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +36 -17
- package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-style/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/shared/git-merge-base.md +1 -1
- package/src/gdskills/bundled/rules/core/code-review-b091-profile.mdc +0 -48
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.claude.md +0 -46
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.claude.md +0 -94
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.claude.md +0 -45
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.claude.md +0 -40
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.claude.md +0 -45
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.claude.md +0 -42
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.claude.md +0 -48
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.claude.md +0 -40
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.claude.md +0 -30
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.codex.md +0 -209
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.cursor.md +0 -209
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.md +0 -208
- package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.opencode.md +0 -209
- 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.
|
|
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:**
|
|
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-
|
|
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: "
|
|
2
|
+
description: "Strict review profile: direct, architecture-first feedback with concrete fixes."
|
|
3
3
|
alwaysApply: false
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Strict Review Profile
|
|
7
7
|
|
|
8
8
|
## Purpose
|
|
9
|
-
|
|
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
|
|
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.
|
|
@@ -1,47 +1,353 @@
|
|
|
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
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
|
-
|
|
23
|
+
## Purpose
|
|
20
24
|
|
|
21
|
-
|
|
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
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|