@mrciphersmith/keryx 0.2.98 → 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 +4057 -2510
- package/dist/core.js +39 -1
- package/package.json +1 -1
- package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
- package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
- package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +101 -11
- 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 +19 -3
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +20 -4
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +32 -9
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +18 -4
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +21 -5
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +4 -4
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +42 -2
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +23 -9
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +33 -31
- 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 +28 -3
- 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 +29 -7
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +32 -6
- 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 +20 -3
- 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 +26 -2
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +28 -3
- package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +24 -4
- package/src/gdskills/bundled/skills/quality/commit/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +26 -3
- 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 +29 -8
- package/src/gdskills/bundled/skills/quality/pr/SKILL.md +24 -4
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +25 -2
- package/src/gdskills/bundled/skills/quality/push/SKILL.md +24 -3
- 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 +24 -3
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +17 -2
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +40 -5
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +41 -1
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +44 -2
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +44 -4
- package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +3 -3
- package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +2 -3
- package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +4 -4
- package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +36 -2
- package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +37 -3
- package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +2 -4
- package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +36 -2
- package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +3 -5
- package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +23 -2
- package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +3 -3
- package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +9 -29
- package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +9 -9
- package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +3 -2
- package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
- package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +4 -2
- package/src/gdskills/bundled/skills/review/review-style/SKILL.md +2 -2
- package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +40 -2
- package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -330
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -330
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -330
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -330
- 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 -424
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -424
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -424
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -424
- 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 -2232
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2232
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2232
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2232
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -668
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -668
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -668
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -668
- 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 -80
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -80
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -345
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -345
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -345
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -345
- 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
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: push
|
|
3
|
-
description: "Use when pushing the current branch to the remote, especially when upstream tracking or safety checks are needed."
|
|
3
|
+
description: "Use when pushing the current branch to the remote, especially when upstream tracking or safety checks are needed. NOT for creating the commits themselves (use `commit`) or opening a pull request afterwards (use `pr`)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
5
|
+
- "push branch"
|
|
6
|
+
- "git push"
|
|
7
|
+
- "publish branch"
|
|
6
8
|
- "Push changes"
|
|
7
9
|
- "Push to remote"
|
|
8
|
-
- "Push branch"
|
|
9
10
|
metadata:
|
|
10
11
|
author: "MrCipherSmith"
|
|
11
12
|
version: "1.0.0"
|
|
@@ -50,3 +51,23 @@ Show result: confirm push success with commit count.
|
|
|
50
51
|
- NEVER force push to main/master without double confirmation
|
|
51
52
|
- NEVER use `--no-verify`
|
|
52
53
|
- If push is rejected (non-fast-forward), suggest `git pull --rebase` first
|
|
54
|
+
|
|
55
|
+
## Red Flags
|
|
56
|
+
|
|
57
|
+
| Rationalization | Why it is wrong |
|
|
58
|
+
|---|---|
|
|
59
|
+
| "It was rejected, but `--force-with-lease` is safe enough here" | The lease only compares against the ref you last fetched. A teammate's push that landed since then is still discarded, silently. Rebase and push normally, or ask |
|
|
60
|
+
| "It's my own feature branch, so a force push hurts nobody" | Open PRs, CI runs, review threads and other worktrees read that ref. Rewriting it invalidates all of them. Force only when the user says "force push" in this conversation |
|
|
61
|
+
| "There are uncommitted changes, but they're unrelated to what I'm pushing" | The push ships what is committed, so unrelated work silently stays behind while the branch looks complete to a reviewer. Warn and ask before pushing over a dirty tree |
|
|
62
|
+
| "No upstream is set, so `git push origin HEAD` will do" | That leaves the branch untracked, and every later `git status` / `git push` has to guess. Use `git push -u origin <branch>` so the tracking is recorded once |
|
|
63
|
+
| "The pre-push hook is slow and this is a tiny change" | `--no-verify` is never the answer here — a tiny change is exactly what an unrun hook lets through |
|
|
64
|
+
|
|
65
|
+
## Verification
|
|
66
|
+
|
|
67
|
+
Do not report the push as done until all of the following hold:
|
|
68
|
+
|
|
69
|
+
- `git status` reports the branch up to date with its upstream
|
|
70
|
+
- `git branch -vv` shows an upstream for the current branch (set with `-u` if it had none)
|
|
71
|
+
- `git log @{upstream}..HEAD --oneline` is empty — nothing left unpushed
|
|
72
|
+
- The report states the commit count pushed and the remote/branch they landed on
|
|
73
|
+
- `--force` was used only if the user asked for it in this conversation, and never against main/master without double confirmation
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: root-cause
|
|
3
|
+
model_tier: deep
|
|
4
|
+
description: |
|
|
5
|
+
Use when a defect exists and nobody can yet say what produces it — a crash, a
|
|
6
|
+
wrong result, a failure a user hits and the suite never sees. The order is
|
|
7
|
+
fixed: reproduce it and write down how, localize before editing anything,
|
|
8
|
+
reduce to the smallest failing case, repair the mechanism rather than the
|
|
9
|
+
symptom, and leave behind a guard that was WATCHED failing without the repair.
|
|
10
|
+
Covers the case the defect refuses to appear: which evidence is admissible,
|
|
11
|
+
when to stop looking, and what to report in place of a fix.
|
|
12
|
+
NOT for: a defect already pinned to a line and a mechanism, where nothing
|
|
13
|
+
remains but writing the patch and its guard.
|
|
14
|
+
triggers:
|
|
15
|
+
- "root cause"
|
|
16
|
+
- "why does this fail"
|
|
17
|
+
- "cannot reproduce"
|
|
18
|
+
- "track down the bug"
|
|
19
|
+
- "debugging"
|
|
20
|
+
- "bisect"
|
|
21
|
+
metadata:
|
|
22
|
+
author: "MrCipherSmith"
|
|
23
|
+
version: "1.0.0"
|
|
24
|
+
category: "quality"
|
|
25
|
+
compatible_harnesses: "cursor,codex,zed,opencode,claude"
|
|
26
|
+
license: "MIT"
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
# Root Cause
|
|
30
|
+
|
|
31
|
+
A defect exists and nobody knows why. Your job is **not** to make the symptom
|
|
32
|
+
stop. It is to name the mechanism that produces it, change that, and leave
|
|
33
|
+
something behind that fails if it ever comes back.
|
|
34
|
+
|
|
35
|
+
The five steps below are an order, not a menu. Every one of them is skipped by
|
|
36
|
+
agents in the same way — forward, into the edit — and each skip costs the step
|
|
37
|
+
after it.
|
|
38
|
+
|
|
39
|
+
## 1. Reproduce, and write the reproduction down
|
|
40
|
+
|
|
41
|
+
Before any code is read: the exact command, the input, the environment, what you
|
|
42
|
+
expected, what happened, and **how often** — `10/10` and `3/10` are different
|
|
43
|
+
defects with different causes.
|
|
44
|
+
|
|
45
|
+
A fix produced without a reproduction is a guess with a diff attached. It cannot
|
|
46
|
+
be verified, because there is nothing that was failing to stop failing.
|
|
47
|
+
|
|
48
|
+
If the reproduction needs setup (a seeded row, a cleared cache, a second
|
|
49
|
+
process), that setup is part of it. Write it as commands someone else can run.
|
|
50
|
+
|
|
51
|
+
## 2. Localize before you edit
|
|
52
|
+
|
|
53
|
+
Reading a file top to bottom is not localization; it is hoping. Localization is
|
|
54
|
+
a **search that halves**:
|
|
55
|
+
|
|
56
|
+
- over history — `git bisect` between a known-good and known-bad revision;
|
|
57
|
+
- over the call path — `keryx gdgraph affected <file>` for what reaches the
|
|
58
|
+
site, then a probe at the midpoint of the path;
|
|
59
|
+
- over the input — cut the payload in half, keep the failing half;
|
|
60
|
+
- over the environment — one variable, one flag, one version at a time.
|
|
61
|
+
|
|
62
|
+
Two rules hold for the whole step. **Change one thing and record what happened.**
|
|
63
|
+
And **an edit made "to see what happens" is not a fix** — it either goes away or
|
|
64
|
+
it gets named in the diff as instrumentation.
|
|
65
|
+
|
|
66
|
+
Long output (a bisect run, a failing suite, a log) goes through
|
|
67
|
+
`keryx ctx run -- <cmd>` rather than into the reading window whole.
|
|
68
|
+
|
|
69
|
+
## 3. Reduce to the smallest failing case
|
|
70
|
+
|
|
71
|
+
Delete everything that can be deleted while it still fails. Each removal that
|
|
72
|
+
keeps the failure is evidence about what does **not** matter, and the residue is
|
|
73
|
+
usually the cause stated in the shortest possible form.
|
|
74
|
+
|
|
75
|
+
A reduced case is also the guard from step 5, already written.
|
|
76
|
+
|
|
77
|
+
## 4. Name the cause, then repair it
|
|
78
|
+
|
|
79
|
+
Say it in one sentence carrying a **mechanism**, not a location: "the cache key
|
|
80
|
+
omits the tenant id, so the second tenant reads the first tenant's row". "It is
|
|
81
|
+
in `store.ts`" is a location. "It is a race" is a category. Neither is a cause.
|
|
82
|
+
|
|
83
|
+
Then check the repair against that sentence:
|
|
84
|
+
|
|
85
|
+
| The repair | What it actually is |
|
|
86
|
+
|---|---|
|
|
87
|
+
| A guard that returns early when the value is missing | The missing value is the defect; you hid the only thing reporting it |
|
|
88
|
+
| A retry, a longer timeout, a `sleep` | The mechanism is untouched and now it is slower and intermittent |
|
|
89
|
+
| A widened type, a cast, an `any` | The compiler was right; the wrong value is still produced |
|
|
90
|
+
| A changed assertion or an expectation loosened to match | The test was the last thing telling the truth here |
|
|
91
|
+
|
|
92
|
+
Every row above makes the symptom go away. None of them is this skill's output.
|
|
93
|
+
|
|
94
|
+
## 5. Leave a guard that was seen failing
|
|
95
|
+
|
|
96
|
+
A test written after a fix and never observed red proves the test runs. It does
|
|
97
|
+
not prove it catches anything.
|
|
98
|
+
|
|
99
|
+
So: run the new test against the **unfixed** code and watch it fail. If the fix
|
|
100
|
+
is already applied, undo it in place (never `git stash` — a scoped stash takes
|
|
101
|
+
other people's uncommitted work with it), watch the test fail, restore the fix,
|
|
102
|
+
watch it pass. Record both observations.
|
|
103
|
+
|
|
104
|
+
If the defect cannot be reached from a test — it needs a device, a customer's
|
|
105
|
+
data, real concurrency — say so, and say what the guard would be instead: an
|
|
106
|
+
assertion, a counter, a log line at the decision point.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## When it does not reproduce
|
|
111
|
+
|
|
112
|
+
This is the case handled worst, and it is handled worst in one specific way: the
|
|
113
|
+
search for the defect quietly becomes a search for *something wrong*, and a
|
|
114
|
+
plausible-looking repair is shipped for a failure nobody ever saw.
|
|
115
|
+
|
|
116
|
+
### What is admissible
|
|
117
|
+
|
|
118
|
+
In descending strength:
|
|
119
|
+
|
|
120
|
+
1. **A failure you produced yourself.** Nothing else is in this class.
|
|
121
|
+
2. **An artifact of the original failure** — a stack trace, a log line with a
|
|
122
|
+
timestamp, a CI run id, an error string quoted by the reporter, a dump.
|
|
123
|
+
3. **A path you can show reaches the reported state**, with the input that
|
|
124
|
+
drives it *named and shown to exist*.
|
|
125
|
+
4. **A measured environment delta** — a version, a locale, a timezone, a clock
|
|
126
|
+
skew, an ordering, a concurrency level you actually varied and observed.
|
|
127
|
+
|
|
128
|
+
Not admissible, at any strength: this looks wrong; this pattern is usually a
|
|
129
|
+
bug; this is the kind of thing that causes that; two readings of the same file
|
|
130
|
+
agreeing. Reading harder produces no new evidence — the file says the same thing
|
|
131
|
+
the third time.
|
|
132
|
+
|
|
133
|
+
### Widen the attempt before you give up
|
|
134
|
+
|
|
135
|
+
One axis at a time, each attempt and its result recorded: input, environment and
|
|
136
|
+
versions, ordering and concurrency, persisted state (cache, DB, temp files),
|
|
137
|
+
clock and timezone, isolation (the single test vs the whole suite), random seed.
|
|
138
|
+
|
|
139
|
+
For anything intermittent, a count replaces a verdict. Run it 50 times and
|
|
140
|
+
report `1/50`. "It passed when I re-ran it" is not a result.
|
|
141
|
+
|
|
142
|
+
### When to stop
|
|
143
|
+
|
|
144
|
+
Stop when any of these is true, and stop deliberately rather than by drifting
|
|
145
|
+
into a fix:
|
|
146
|
+
|
|
147
|
+
- the next axis is one you cannot control — production data, a customer's
|
|
148
|
+
machine, hardware you do not have;
|
|
149
|
+
- the budget the task set for reproduction is spent;
|
|
150
|
+
- going further requires changing the code under investigation to see anything
|
|
151
|
+
at all. That is instrumentation, and landing it is a separate decision the
|
|
152
|
+
requester gets to make.
|
|
153
|
+
|
|
154
|
+
### Report instead of a fix
|
|
155
|
+
|
|
156
|
+
Not reproducing is a result, and it is reportable. What it is not is permission
|
|
157
|
+
to ship a change. The report carries:
|
|
158
|
+
|
|
159
|
+
- every reproduction attempt, one line each, with what happened;
|
|
160
|
+
- the strongest evidence held, labelled with its class from the list above;
|
|
161
|
+
- the hypotheses that survive that evidence — two or three, each with **the
|
|
162
|
+
observation that would kill it**;
|
|
163
|
+
- the instrumentation that would settle it, and where it goes;
|
|
164
|
+
- what was left unchanged.
|
|
165
|
+
|
|
166
|
+
Landing instrumentation alone and stopping is legitimate work. Landing a
|
|
167
|
+
speculative repair and closing the issue is not: if no experiment can tell your
|
|
168
|
+
change from a no-op, nothing was fixed, and the next person's bisect now
|
|
169
|
+
straddles a commit that did nothing.
|
|
170
|
+
|
|
171
|
+
## Red Flags
|
|
172
|
+
|
|
173
|
+
| Rationalization | Why it is wrong |
|
|
174
|
+
|---|---|
|
|
175
|
+
| "It never reproduced, but I found something that looks wrong — I will fix that." | A smell you found and a defect you never saw are different objects. Repairing the smell closes the ticket with the reported failure still live, and the next report now arrives against code you changed for unrelated reasons. |
|
|
176
|
+
| "It passed when I ran it again, so it is flaky / it is gone." | A single pass is not evidence of absence for a failure that was observed. Run it 50 times and report the rate; `1/50` is a finding, "it passed" is a sentence about one run. |
|
|
177
|
+
| "The stack trace names this line, so this line is the cause." | The trace names where the bad value surfaced, not where it was produced. The throwing frame is usually innocent; walk back to where the value was created and prove it was already wrong there. |
|
|
178
|
+
| "A null check here makes the crash go away." | The crash was the only thing reporting that the value was missing. A guard moves the failure somewhere later, quieter, and further from its cause — and the next report will not mention this file. |
|
|
179
|
+
| "I fixed it and the test I added passes." | A guard never watched failing proves the test executes. Run it against the unfixed code first; if it passes there, it is testing something other than the defect. |
|
|
180
|
+
| "I changed three things and now it works." | You have a working tree and no cause. One of the three was the fix and two are unexplained edits nobody can review. Revert to one change at a time, or the repair is folklore. |
|
|
181
|
+
| "It only breaks in CI, so it is an infrastructure problem." | "Only in CI" is an environment difference you have not named yet — ordering, concurrency, a clock, a locale, a missing file, a cold cache. Name the difference before assigning the defect to somebody else. |
|
|
182
|
+
| "It is obviously a race condition." | "Race" is a category, not a cause. Which two operations, over which piece of state, in which interleaving? Without those three, the word ends the investigation instead of advancing it. |
|
|
183
|
+
| "The reproduction takes too long to write down; I have it in my head." | The reproduction is the artifact the fix is verified against. Unwritten, it cannot be re-run after the change, and "it works now" becomes unfalsifiable. |
|
|
184
|
+
|
|
185
|
+
## Verification
|
|
186
|
+
|
|
187
|
+
Report the defect fixed only when all of these hold:
|
|
188
|
+
|
|
189
|
+
- The reproduction is written down as commands plus expected/observed, and it
|
|
190
|
+
failed before the change.
|
|
191
|
+
- The cause is one sentence naming a mechanism, not a file and not a category.
|
|
192
|
+
- The change alters that mechanism. No symptom was suppressed by a guard, a
|
|
193
|
+
retry, a widened type, or a loosened assertion.
|
|
194
|
+
- A guard exists and was **watched failing** against the unfixed code; the
|
|
195
|
+
report says where that was observed.
|
|
196
|
+
- Everything added to investigate — logging, timeouts, skipped tests, scratch
|
|
197
|
+
edits — is either removed or deliberately kept and named in the diff.
|
|
198
|
+
- If it never reproduced, no fix is claimed: the report carries the attempts,
|
|
199
|
+
the evidence and its class, the surviving hypotheses with their killing
|
|
200
|
+
observations, and the instrumentation that would settle it.
|
|
201
|
+
|
|
202
|
+
Credit: [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills)
|
|
203
|
+
(MIT) is why this set carries a debugging skill at all; the step order, the
|
|
204
|
+
evidence classes and the non-reproduction protocol were written here, not taken.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: security-audit
|
|
3
|
-
description: "Use when checking for dependency vulnerabilities, accidentally committed secrets, or security issues in Docker images."
|
|
3
|
+
description: "Use when checking for dependency vulnerabilities, accidentally committed secrets, or security issues in Docker images. NOT for Metaproject security policy — prompt-injection, redaction and memory/wiki/report writes belong to `metaproject-security` — and NOT for performing the upgrades a finding calls for (use `dependency-update`)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
6
|
-
- "
|
|
7
|
-
- "
|
|
5
|
+
- "security audit"
|
|
6
|
+
- "audit dependencies"
|
|
7
|
+
- "scan secrets"
|
|
8
8
|
- "Security scan"
|
|
9
9
|
- "Check for CVEs"
|
|
10
10
|
- "npm audit"
|
|
@@ -106,3 +106,24 @@ Otherwise report `container-scan: NOT RUN — <no Dockerfile | docker unavailabl
|
|
|
106
106
|
selected, could not run, or returned no vulnerability data. Report `not
|
|
107
107
|
measured` and name the reason. In a security report, silence read as "clean"
|
|
108
108
|
is the most expensive defect available.
|
|
109
|
+
|
|
110
|
+
## Red Flags
|
|
111
|
+
|
|
112
|
+
| Rationalization | Why it is wrong |
|
|
113
|
+
|---|---|
|
|
114
|
+
| "The advisory is informational / low severity — ship it" | This skill reports severity, it does not filter it. Accepting a known CVE is the caller's decision to make explicitly, not one you make for them by omission |
|
|
115
|
+
| "`npm audit` returned JSON with no vulnerabilities in it, so the project is clean" | Check for the `vulnerabilities` / `advisories` key before grouping. `ENOLOCK` is ~240 bytes of error that groups to zero in every severity — indistinguishable from clean, and that is the whole point of Step 1 |
|
|
116
|
+
| "No lockfile row matched, but `npm audit` is the usual one" | Falling through to another package manager's audit is a guess dressed as a result. The outcome is `dependency-audit: NOT RUN — no recognised lockfile`, with no totals attached |
|
|
117
|
+
| "There's no Dockerfile, so container scan: 0 issues" | "No Dockerfile" and "scanned, found nothing" are different results and only one of them is evidence. Report `container-scan: NOT RUN — no Dockerfile` |
|
|
118
|
+
| "`npm audit fix --force` clears the whole list" | `--force` installs semver-major upgrades across the tree. Never recommend it without stating which packages it would move and by how much |
|
|
119
|
+
| "That key looks like a test fixture, not a real secret" | A committed credential gets reported with its path and rotated first; whether it was live is decided afterwards, by someone who can check. Never print its value in the report |
|
|
120
|
+
|
|
121
|
+
## Verification
|
|
122
|
+
|
|
123
|
+
Do not report the audit as done until all of the following hold:
|
|
124
|
+
|
|
125
|
+
- Every step carries `RAN` or `NOT RUN — <reason>`, and no step marked NOT RUN carries a numeric total
|
|
126
|
+
- Severity totals appear only for steps that ran; everywhere else the report reads `not measured`, never `0`
|
|
127
|
+
- Every critical/high entry names a CVE or advisory id, the package, and the version range that pulls it in
|
|
128
|
+
- No raw secret value appears anywhere in the report — only path, line, and a redacted preview
|
|
129
|
+
- The report names the package manager and lockfile detected in Step 1, so a reader can tell which tree was audited
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: test-gen
|
|
3
|
-
description: "Use when unit or integration tests need to be written for a specific file or module."
|
|
3
|
+
description: "Use when unit or integration tests need to be written for a specific file or module that already exists. NOT for writing failing test stubs ahead of the implementation (use `tests-creator`)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
6
|
-
- "
|
|
5
|
+
- "generate tests"
|
|
6
|
+
- "write tests"
|
|
7
|
+
- "add coverage"
|
|
7
8
|
- "Write tests for"
|
|
8
9
|
- "Add tests"
|
|
9
10
|
- "Create test file"
|
|
@@ -78,3 +79,23 @@ Fix failing tests (max 3 iterations) — fix the test, not the source.
|
|
|
78
79
|
- Mock external dependencies, not internal modules
|
|
79
80
|
- Meaningful test descriptions
|
|
80
81
|
- If no test framework detected, suggest installing one
|
|
82
|
+
|
|
83
|
+
## Red Flags
|
|
84
|
+
|
|
85
|
+
| Rationalization | Why it is wrong |
|
|
86
|
+
|---|---|
|
|
87
|
+
| "The test fails because the source has a bug — I'll fix the source" | This skill writes test files only. A source change buried inside a test-generation run is an unreviewed fix, and it also hides the bug the new test just found. Report the failure instead |
|
|
88
|
+
| "Still failing on iteration four; I'll loosen the assertion until it's green" | A test that asserts nothing covers nothing while reporting coverage — strictly worse than no test. After 3 iterations, stop and report the failing case |
|
|
89
|
+
| "No test framework here, so I'll install vitest and a config" | Choosing a test framework is a project decision with config, CI and convention consequences. Suggest one; do not add it |
|
|
90
|
+
| "Mocking the neighbouring module is easier than building its input" | Mock external dependencies, not internal ones. A test whose collaborators are all mocked asserts that your mocks agree with each other |
|
|
91
|
+
| "One test that exercises the whole file covers more per line written" | It reports one failure for any of a dozen causes, so nobody can tell what broke. One behaviour per test, and let the description name it |
|
|
92
|
+
|
|
93
|
+
## Verification
|
|
94
|
+
|
|
95
|
+
Do not report generation as done until all of the following hold:
|
|
96
|
+
|
|
97
|
+
- The test file sits at the project's own convention path, with the import style, describe/it structure and assertion style of the neighbouring tests read in Step 2
|
|
98
|
+
- `keryx test run --changed --strict` — or, with no keryx testing config, the project's own discovered test command — exits 0 with every generated test passing
|
|
99
|
+
- `git status` shows only test files added or modified; no source file changed
|
|
100
|
+
- Every exported function, component, endpoint or class identified in Step 1 has at least one test, or the report says why it does not
|
|
101
|
+
- The Step 6 report states the file path and the test-case count, and that count matches what the runner reported
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tests-creator
|
|
3
|
-
description: "Use when writing test cases BEFORE implementation — converts acceptance criteria into failing test stubs that task-implementer will make pass. Mandatory step in the TDD pipeline between issue-analyzer and task-implementer."
|
|
3
|
+
description: "Use when writing test cases BEFORE implementation — converts acceptance criteria into failing test stubs that task-implementer will make pass. Mandatory step in the TDD pipeline between issue-analyzer and task-implementer. NOT for adding tests to code that already exists (use `test-gen`)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
5
|
+
- "create tests first"
|
|
6
|
+
- "test scenarios"
|
|
7
|
+
- "tdd"
|
|
6
8
|
- "Write tests first"
|
|
7
9
|
- "Generate test specs"
|
|
8
10
|
- "Tests before implementation"
|
|
@@ -330,6 +332,19 @@ This ensures the TDD cycle is maintained end-to-end.
|
|
|
330
332
|
|
|
331
333
|
---
|
|
332
334
|
|
|
335
|
+
## Red Flags
|
|
336
|
+
|
|
337
|
+
| Rationalization | Why it is wrong |
|
|
338
|
+
|---|---|
|
|
339
|
+
| "The module doesn't exist, so the import breaks the whole suite — I'll create a stub module first" | That stub is implementation code, and it is exactly what Rule 1 forbids. A failing import IS the RED phase; `task-implementer` creates the module |
|
|
340
|
+
| "A placeholder like `expect(true).toBe(true)` gets the file committed and the pipeline moving" | A test that passes before implementation proves nothing and goes green forever after. RED means failing (Rule 2) — use `it.todo`, or the forward-declared assertion from 3.3 |
|
|
341
|
+
| "I know how this will be built, so I'll assert it calls the repository method" | That tests HOW, not WHAT (Rule 3), and it fails the moment the implementer picks a different — valid — structure. Assert observable behaviour |
|
|
342
|
+
| "This acceptance criterion is too vague to test, so I'll skip it" | Every criterion needs at least one test (Rule 4). Derive from the task description, log the warning, and say in `notes` what you assumed — an untested criterion silently leaves the pipeline |
|
|
343
|
+
| "`verify_red` shows the test passing already; close enough, report DONE" | A test green before implementation is a wrong test, not an early win. Fix the assertion, or report it as a concern — do not pass it downstream as covered |
|
|
344
|
+
| "I'll leave the stubs uncommitted and let `task-implementer` commit everything together" | The handoff assumes committed RED files (Rule 6): the implementer's first step is to run them and confirm they fail. Uncommitted stubs make that step unverifiable |
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
333
348
|
## Job Context Awareness
|
|
334
349
|
|
|
335
350
|
When dispatched by `job-orchestrator`:
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-ai-review
|
|
3
|
-
description: "
|
|
3
|
+
description: "Use when the legacy strict AI review profile (code-review-ai-assistant.mdc) is asked for by name — reviews the current branch from its merge-base, committed and uncommitted changes together. NOT for: a code review request that names no profile (review-orchestrator)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
6
|
-
- "
|
|
7
|
-
- "
|
|
8
|
-
- "Review code"
|
|
5
|
+
- "code-ai-review"
|
|
6
|
+
- "AI review baseline"
|
|
7
|
+
- "strict AI review"
|
|
9
8
|
metadata:
|
|
10
9
|
author: "MrCipherSmith"
|
|
11
10
|
version: "1.0.0"
|
|
@@ -201,3 +200,39 @@ If provided and the file exists, read the context document before starting the r
|
|
|
201
200
|
- Reference context when justifying suggestions
|
|
202
201
|
|
|
203
202
|
If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Red Flags
|
|
207
|
+
|
|
208
|
+
This profile is a thin wrapper around `code-review-ai-assistant.mdc`, and it
|
|
209
|
+
predates everything the review domain standardised afterwards. The rows below are
|
|
210
|
+
the ways that gap makes it misfire.
|
|
211
|
+
|
|
212
|
+
| Rationalization | Why it is wrong |
|
|
213
|
+
|----------------|-----------------|
|
|
214
|
+
| "A review was requested, so I will run this profile." | It is a legacy opt-in profile, reached by name or through `review --legacy-profiles`. An unqualified review request belongs to `review-orchestrator`; running this one instead silently drops every specialised lane along with the finding schema. |
|
|
215
|
+
| "The output template has a Severity field, so my report is a review result." | It is not. This profile predates `reviewer-finding.schema.json`: it emits free prose with no machine-readable finding and no class enumeration, so nothing downstream can screen, verify or deduplicate it. Hand the report to a person, never to `keryx review ingest`. |
|
|
216
|
+
| "Half these instructions are in Russian, so the report should be in Russian." | The mixed language is an artefact of when this file was written, not an instruction about the report. Write the report in the language the requester used. |
|
|
217
|
+
| "I noticed a store problem and a naming problem, so I will include them here." | The Scope Boundaries table above routes those to `code-mobx-store-review` and `code-style-review`. A finding filed under the wrong profile is a finding the requester did not ask this profile for, and it arrives without the checks that lane would have applied. |
|
|
218
|
+
| "One entry per occurrence is more thorough." | It is longer, not more thorough. Where one shape repeats, report it once and list every site — ten entries that are one problem hide the other nine. |
|
|
219
|
+
| "I cannot reach the code path, but the pattern is usually wrong." | Then it is an observation, not a finding. Say what input, call or condition would reach it, and let the reader decide. |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Verification
|
|
224
|
+
|
|
225
|
+
Report done only once all of these hold:
|
|
226
|
+
|
|
227
|
+
- The requester asked for this profile by name, or through
|
|
228
|
+
`review --legacy-profiles`. If they asked for "a review", stop and hand the
|
|
229
|
+
request to `review-orchestrator` instead.
|
|
230
|
+
- The scope block carries the real branch, parent ref, merge-base and scope mode —
|
|
231
|
+
not the template placeholders.
|
|
232
|
+
- Every finding carries Severity, Location (path plus the lines from the diff),
|
|
233
|
+
Problem, Why it matters and a concrete Suggested fix; a patch where the fix is
|
|
234
|
+
a line or two.
|
|
235
|
+
- Every finding is anchored to a line the branch slice actually changed. Nothing
|
|
236
|
+
outside `merge-base..worktree` is discussed.
|
|
237
|
+
- The report is free prose by design, so it is delivered to a person and is not
|
|
238
|
+
fed into the managed-review pipeline.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-learned-review
|
|
3
|
-
description: "
|
|
3
|
+
description: "Use when a project has a learned review skill — built by `keryx review learn` from its own pull-request comments — and wants those accumulated conventions applied to the current branch. Ships with an empty checklist: the content comes from the project, never from the tool. NOT for: a project with no learned skill, or a review request that names no profile (review-orchestrator)."
|
|
4
4
|
triggers:
|
|
5
5
|
- "learned review"
|
|
6
|
+
- "code-learned-review"
|
|
6
7
|
- "review with our conventions"
|
|
7
8
|
- "review using what we learned"
|
|
8
9
|
metadata:
|
|
@@ -241,3 +242,42 @@ review. Use it to:
|
|
|
241
242
|
|
|
242
243
|
If the file does not exist or is not provided, proceed normally — context is
|
|
243
244
|
optional and non-blocking.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Red Flags
|
|
249
|
+
|
|
250
|
+
This profile is a mechanism with an empty checklist, and it predates the finding
|
|
251
|
+
contract the rest of the review domain now shares. Both facts produce their own
|
|
252
|
+
failure modes, and they are the rows below.
|
|
253
|
+
|
|
254
|
+
| Rationalization | Why it is wrong |
|
|
255
|
+
|----------------|-----------------|
|
|
256
|
+
| "This project has no learned skill, but I can review against sensible conventions." | An empty learned review is not a generic review. Say the project has no learned skill and stop; `review-orchestrator` is what a generic request wants. Inventing conventions here ships one model's taste as the team's agreed standard. |
|
|
257
|
+
| "This lesson is about a slightly different case, but the spirit applies." | Do not generalise a lesson past its text. A lesson about one shape of function is about that shape; widening it into a rule about a layer or a language invents a convention the project never agreed to. |
|
|
258
|
+
| "The lesson came from a named reviewer, so I will report it as what they would want." | Do not attribute. The record says a comment was left, nothing more. Reporting a finding as a person's preference turns the checklist back into the persona this skill exists to remove. |
|
|
259
|
+
| "This pull-request comment is good even though the config does not name its author." | An author the config does not name contributes nothing — not to a proposal, not to a `SKILL.md`, and not to this review. Changing who counts is a config change, made deliberately, not a judgement call mid-review. |
|
|
260
|
+
| "A lesson exists for this, so the finding stands." | A lesson is evidence, not authority. If the diff has a reason the original objection does not apply here, the reason wins and the finding is not raised. |
|
|
261
|
+
| "The report has a Severity field, so it is a review result." | It is not. This profile predates `reviewer-finding.schema.json` and emits free prose with no machine-readable finding, so nothing downstream can screen, verify or deduplicate it. Hand it to a person, never to `keryx review ingest`. |
|
|
262
|
+
| "The lessons I checked that matched nothing are not worth mentioning." | They are the only way anyone learns a lesson has gone stale. Record the count of lessons checked and the count that matched, either way. |
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Verification
|
|
267
|
+
|
|
268
|
+
Report done only once all of these hold:
|
|
269
|
+
|
|
270
|
+
- `.metaproject/review-learning.config.json` was read and the project skill it
|
|
271
|
+
names was opened. If that skill carries no lessons, the reply says so and stops
|
|
272
|
+
rather than reviewing generically.
|
|
273
|
+
- The report states the project skill and version, the number of lessons checked
|
|
274
|
+
and the number that matched.
|
|
275
|
+
- Every finding cites the line in the project skill it rests on. Findings with no
|
|
276
|
+
learned lesson behind them are listed in their own section and routed to the
|
|
277
|
+
reviewer that owns them.
|
|
278
|
+
- No finding names a person, quotes a personal catchphrase, or reports a lesson as
|
|
279
|
+
somebody's preference.
|
|
280
|
+
- The scope block carries the real branch, parent ref, merge-base and scope mode,
|
|
281
|
+
and every finding is anchored to a line the branch slice changed.
|
|
282
|
+
- The report is free prose by design, so it is delivered to a person and is not
|
|
283
|
+
fed into the managed-review pipeline.
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-mobx-store-review
|
|
3
|
-
description: "
|
|
3
|
+
description: "Use when MobX store changes need a focused review — actions, computed values, reactions, async runInAction, state typing, and View↔Store boundaries. NOT for: a general frontend review (review-frontend) or a review request that names no domain (review-orchestrator)."
|
|
4
4
|
triggers:
|
|
5
|
+
- "mobx review"
|
|
6
|
+
- "store review"
|
|
7
|
+
- "code-mobx-store-review"
|
|
5
8
|
- "Review MobX store"
|
|
6
9
|
- "Check store changes"
|
|
7
|
-
- "MobX review"
|
|
8
10
|
metadata:
|
|
9
11
|
author: "MrCipherSmith"
|
|
10
12
|
version: "1.1.0"
|
|
@@ -257,3 +259,43 @@ If provided and the file exists, read the context document before starting the r
|
|
|
257
259
|
- Avoid flagging intentional architectural decisions as issues
|
|
258
260
|
|
|
259
261
|
If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Red Flags
|
|
266
|
+
|
|
267
|
+
This profile is a thin legacy wrapper around `mobx-store-template.mdc`. It
|
|
268
|
+
predates the shared finding contract, it does not use the review domain's
|
|
269
|
+
severity vocabulary at all, and half of it is written in Russian — each of those
|
|
270
|
+
is a way it misfires, and they are the rows below.
|
|
271
|
+
|
|
272
|
+
| Rationalization | Why it is wrong |
|
|
273
|
+
|----------------|-----------------|
|
|
274
|
+
| "The checklist prints severities, so this report is a review result." | It is not. `Critical` / `Warnings` / `Suggestions` are section headings in a Markdown document, not a severity field: this profile predates `reviewer-finding.schema.json` and emits free prose with no machine-readable finding. Hand it to a person, never to `keryx review ingest`. |
|
|
275
|
+
| "Half the instructions are in Russian, so the report should be." | The mixed language is an artefact of when this file was written. Write the report in the language the requester used. |
|
|
276
|
+
| "The two stores sync both ways and I have not seen an infinite loop." | A bounce needs one ordering to appear, and reading the code is not running it. The checklist rates a bidirectional sync with no equality guard as **critical** for exactly that reason: the absence of the guard is the finding, not the absence of a reproduction. |
|
|
277
|
+
| "`if (value && value !== other)` is the safer guard." | It is the guard that silently refuses to clear. `undefined`, `null`, `0` and `""` are legitimate values to propagate, and a truthy check strands the stale one instead. |
|
|
278
|
+
| "The component's `useEffect` calls `store.init()` — that is ordinary React." | Not under this architecture. The parent store orchestrates its children's lifecycle, and moving that into a component is how `dispose()` stops being called and stale async writes start landing. |
|
|
279
|
+
| "The method is only called by another store, so `@action.bound` is harmless." | The decorator publishes it. Inter-store callbacks and internal handlers are `private` here; the naming patterns the checklist lists are the tell, and the decision question is whether a React component calls it. |
|
|
280
|
+
| "While I was in the store I also noticed naming and component problems." | The Scope Boundaries table routes those to `code-style-review` and `code-ai-review`. A finding filed under the wrong profile arrives without the checks that lane would have applied. |
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## Verification
|
|
285
|
+
|
|
286
|
+
Report done only once all of these hold:
|
|
287
|
+
|
|
288
|
+
- The requester asked for this profile by name, or through
|
|
289
|
+
`review --legacy-profiles`. A general frontend or store review with no profile
|
|
290
|
+
named belongs to `review-orchestrator`.
|
|
291
|
+
- The scope block carries the real branch, parent ref, merge-base and scope mode —
|
|
292
|
+
not the template placeholders.
|
|
293
|
+
- Every entry carries Rule, Why, Where (path plus the lines from the diff) and
|
|
294
|
+
Fix, with a minimal unified diff where the fix is a line or two.
|
|
295
|
+
- Every entry is anchored to a line the branch slice actually changed; legacy
|
|
296
|
+
store code outside that slice is not discussed.
|
|
297
|
+
- Entries are sorted into this document's own Critical / Warnings / Suggestions
|
|
298
|
+
sections, and are not presented as a severity any other reviewer or tool
|
|
299
|
+
consumes.
|
|
300
|
+
- The report is free prose by design, so it is delivered to a person and is not
|
|
301
|
+
fed into the managed-review pipeline.
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-style-review
|
|
3
|
-
description: "
|
|
3
|
+
description: "Use when the legacy code style and architecture review profile (code-style-patterns.mdc) is asked for by name — naming, organization, patterns, and TypeScript usage on the current branch. NOT for: a general style review (review-style) or an architecture review (review-architecture)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
6
|
-
- "
|
|
7
|
-
- "Architecture review"
|
|
5
|
+
- "code-style-review"
|
|
6
|
+
- "architecture style"
|
|
8
7
|
metadata:
|
|
9
8
|
author: "MrCipherSmith"
|
|
10
9
|
version: "1.0.0"
|
|
@@ -166,3 +165,44 @@ If provided and the file exists, read the context document before starting the r
|
|
|
166
165
|
- Provide more accurate findings by understanding the project's architectural decisions
|
|
167
166
|
|
|
168
167
|
If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Red Flags
|
|
172
|
+
|
|
173
|
+
This profile is a thin legacy wrapper around `code-style-patterns.mdc`. It
|
|
174
|
+
predates the shared finding contract, it does not use the review domain's
|
|
175
|
+
severity vocabulary at all, and it is written mostly in Russian — each of those
|
|
176
|
+
is a way it misfires, and they are the rows below.
|
|
177
|
+
|
|
178
|
+
| Rationalization | Why it is wrong |
|
|
179
|
+
|----------------|-----------------|
|
|
180
|
+
| "A style review was asked for, so I will run this profile." | It is a legacy opt-in profile pinned to one rules file, reached by name or through `review --legacy-profiles`. A general style request belongs to `review-style`, and an architecture request to `review-architecture`; running this instead answers a narrower question than the one that was asked. |
|
|
181
|
+
| "The report has a Critical section, so downstream can consume it." | It cannot. `Critical` / `Warnings` / `Suggestions` are headings in a Markdown document, not a severity field: this profile predates `reviewer-finding.schema.json` and emits free prose with no machine-readable finding. Hand it to a person, never to `keryx review ingest`. |
|
|
182
|
+
| "The instructions are in Russian, so the report should be." | The language is an artefact of when this file was written. Write the report in the language the requester used. |
|
|
183
|
+
| "`public` reads more clearly than leaving the modifier off." | The project's ESLint configuration forbids the keyword outright, at error level. That is a build failure, not a matter of taste, and a reviewer arguing the taste is arguing with a gate that already decided. |
|
|
184
|
+
| "This component does not look like it reads observables, so the wrapper is optional." | Check what it reads through props and through the store getters it calls. Missing `observer` is rated critical in the checklist above because the failure is silent: the component simply stops updating. |
|
|
185
|
+
| "The `any` is temporary — the author will type it properly later." | Nothing records that intent and nothing revisits it. Rate the code in the diff, and propose `unknown` plus a type guard as the concrete fix. |
|
|
186
|
+
| "While reading for style I found a real bug, so I will report it here." | This report has nowhere to carry it and the requester is not reading it for that. Route it to `code-ai-review` (or `review-logic`) and say in one line that you did. |
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Verification
|
|
191
|
+
|
|
192
|
+
Report done only once all of these hold:
|
|
193
|
+
|
|
194
|
+
- The requester asked for this profile by name, or through
|
|
195
|
+
`review --legacy-profiles`. A style or architecture request that names no
|
|
196
|
+
profile belongs to `review-style` or `review-architecture`.
|
|
197
|
+
- The scope block carries the real branch, parent ref, merge-base and scope mode —
|
|
198
|
+
not the template placeholders.
|
|
199
|
+
- Every entry carries Rule (the section of `code-style-patterns.mdc` it rests on),
|
|
200
|
+
Why, Where (path plus the lines from the diff) and Fix, with a minimal unified
|
|
201
|
+
diff rather than an edit applied to the tree.
|
|
202
|
+
- Every entry is anchored to a line the branch slice actually changed; legacy code
|
|
203
|
+
outside that slice is not discussed.
|
|
204
|
+
- Entries are sorted into this document's own Critical / Warnings / Suggestions
|
|
205
|
+
sections, and are not presented as a severity any other reviewer or tool
|
|
206
|
+
consumes.
|
|
207
|
+
- The report is free prose by design, so it is delivered to a person and is not
|
|
208
|
+
fed into the managed-review pipeline.
|
|
@@ -8,12 +8,12 @@ description: |
|
|
|
8
8
|
Dispatched by review-orchestrator with --architecture or --backend.
|
|
9
9
|
NOT for: style/naming preferences, logic correctness bugs, or security vulnerabilities.
|
|
10
10
|
triggers:
|
|
11
|
-
- "review
|
|
11
|
+
- "architecture review"
|
|
12
|
+
- "boundary review"
|
|
13
|
+
- "layering"
|
|
12
14
|
- "check architecture"
|
|
13
15
|
- "architectural review"
|
|
14
|
-
- "architecture review"
|
|
15
16
|
- "check layers"
|
|
16
|
-
- "dispatched by review-orchestrator"
|
|
17
17
|
metadata:
|
|
18
18
|
author: "MrCipherSmith"
|
|
19
19
|
version: "1.0.0"
|
|
@@ -9,11 +9,10 @@ description: |
|
|
|
9
9
|
(use review-security-code for XSS/injection/auth-bypass), or performance profiling
|
|
10
10
|
(use review-performance).
|
|
11
11
|
triggers:
|
|
12
|
-
- "review backend"
|
|
13
12
|
- "backend review"
|
|
14
|
-
- "review
|
|
13
|
+
- "api review"
|
|
14
|
+
- "service review"
|
|
15
15
|
- "review NestJS"
|
|
16
|
-
- "review --backend"
|
|
17
16
|
metadata:
|
|
18
17
|
author: "MrCipherSmith"
|
|
19
18
|
version: "1.0.0"
|
|
@@ -10,12 +10,12 @@ description: |
|
|
|
10
10
|
NOT for: architectural layer violations (review-architecture), naming convention formatting
|
|
11
11
|
(review-style), logic correctness bugs (review-logic), or security (review-security-code).
|
|
12
12
|
triggers:
|
|
13
|
-
- "
|
|
13
|
+
- "clean code review"
|
|
14
|
+
- "functions do too much"
|
|
15
|
+
- "solid review"
|
|
16
|
+
- "maintainability"
|
|
14
17
|
- "check clean code"
|
|
15
18
|
- "Uncle Bob review"
|
|
16
|
-
- "SOLID review"
|
|
17
|
-
- "review --clean-code"
|
|
18
|
-
- dispatched by review-orchestrator
|
|
19
19
|
metadata:
|
|
20
20
|
author: "MrCipherSmith"
|
|
21
21
|
version: "1.0.0"
|