@mrciphersmith/keryx 0.2.96 → 0.2.98
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 +1615 -710
- package/dist/core.js +1 -1
- package/package.json +1 -1
- package/src/gdskills/bundled/rules/core/api-contracts.mdc +1 -0
- package/src/gdskills/bundled/rules/core/code-style-patterns.mdc +1 -0
- package/src/gdskills/bundled/rules/core/database-patterns.mdc +1 -0
- package/src/gdskills/bundled/rules/core/documentation-management.mdc +33 -38
- package/src/gdskills/bundled/rules/core/error-handling.mdc +1 -11
- package/src/gdskills/bundled/rules/core/execution-metrics.md +1 -2
- package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +1 -0
- package/src/gdskills/bundled/rules/core/git-concurrency.mdc +101 -0
- package/src/gdskills/bundled/rules/core/implementation-plans.mdc +23 -11
- package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +1 -0
- package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +1 -0
- package/src/gdskills/bundled/rules/core/playwright-testing.mdc +1 -0
- package/src/gdskills/bundled/rules/core/requirements-management.mdc +15 -11
- package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +29 -14
- package/src/gdskills/bundled/rules/core/shared-definitions.mdc +1 -1
- package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +9 -5
- package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +59 -16
- package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +1 -0
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +48 -71
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +48 -71
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +48 -71
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +48 -71
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +48 -71
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +4 -4
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +4 -4
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +4 -4
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +4 -4
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +4 -4
- package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +12 -22
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +12 -22
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +12 -22
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +12 -22
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +12 -22
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +12 -22
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +4 -4
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +46 -4
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +3 -3
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +3 -3
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +3 -3
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +3 -3
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +3 -3
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +65 -23
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +65 -23
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +65 -23
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +65 -23
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +65 -23
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +19 -10
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +19 -10
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +19 -10
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +19 -10
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +19 -10
- 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/brainstorm/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/planning/interview/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +1 -1
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +1 -1
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +7 -7
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +7 -7
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +7 -7
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +7 -7
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +7 -7
- 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/claude-md-management/SKILL.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/platform/hookify/SKILL.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/changelog/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +2 -2
- package/src/gdskills/bundled/skills/quality/commit/SKILL.md +2 -2
- 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/db-migrate/SKILL.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/dependency-update/SKILL.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/deploy/SKILL.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/perf-check/SKILL.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/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +2 -2
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +2 -2
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +2 -2
- 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/push/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +7 -2
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +7 -2
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +7 -2
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +15 -9
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +15 -9
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +15 -9
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +15 -9
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +15 -9
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +2 -2
- 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 +2 -2
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +2 -2
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +2 -2
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +2 -2
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +2 -2
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +2 -2
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +2 -2
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +2 -2
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +2 -2
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +2 -2
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +2 -2
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +2 -2
- package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +3 -3
- package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +2 -2
- 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 +2 -2
- package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/review-layout/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 +40 -35
- package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +1 -2
- package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +1 -5
- package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +53 -9
- package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +6 -6
- package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/review-style/SKILL.md +3 -3
- 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/rules/core/review-agent-profile.mdc +0 -49
- package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +0 -48
|
@@ -18,7 +18,11 @@ Before creating or editing a skill, ask and confirm:
|
|
|
18
18
|
3. Agent profile scope (`Cursor`, `Codex`, `Zed`, `OpenCode`, or all)
|
|
19
19
|
|
|
20
20
|
## Source of Truth
|
|
21
|
-
|
|
21
|
+
- Shipped skill: `src/gdskills/bundled/skills/<category>/<skill-name>/` in the
|
|
22
|
+
keryx repository. `.metaproject/skills/gdskills/<category>/<skill-name>/`
|
|
23
|
+
is an installed mirror, regenerated by `keryx init`/`keryx update` — never
|
|
24
|
+
edit it directly, edits there are overwritten on the next run.
|
|
25
|
+
- Project-local skill: `.metaproject/project-skills/<skill-name>/`.
|
|
22
26
|
|
|
23
27
|
## Required Source Layout
|
|
24
28
|
- `SKILL.md` — canonical source of truth
|
|
@@ -66,26 +70,41 @@ back toward the spec:
|
|
|
66
70
|
to address.
|
|
67
71
|
|
|
68
72
|
## Global Sync Mapping
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
Global sync only ever reaches a **project-local skill**
|
|
74
|
+
(`.metaproject/project-skills/<skill-name>/`) that has first been exported for
|
|
75
|
+
that runtime with `keryx skills export <skill-name> --runtime <runtime>`
|
|
76
|
+
(this writes `.metaproject/runtime/skills/<runtime>/<module>-<skill-name>/`).
|
|
77
|
+
A **shipped** skill (`src/gdskills/bundled/skills/<category>/<skill-name>/`)
|
|
78
|
+
cannot be exported — `keryx skills export` resolves project skills only and
|
|
79
|
+
reports `Project skill not found for: <name>` for a shipped one — so it has no
|
|
80
|
+
global-sync route today. A shipped skill reaches a runtime only through the
|
|
81
|
+
project-local installed mirror (`.metaproject/skills/gdskills/<category>/<skill-name>/`,
|
|
82
|
+
written by `keryx init`/`keryx update`), which stays inside the project.
|
|
83
|
+
|
|
84
|
+
Once a project skill is exported for a runtime, `keryx skills sync --runtime
|
|
85
|
+
<runtime> --global` copies it from `.metaproject/runtime/skills/<runtime>/` to:
|
|
86
|
+
- `cursor` → `~/.cursor/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.cursor.md`, or `SKILL.md` as fallback)
|
|
87
|
+
- `codex` → `${CODEX_HOME:-~/.codex}/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.codex.md`, or `SKILL.md` as fallback)
|
|
88
|
+
- `zed` → `~/.config/zed/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.zed.md`, or `SKILL.md` as fallback)
|
|
89
|
+
- `opencode` → `~/.config/opencode/skills/<module>-<skill-name>/SKILL.md` (built from `SKILL.opencode.md`, or `SKILL.md` as fallback)
|
|
90
|
+
|
|
91
|
+
These four global destinations are written only by the explicit, opt-in
|
|
92
|
+
`keryx skills sync --runtime <runtime> --global` command — never as a side
|
|
93
|
+
effect of `keryx update`/`keryx init`. `claude` and `plugin` have no global
|
|
94
|
+
destination; use `keryx skills sync --runtime <runtime> --target <dir>` for
|
|
95
|
+
those instead.
|
|
74
96
|
|
|
75
97
|
## Mandatory Behavior
|
|
76
98
|
1. Always create/update `SKILL.md` as the canonical source.
|
|
77
99
|
2. Create platform variants only when platform-specific adaptations are needed; otherwise `SKILL.md` serves all platforms via fallback.
|
|
78
100
|
3. Keep all profiles aligned in structure and intent.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
101
|
+
4. Validate skills before sync.
|
|
102
|
+
5. For a **project-local** skill only: export it per runtime first (`keryx skills export <skill-name> --runtime <runtime>`), then sync every global destination that applies (`cursor`, `codex`, `zed`, `opencode` — four in total) with `keryx skills sync --runtime <runtime> --global`, run once per runtime that needs it. A shipped skill cannot be exported and has no global-sync route — it reaches a runtime only via the project-local installed mirror (`keryx update`/`keryx init`).
|
|
103
|
+
6. Ensure `agents/openai.yaml` exists where required by the target agent UI.
|
|
104
|
+
7. For create/update/sync workflows, produce a machine-readable final result for orchestrators.
|
|
83
105
|
|
|
84
106
|
## Machine-Readable Contract
|
|
85
|
-
|
|
86
|
-
- `.metaproject/rules/schemas/skill-workflow-result.schema.json`
|
|
87
|
-
|
|
88
|
-
Contract requirements:
|
|
107
|
+
No canonical schema file exists for this result yet. Contract requirements:
|
|
89
108
|
- One top-level JSON object only.
|
|
90
109
|
- Stable required keys.
|
|
91
110
|
- Closed objects (`additionalProperties: false`).
|
|
@@ -105,12 +124,27 @@ Run before syncing skills:
|
|
|
105
124
|
keryx skills verify --all
|
|
106
125
|
```
|
|
107
126
|
|
|
108
|
-
Then
|
|
127
|
+
Then regenerate the project-local installed mirror
|
|
128
|
+
(`.metaproject/skills/gdskills/<category>/<skill-name>/`) from the bundled
|
|
129
|
+
source:
|
|
109
130
|
|
|
110
131
|
```bash
|
|
111
132
|
keryx update
|
|
112
133
|
```
|
|
113
134
|
|
|
135
|
+
`keryx update` never writes outside the project, and it is the only route a
|
|
136
|
+
**shipped** skill has to reach a runtime — a shipped skill cannot be exported
|
|
137
|
+
and has no global-sync destination.
|
|
138
|
+
|
|
139
|
+
To push a **project-local** skill (`.metaproject/project-skills/<skill-name>/`)
|
|
140
|
+
to a harness's own global directory (opt-in, outside the project), export it
|
|
141
|
+
for that runtime first, then sync:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
keryx skills export <skill-name> --runtime <runtime>
|
|
145
|
+
keryx skills sync --runtime <runtime> --global
|
|
146
|
+
```
|
|
147
|
+
|
|
114
148
|
If validation fails, do not sync.
|
|
115
149
|
|
|
116
150
|
## Naming
|
|
@@ -121,4 +155,13 @@ If validation fails, do not sync.
|
|
|
121
155
|
- Do not create skills in `~/.cursor/skills-cursor/`.
|
|
122
156
|
|
|
123
157
|
## Apply Changes Workflow
|
|
124
|
-
|
|
158
|
+
Edit skills under `src/gdskills/bundled/skills/<category>/<skill-name>/`
|
|
159
|
+
(shipped) or `.metaproject/project-skills/<skill-name>/` (project-local).
|
|
160
|
+
`keryx init`/`keryx update` regenerate the installed mirror at
|
|
161
|
+
`.metaproject/skills/gdskills/<category>/<skill-name>/` — this stays inside
|
|
162
|
+
the project, and is the only way a shipped skill reaches a runtime. For a
|
|
163
|
+
project-local skill only, run `keryx skills export <skill-name> --runtime
|
|
164
|
+
<runtime>` then `keryx skills sync --runtime <runtime> --global` separately to
|
|
165
|
+
push it to a harness's own global directory outside the project; shipped
|
|
166
|
+
skills cannot be exported (`keryx skills export` resolves project skills
|
|
167
|
+
only) and have no global-sync route.
|
|
@@ -12,9 +12,9 @@ triggers:
|
|
|
12
12
|
metadata:
|
|
13
13
|
author: "MrCipherSmith"
|
|
14
14
|
version: "1.0.0"
|
|
15
|
-
category: "
|
|
15
|
+
category: "orchestration"
|
|
16
16
|
agent_worthy: true
|
|
17
|
-
compatible_harnesses: "cursor,codex,zed,opencode"
|
|
17
|
+
compatible_harnesses: "cursor,codex,zed,opencode,claude"
|
|
18
18
|
license: "MIT"
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -61,56 +61,43 @@ Code Verifier Progress:
|
|
|
61
61
|
|
|
62
62
|
### Phase 1: DETECT
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
Determine scope. Stack and tool discovery is delegated to `keryx health run`
|
|
65
|
+
and `keryx test run` — do NOT hand-roll package-manager or
|
|
66
|
+
lint/type-check/test tool detection here.
|
|
65
67
|
|
|
66
|
-
**1.1
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
cd <codebase_path>
|
|
70
|
-
|
|
71
|
-
if [ -f bun.lock ] || [ -f bun.lockb ]; then PM=bun; RUNNER="bun run"
|
|
72
|
-
elif [ -f pnpm-lock.yaml ]; then PM=pnpm; RUNNER="pnpm run"
|
|
73
|
-
elif [ -f yarn.lock ]; then PM=yarn; RUNNER="yarn"
|
|
74
|
-
elif [ -f package-lock.json ]; then PM=npm; RUNNER="npm run"
|
|
75
|
-
elif [ -f pyproject.toml ] || [ -f requirements.txt ]; then PM=python; RUNNER=""
|
|
76
|
-
elif [ -f go.mod ]; then PM=go; RUNNER=""
|
|
77
|
-
else PM=unknown; RUNNER=""
|
|
78
|
-
fi
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**1.2 Detect available check commands:**
|
|
82
|
-
|
|
83
|
-
| Check | How to detect | Command |
|
|
84
|
-
|---|---|---|
|
|
85
|
-
| Lint | `package.json` has `"lint"` script | `$RUNNER lint` |
|
|
86
|
-
| Lint (auto) | `eslint.config.*` or `.eslintrc*` present | `npx eslint . --max-warnings 0` |
|
|
87
|
-
| Biome | `biome.json` present | `npx biome check .` |
|
|
88
|
-
| Type-check | `package.json` has `"type-check"` or `"typecheck"` script | `$RUNNER type-check` |
|
|
89
|
-
| Type-check (auto) | `tsconfig.json` present | `npx tsc --noEmit` |
|
|
90
|
-
| Tests | `package.json` has `"test"` script | `$RUNNER test --run` (vitest) or `$RUNNER test` |
|
|
91
|
-
| pytest | `pytest` in `pyproject.toml` or `requirements.txt` | `pytest --tb=short -q` |
|
|
92
|
-
| Go tests | `go.mod` present | `go test ./...` |
|
|
93
|
-
| Circular imports | `madge` in devDependencies | `npx madge --circular src/` |
|
|
94
|
-
|
|
95
|
-
**1.3 Determine scope:**
|
|
68
|
+
**1.1 Determine scope:**
|
|
96
69
|
|
|
97
70
|
```
|
|
98
71
|
IF scope = "changed" (default when dispatched by orchestrator):
|
|
99
72
|
FILES = git diff --name-only <base_branch>...HEAD
|
|
100
|
-
|
|
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)
|
|
73
|
+
Pass --changed to keryx health run and keryx test run below.
|
|
103
74
|
|
|
104
75
|
IF scope = "full":
|
|
105
|
-
Run all checks on full project
|
|
76
|
+
Run all checks on the full project (omit --changed).
|
|
106
77
|
```
|
|
107
78
|
|
|
79
|
+
**1.2 Checks used:**
|
|
80
|
+
|
|
81
|
+
| Check | Command |
|
|
82
|
+
|---|---|
|
|
83
|
+
| Lint + type-check | `keryx health run --changed --source eslint,typescript` (drop `--changed` for full scope) |
|
|
84
|
+
| Tests | `keryx test run --changed --strict` (drop `--changed` for full scope) |
|
|
85
|
+
| Circular imports | the project's own package-manager runner + `madge --circular --extensions ts,tsx src/`, if `madge` is a devDependency — optional; not covered by `keryx health run` / `keryx test run` |
|
|
86
|
+
|
|
87
|
+
`src/health/sources/eslint.ts` and `src/health/sources/typescript.ts` resolve
|
|
88
|
+
the real lint/type-check invocation for the project; `src/testing/service.ts`
|
|
89
|
+
detects `bun` / `pnpm` / `yarn` / `npm` from the lockfile and builds the test
|
|
90
|
+
invocation from the project's own test script. Do NOT hard-code a package
|
|
91
|
+
manager, linter, type-checker, or test binary here — that is the if-chain
|
|
92
|
+
these commands already resolve. On a project with no keryx health/testing
|
|
93
|
+
config, fall back to the project's own configured lint/type-check/test
|
|
94
|
+
command (discovered from its `package.json` scripts or equivalent, not a
|
|
95
|
+
hardcoded tool).
|
|
96
|
+
|
|
108
97
|
**Output of Phase 1:**
|
|
109
98
|
```
|
|
110
99
|
TOOLING:
|
|
111
|
-
|
|
112
|
-
runner: "bun run" | ...
|
|
113
|
-
checks_available: [lint, type-check, tests, circular-imports]
|
|
100
|
+
checks_available: [lint+type-check, tests, circular-imports]
|
|
114
101
|
checks_skipped: [<reason>]
|
|
115
102
|
scope: changed | full
|
|
116
103
|
changed_files: [<paths>]
|
|
@@ -120,54 +107,44 @@ TOOLING:
|
|
|
120
107
|
|
|
121
108
|
### Phase 2: RUN
|
|
122
109
|
|
|
123
|
-
Execute each available check
|
|
110
|
+
Execute each available check. Capture full output.
|
|
124
111
|
|
|
125
|
-
**Execution order:** lint
|
|
112
|
+
**Execution order:** lint+type-check → tests → import-check
|
|
126
113
|
|
|
127
114
|
**Do NOT abort early** — run all checks even if one fails. The orchestrator needs the complete picture.
|
|
128
115
|
|
|
129
|
-
**2.1 Lint:**
|
|
116
|
+
**2.1 Lint + type-check:**
|
|
130
117
|
```bash
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
$RUNNER lint
|
|
118
|
+
keryx health run --changed --source eslint,typescript
|
|
119
|
+
# OR, full scope:
|
|
120
|
+
keryx health run --source eslint,typescript
|
|
135
121
|
```
|
|
136
122
|
|
|
137
|
-
|
|
138
|
-
|
|
123
|
+
Read the result with `keryx health status` (or the report path the command
|
|
124
|
+
prints). Capture:
|
|
125
|
+
- Gate status (pass/fail) per source
|
|
139
126
|
- Number of errors and warnings
|
|
140
|
-
- Per-
|
|
141
|
-
|
|
142
|
-
**2.2 Type-check:**
|
|
143
|
-
```bash
|
|
144
|
-
npx tsc --noEmit 2>&1
|
|
145
|
-
# OR:
|
|
146
|
-
$RUNNER type-check
|
|
147
|
-
```
|
|
127
|
+
- Per-finding: file, line, column, rule/TS code, message
|
|
148
128
|
|
|
149
|
-
|
|
150
|
-
- Exit code
|
|
151
|
-
- Number of errors
|
|
152
|
-
- Per-error: file, line, column, message, TS error code
|
|
153
|
-
|
|
154
|
-
**2.3 Tests:**
|
|
129
|
+
**2.2 Tests:**
|
|
155
130
|
```bash
|
|
156
|
-
|
|
157
|
-
# OR
|
|
158
|
-
|
|
159
|
-
# OR: go test ./... 2>&1
|
|
131
|
+
keryx test run --changed --strict
|
|
132
|
+
# OR, full scope:
|
|
133
|
+
keryx test run --strict
|
|
160
134
|
```
|
|
161
135
|
|
|
162
136
|
Capture:
|
|
163
|
-
-
|
|
137
|
+
- Report status / exit code
|
|
164
138
|
- Tests passed / failed / skipped counts
|
|
165
139
|
- Per-failure: test name, file, error message, stack (first 5 lines)
|
|
166
140
|
|
|
167
|
-
**2.
|
|
141
|
+
**2.3 Circular import check (if madge available):**
|
|
168
142
|
```bash
|
|
169
|
-
|
|
143
|
+
<pm> exec madge --circular --extensions ts,tsx src/ 2>&1
|
|
170
144
|
```
|
|
145
|
+
`<pm>` is the project's own package-manager runner for devDependency
|
|
146
|
+
binaries (`pnpm exec`, `yarn`, or the npm-based equivalent), resolved the
|
|
147
|
+
same way `keryx test run` resolves it from the lockfile — not hardcoded.
|
|
171
148
|
|
|
172
149
|
Capture:
|
|
173
150
|
- Exit code
|
|
@@ -298,7 +275,7 @@ code-verifier:
|
|
|
298
275
|
code-verifier:
|
|
299
276
|
codebase_path: <worktree_path>
|
|
300
277
|
scope: changed
|
|
301
|
-
→ If gate still FAIL after
|
|
278
|
+
→ If gate still FAIL after 3 iterations → report as BLOCKED, skip to report
|
|
302
279
|
→ If gate: PASS → proceed to report
|
|
303
280
|
```
|
|
304
281
|
|
|
@@ -12,9 +12,9 @@ triggers:
|
|
|
12
12
|
metadata:
|
|
13
13
|
author: "MrCipherSmith"
|
|
14
14
|
version: "1.0.0"
|
|
15
|
-
category: "
|
|
15
|
+
category: "orchestration"
|
|
16
16
|
agent_worthy: true
|
|
17
|
-
compatible_harnesses: "cursor,codex,zed,opencode"
|
|
17
|
+
compatible_harnesses: "cursor,codex,zed,opencode,claude"
|
|
18
18
|
license: "MIT"
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -61,56 +61,43 @@ Code Verifier Progress:
|
|
|
61
61
|
|
|
62
62
|
### Phase 1: DETECT
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
Determine scope. Stack and tool discovery is delegated to `keryx health run`
|
|
65
|
+
and `keryx test run` — do NOT hand-roll package-manager or
|
|
66
|
+
lint/type-check/test tool detection here.
|
|
65
67
|
|
|
66
|
-
**1.1
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
cd <codebase_path>
|
|
70
|
-
|
|
71
|
-
if [ -f bun.lock ] || [ -f bun.lockb ]; then PM=bun; RUNNER="bun run"
|
|
72
|
-
elif [ -f pnpm-lock.yaml ]; then PM=pnpm; RUNNER="pnpm run"
|
|
73
|
-
elif [ -f yarn.lock ]; then PM=yarn; RUNNER="yarn"
|
|
74
|
-
elif [ -f package-lock.json ]; then PM=npm; RUNNER="npm run"
|
|
75
|
-
elif [ -f pyproject.toml ] || [ -f requirements.txt ]; then PM=python; RUNNER=""
|
|
76
|
-
elif [ -f go.mod ]; then PM=go; RUNNER=""
|
|
77
|
-
else PM=unknown; RUNNER=""
|
|
78
|
-
fi
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**1.2 Detect available check commands:**
|
|
82
|
-
|
|
83
|
-
| Check | How to detect | Command |
|
|
84
|
-
|---|---|---|
|
|
85
|
-
| Lint | `package.json` has `"lint"` script | `$RUNNER lint` |
|
|
86
|
-
| Lint (auto) | `eslint.config.*` or `.eslintrc*` present | `npx eslint . --max-warnings 0` |
|
|
87
|
-
| Biome | `biome.json` present | `npx biome check .` |
|
|
88
|
-
| Type-check | `package.json` has `"type-check"` or `"typecheck"` script | `$RUNNER type-check` |
|
|
89
|
-
| Type-check (auto) | `tsconfig.json` present | `npx tsc --noEmit` |
|
|
90
|
-
| Tests | `package.json` has `"test"` script | `$RUNNER test --run` (vitest) or `$RUNNER test` |
|
|
91
|
-
| pytest | `pytest` in `pyproject.toml` or `requirements.txt` | `pytest --tb=short -q` |
|
|
92
|
-
| Go tests | `go.mod` present | `go test ./...` |
|
|
93
|
-
| Circular imports | `madge` in devDependencies | `npx madge --circular src/` |
|
|
94
|
-
|
|
95
|
-
**1.3 Determine scope:**
|
|
68
|
+
**1.1 Determine scope:**
|
|
96
69
|
|
|
97
70
|
```
|
|
98
71
|
IF scope = "changed" (default when dispatched by orchestrator):
|
|
99
72
|
FILES = git diff --name-only <base_branch>...HEAD
|
|
100
|
-
|
|
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)
|
|
73
|
+
Pass --changed to keryx health run and keryx test run below.
|
|
103
74
|
|
|
104
75
|
IF scope = "full":
|
|
105
|
-
Run all checks on full project
|
|
76
|
+
Run all checks on the full project (omit --changed).
|
|
106
77
|
```
|
|
107
78
|
|
|
79
|
+
**1.2 Checks used:**
|
|
80
|
+
|
|
81
|
+
| Check | Command |
|
|
82
|
+
|---|---|
|
|
83
|
+
| Lint + type-check | `keryx health run --changed --source eslint,typescript` (drop `--changed` for full scope) |
|
|
84
|
+
| Tests | `keryx test run --changed --strict` (drop `--changed` for full scope) |
|
|
85
|
+
| Circular imports | the project's own package-manager runner + `madge --circular --extensions ts,tsx src/`, if `madge` is a devDependency — optional; not covered by `keryx health run` / `keryx test run` |
|
|
86
|
+
|
|
87
|
+
`src/health/sources/eslint.ts` and `src/health/sources/typescript.ts` resolve
|
|
88
|
+
the real lint/type-check invocation for the project; `src/testing/service.ts`
|
|
89
|
+
detects `bun` / `pnpm` / `yarn` / `npm` from the lockfile and builds the test
|
|
90
|
+
invocation from the project's own test script. Do NOT hard-code a package
|
|
91
|
+
manager, linter, type-checker, or test binary here — that is the if-chain
|
|
92
|
+
these commands already resolve. On a project with no keryx health/testing
|
|
93
|
+
config, fall back to the project's own configured lint/type-check/test
|
|
94
|
+
command (discovered from its `package.json` scripts or equivalent, not a
|
|
95
|
+
hardcoded tool).
|
|
96
|
+
|
|
108
97
|
**Output of Phase 1:**
|
|
109
98
|
```
|
|
110
99
|
TOOLING:
|
|
111
|
-
|
|
112
|
-
runner: "bun run" | ...
|
|
113
|
-
checks_available: [lint, type-check, tests, circular-imports]
|
|
100
|
+
checks_available: [lint+type-check, tests, circular-imports]
|
|
114
101
|
checks_skipped: [<reason>]
|
|
115
102
|
scope: changed | full
|
|
116
103
|
changed_files: [<paths>]
|
|
@@ -120,54 +107,44 @@ TOOLING:
|
|
|
120
107
|
|
|
121
108
|
### Phase 2: RUN
|
|
122
109
|
|
|
123
|
-
Execute each available check
|
|
110
|
+
Execute each available check. Capture full output.
|
|
124
111
|
|
|
125
|
-
**Execution order:** lint
|
|
112
|
+
**Execution order:** lint+type-check → tests → import-check
|
|
126
113
|
|
|
127
114
|
**Do NOT abort early** — run all checks even if one fails. The orchestrator needs the complete picture.
|
|
128
115
|
|
|
129
|
-
**2.1 Lint:**
|
|
116
|
+
**2.1 Lint + type-check:**
|
|
130
117
|
```bash
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
$RUNNER lint
|
|
118
|
+
keryx health run --changed --source eslint,typescript
|
|
119
|
+
# OR, full scope:
|
|
120
|
+
keryx health run --source eslint,typescript
|
|
135
121
|
```
|
|
136
122
|
|
|
137
|
-
|
|
138
|
-
|
|
123
|
+
Read the result with `keryx health status` (or the report path the command
|
|
124
|
+
prints). Capture:
|
|
125
|
+
- Gate status (pass/fail) per source
|
|
139
126
|
- Number of errors and warnings
|
|
140
|
-
- Per-
|
|
141
|
-
|
|
142
|
-
**2.2 Type-check:**
|
|
143
|
-
```bash
|
|
144
|
-
npx tsc --noEmit 2>&1
|
|
145
|
-
# OR:
|
|
146
|
-
$RUNNER type-check
|
|
147
|
-
```
|
|
127
|
+
- Per-finding: file, line, column, rule/TS code, message
|
|
148
128
|
|
|
149
|
-
|
|
150
|
-
- Exit code
|
|
151
|
-
- Number of errors
|
|
152
|
-
- Per-error: file, line, column, message, TS error code
|
|
153
|
-
|
|
154
|
-
**2.3 Tests:**
|
|
129
|
+
**2.2 Tests:**
|
|
155
130
|
```bash
|
|
156
|
-
|
|
157
|
-
# OR
|
|
158
|
-
|
|
159
|
-
# OR: go test ./... 2>&1
|
|
131
|
+
keryx test run --changed --strict
|
|
132
|
+
# OR, full scope:
|
|
133
|
+
keryx test run --strict
|
|
160
134
|
```
|
|
161
135
|
|
|
162
136
|
Capture:
|
|
163
|
-
-
|
|
137
|
+
- Report status / exit code
|
|
164
138
|
- Tests passed / failed / skipped counts
|
|
165
139
|
- Per-failure: test name, file, error message, stack (first 5 lines)
|
|
166
140
|
|
|
167
|
-
**2.
|
|
141
|
+
**2.3 Circular import check (if madge available):**
|
|
168
142
|
```bash
|
|
169
|
-
|
|
143
|
+
<pm> exec madge --circular --extensions ts,tsx src/ 2>&1
|
|
170
144
|
```
|
|
145
|
+
`<pm>` is the project's own package-manager runner for devDependency
|
|
146
|
+
binaries (`pnpm exec`, `yarn`, or the npm-based equivalent), resolved the
|
|
147
|
+
same way `keryx test run` resolves it from the lockfile — not hardcoded.
|
|
171
148
|
|
|
172
149
|
Capture:
|
|
173
150
|
- Exit code
|
|
@@ -298,7 +275,7 @@ code-verifier:
|
|
|
298
275
|
code-verifier:
|
|
299
276
|
codebase_path: <worktree_path>
|
|
300
277
|
scope: changed
|
|
301
|
-
→ If gate still FAIL after
|
|
278
|
+
→ If gate still FAIL after 3 iterations → report as BLOCKED, skip to report
|
|
302
279
|
→ If gate: PASS → proceed to report
|
|
303
280
|
```
|
|
304
281
|
|
|
@@ -12,9 +12,9 @@ triggers:
|
|
|
12
12
|
metadata:
|
|
13
13
|
author: "MrCipherSmith"
|
|
14
14
|
version: "1.0.0"
|
|
15
|
-
category: "
|
|
15
|
+
category: "orchestration"
|
|
16
16
|
agent_worthy: true
|
|
17
|
-
compatible_harnesses: "cursor,codex,zed,opencode"
|
|
17
|
+
compatible_harnesses: "cursor,codex,zed,opencode,claude"
|
|
18
18
|
license: "MIT"
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -61,56 +61,43 @@ Code Verifier Progress:
|
|
|
61
61
|
|
|
62
62
|
### Phase 1: DETECT
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
Determine scope. Stack and tool discovery is delegated to `keryx health run`
|
|
65
|
+
and `keryx test run` — do NOT hand-roll package-manager or
|
|
66
|
+
lint/type-check/test tool detection here.
|
|
65
67
|
|
|
66
|
-
**1.1
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
cd <codebase_path>
|
|
70
|
-
|
|
71
|
-
if [ -f bun.lock ] || [ -f bun.lockb ]; then PM=bun; RUNNER="bun run"
|
|
72
|
-
elif [ -f pnpm-lock.yaml ]; then PM=pnpm; RUNNER="pnpm run"
|
|
73
|
-
elif [ -f yarn.lock ]; then PM=yarn; RUNNER="yarn"
|
|
74
|
-
elif [ -f package-lock.json ]; then PM=npm; RUNNER="npm run"
|
|
75
|
-
elif [ -f pyproject.toml ] || [ -f requirements.txt ]; then PM=python; RUNNER=""
|
|
76
|
-
elif [ -f go.mod ]; then PM=go; RUNNER=""
|
|
77
|
-
else PM=unknown; RUNNER=""
|
|
78
|
-
fi
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**1.2 Detect available check commands:**
|
|
82
|
-
|
|
83
|
-
| Check | How to detect | Command |
|
|
84
|
-
|---|---|---|
|
|
85
|
-
| Lint | `package.json` has `"lint"` script | `$RUNNER lint` |
|
|
86
|
-
| Lint (auto) | `eslint.config.*` or `.eslintrc*` present | `npx eslint . --max-warnings 0` |
|
|
87
|
-
| Biome | `biome.json` present | `npx biome check .` |
|
|
88
|
-
| Type-check | `package.json` has `"type-check"` or `"typecheck"` script | `$RUNNER type-check` |
|
|
89
|
-
| Type-check (auto) | `tsconfig.json` present | `npx tsc --noEmit` |
|
|
90
|
-
| Tests | `package.json` has `"test"` script | `$RUNNER test --run` (vitest) or `$RUNNER test` |
|
|
91
|
-
| pytest | `pytest` in `pyproject.toml` or `requirements.txt` | `pytest --tb=short -q` |
|
|
92
|
-
| Go tests | `go.mod` present | `go test ./...` |
|
|
93
|
-
| Circular imports | `madge` in devDependencies | `npx madge --circular src/` |
|
|
94
|
-
|
|
95
|
-
**1.3 Determine scope:**
|
|
68
|
+
**1.1 Determine scope:**
|
|
96
69
|
|
|
97
70
|
```
|
|
98
71
|
IF scope = "changed" (default when dispatched by orchestrator):
|
|
99
72
|
FILES = git diff --name-only <base_branch>...HEAD
|
|
100
|
-
|
|
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)
|
|
73
|
+
Pass --changed to keryx health run and keryx test run below.
|
|
103
74
|
|
|
104
75
|
IF scope = "full":
|
|
105
|
-
Run all checks on full project
|
|
76
|
+
Run all checks on the full project (omit --changed).
|
|
106
77
|
```
|
|
107
78
|
|
|
79
|
+
**1.2 Checks used:**
|
|
80
|
+
|
|
81
|
+
| Check | Command |
|
|
82
|
+
|---|---|
|
|
83
|
+
| Lint + type-check | `keryx health run --changed --source eslint,typescript` (drop `--changed` for full scope) |
|
|
84
|
+
| Tests | `keryx test run --changed --strict` (drop `--changed` for full scope) |
|
|
85
|
+
| Circular imports | the project's own package-manager runner + `madge --circular --extensions ts,tsx src/`, if `madge` is a devDependency — optional; not covered by `keryx health run` / `keryx test run` |
|
|
86
|
+
|
|
87
|
+
`src/health/sources/eslint.ts` and `src/health/sources/typescript.ts` resolve
|
|
88
|
+
the real lint/type-check invocation for the project; `src/testing/service.ts`
|
|
89
|
+
detects `bun` / `pnpm` / `yarn` / `npm` from the lockfile and builds the test
|
|
90
|
+
invocation from the project's own test script. Do NOT hard-code a package
|
|
91
|
+
manager, linter, type-checker, or test binary here — that is the if-chain
|
|
92
|
+
these commands already resolve. On a project with no keryx health/testing
|
|
93
|
+
config, fall back to the project's own configured lint/type-check/test
|
|
94
|
+
command (discovered from its `package.json` scripts or equivalent, not a
|
|
95
|
+
hardcoded tool).
|
|
96
|
+
|
|
108
97
|
**Output of Phase 1:**
|
|
109
98
|
```
|
|
110
99
|
TOOLING:
|
|
111
|
-
|
|
112
|
-
runner: "bun run" | ...
|
|
113
|
-
checks_available: [lint, type-check, tests, circular-imports]
|
|
100
|
+
checks_available: [lint+type-check, tests, circular-imports]
|
|
114
101
|
checks_skipped: [<reason>]
|
|
115
102
|
scope: changed | full
|
|
116
103
|
changed_files: [<paths>]
|
|
@@ -120,54 +107,44 @@ TOOLING:
|
|
|
120
107
|
|
|
121
108
|
### Phase 2: RUN
|
|
122
109
|
|
|
123
|
-
Execute each available check
|
|
110
|
+
Execute each available check. Capture full output.
|
|
124
111
|
|
|
125
|
-
**Execution order:** lint
|
|
112
|
+
**Execution order:** lint+type-check → tests → import-check
|
|
126
113
|
|
|
127
114
|
**Do NOT abort early** — run all checks even if one fails. The orchestrator needs the complete picture.
|
|
128
115
|
|
|
129
|
-
**2.1 Lint:**
|
|
116
|
+
**2.1 Lint + type-check:**
|
|
130
117
|
```bash
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
$RUNNER lint
|
|
118
|
+
keryx health run --changed --source eslint,typescript
|
|
119
|
+
# OR, full scope:
|
|
120
|
+
keryx health run --source eslint,typescript
|
|
135
121
|
```
|
|
136
122
|
|
|
137
|
-
|
|
138
|
-
|
|
123
|
+
Read the result with `keryx health status` (or the report path the command
|
|
124
|
+
prints). Capture:
|
|
125
|
+
- Gate status (pass/fail) per source
|
|
139
126
|
- Number of errors and warnings
|
|
140
|
-
- Per-
|
|
141
|
-
|
|
142
|
-
**2.2 Type-check:**
|
|
143
|
-
```bash
|
|
144
|
-
npx tsc --noEmit 2>&1
|
|
145
|
-
# OR:
|
|
146
|
-
$RUNNER type-check
|
|
147
|
-
```
|
|
127
|
+
- Per-finding: file, line, column, rule/TS code, message
|
|
148
128
|
|
|
149
|
-
|
|
150
|
-
- Exit code
|
|
151
|
-
- Number of errors
|
|
152
|
-
- Per-error: file, line, column, message, TS error code
|
|
153
|
-
|
|
154
|
-
**2.3 Tests:**
|
|
129
|
+
**2.2 Tests:**
|
|
155
130
|
```bash
|
|
156
|
-
|
|
157
|
-
# OR
|
|
158
|
-
|
|
159
|
-
# OR: go test ./... 2>&1
|
|
131
|
+
keryx test run --changed --strict
|
|
132
|
+
# OR, full scope:
|
|
133
|
+
keryx test run --strict
|
|
160
134
|
```
|
|
161
135
|
|
|
162
136
|
Capture:
|
|
163
|
-
-
|
|
137
|
+
- Report status / exit code
|
|
164
138
|
- Tests passed / failed / skipped counts
|
|
165
139
|
- Per-failure: test name, file, error message, stack (first 5 lines)
|
|
166
140
|
|
|
167
|
-
**2.
|
|
141
|
+
**2.3 Circular import check (if madge available):**
|
|
168
142
|
```bash
|
|
169
|
-
|
|
143
|
+
<pm> exec madge --circular --extensions ts,tsx src/ 2>&1
|
|
170
144
|
```
|
|
145
|
+
`<pm>` is the project's own package-manager runner for devDependency
|
|
146
|
+
binaries (`pnpm exec`, `yarn`, or the npm-based equivalent), resolved the
|
|
147
|
+
same way `keryx test run` resolves it from the lockfile — not hardcoded.
|
|
171
148
|
|
|
172
149
|
Capture:
|
|
173
150
|
- Exit code
|
|
@@ -298,7 +275,7 @@ code-verifier:
|
|
|
298
275
|
code-verifier:
|
|
299
276
|
codebase_path: <worktree_path>
|
|
300
277
|
scope: changed
|
|
301
|
-
→ If gate still FAIL after
|
|
278
|
+
→ If gate still FAIL after 3 iterations → report as BLOCKED, skip to report
|
|
302
279
|
→ If gate: PASS → proceed to report
|
|
303
280
|
```
|
|
304
281
|
|