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