@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
|
@@ -6,10 +6,14 @@ description: |
|
|
|
6
6
|
direction, feature-boundary leakage, abstraction stability, composition,
|
|
7
7
|
and blast-radius risks. Dispatched by review-orchestrator for
|
|
8
8
|
--core-boundaries, --project-conventions, --all, or src/core/** changes.
|
|
9
|
+
NOT for: logic correctness in code that happens to live in core (review-logic),
|
|
10
|
+
naming and readability (review-style), or SOLID and layering inside a feature
|
|
11
|
+
module (review-architecture).
|
|
9
12
|
triggers:
|
|
13
|
+
- "core review"
|
|
14
|
+
- "shared boundary"
|
|
15
|
+
- "public surface"
|
|
10
16
|
- "review core boundaries"
|
|
11
|
-
- "review --core-boundaries"
|
|
12
|
-
- dispatched by review-orchestrator
|
|
13
17
|
metadata:
|
|
14
18
|
author: "MrCipherSmith"
|
|
15
19
|
version: "1.0.0"
|
|
@@ -127,3 +131,33 @@ conditions land under that rubric.
|
|
|
127
131
|
|
|
128
132
|
"Broad blast radius" is not by itself a `blocker`. Name the consumer that breaks.
|
|
129
133
|
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Red Flags
|
|
137
|
+
|
|
138
|
+
| Rationalization | Why it is wrong |
|
|
139
|
+
|----------------|-----------------|
|
|
140
|
+
| "It is generic enough to live in core." | Generic enough is not shared. Name the second consumer that needs it today; one feature's helper parked in core is exactly the leak this lane exists to catch, whatever the file is called. |
|
|
141
|
+
| "Core has broad blast radius, so this is a `blocker`." | Blast radius is a property of the module, not of the change. Name the consumer that breaks and what breaks in it, or it is `info` under shared law 1. |
|
|
142
|
+
| "It is only a type import, so core does not really depend on the feature." | The import is in the source and in the build graph. Delete the feature module and core stops compiling — direction is decided by what core names, not by what survives type erasure. |
|
|
143
|
+
| "The new export has one consumer today, so the surface is still stable." | A public core export is a contract with every module that installs it. One consumer is the argument for keeping the helper internal, not for exporting it. |
|
|
144
|
+
| "I cannot enumerate every consumer of a core symbol, so I will anchor the finding at the file the diff touched." | Consumers of a core export are precisely what a search enumerates. A `class_scope` with no `enumeration_method` is the one-site fix that leaves the siblings for the next round. |
|
|
145
|
+
| "The move into core is temporary — it gets extracted properly later." | Nothing downstream records that intent, and a core import is load-bearing the moment it ships. Rate the code in the diff, not the plan described beside it. |
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Verification
|
|
150
|
+
|
|
151
|
+
Report done only once all of these hold:
|
|
152
|
+
|
|
153
|
+
- Every finding names `file:line` and the evidence that settles it — the import,
|
|
154
|
+
the export, or the consumer — quoted from the tree rather than described.
|
|
155
|
+
- Every `blocker` and `major` carries `class_scope` with `sites` and an
|
|
156
|
+
`enumeration_method` naming the search that produced them.
|
|
157
|
+
- No finding invents a severity: each lands under **Severity (canonical)** in
|
|
158
|
+
`review-orchestrator/SKILL.md`.
|
|
159
|
+
- Every blast-radius claim names the consumer that breaks. Unnamed ones are
|
|
160
|
+
`info`, and say what would settle them.
|
|
161
|
+
- The reply is the `REVIEW_RESULT` the Orchestrated Review Contract asks for, or
|
|
162
|
+
`NEEDS_CONTEXT` naming the context that was missing — never a guess in its place.
|
|
163
|
+
|
|
@@ -7,10 +7,13 @@ description: |
|
|
|
7
7
|
boundaries, selection lifecycle, and large-graph performance. Dispatched by
|
|
8
8
|
review-orchestrator for --flow-graph, --project-conventions, --all, or
|
|
9
9
|
src/core/flow/** / graph abstraction changes.
|
|
10
|
+
NOT for: React and MobX component structure outside the graph surface
|
|
11
|
+
(review-frontend), render cost elsewhere in the app (review-performance), or
|
|
12
|
+
the domain rules a graph happens to display (review-logic).
|
|
10
13
|
triggers:
|
|
11
|
-
- "
|
|
12
|
-
- "review
|
|
13
|
-
-
|
|
14
|
+
- "flow graph review"
|
|
15
|
+
- "graph ui review"
|
|
16
|
+
- "reactflow review"
|
|
14
17
|
metadata:
|
|
15
18
|
author: "MrCipherSmith"
|
|
16
19
|
version: "1.0.0"
|
|
@@ -152,3 +155,34 @@ conditions land under that rubric.
|
|
|
152
155
|
| Internal helper reaching across a boundary with no observable consequence | `minor` | Correct today; the cost is to the next editor |
|
|
153
156
|
| Surface concern with no named caller | `info` | Shared law 1 |
|
|
154
157
|
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Red Flags
|
|
161
|
+
|
|
162
|
+
| Rationalization | Why it is wrong |
|
|
163
|
+
|----------------|-----------------|
|
|
164
|
+
| "The domain module imports the internal shell directly, but it renders fine." | Rendering is not the contract. The public graph surface is what the next refactor of the shell is allowed to change; a consumer reaching past it is the break waiting to happen, and it is reportable today. |
|
|
165
|
+
| "Only one consumer needs this helper, so exporting it from the graph surface is harmless." | An export is a promise to every future consumer. The rule in the checklist is two consumers, and one is the argument for leaving the helper internal. |
|
|
166
|
+
| "This graph felt slow when I read the code." | A performance claim here is a claim about a node and edge count. Name the count at which it degrades, or the finding is `info` under shared law 1. |
|
|
167
|
+
| "Deep observation on the nodes array is fine — the library is fast." | The cost is proxying every node on every write, and it scales with the array, not with the library. If you are rating it, state the array size the diff can produce. |
|
|
168
|
+
| "The subclass sets up its own reactivity first; base initialisation order is an implementation detail." | The base store's state is what the base selection, click and reset behaviour reads. Initialising after it is the documented lifecycle, not a style preference. |
|
|
169
|
+
| "The layout ran, so the lifecycle is intact." | Selection, expand/collapse and reset each have their own lifecycle. A layout that completes says nothing about whether a domain side effect swallowed the base selection reset. |
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Verification
|
|
174
|
+
|
|
175
|
+
Report done only once all of these hold:
|
|
176
|
+
|
|
177
|
+
- Every finding names `file:line` and the evidence that settles it — the import,
|
|
178
|
+
the export, the subclass member, or the measured count.
|
|
179
|
+
- Every `blocker` and `major` carries `class_scope` with `sites` and an
|
|
180
|
+
`enumeration_method` naming the search that produced them — for a surface
|
|
181
|
+
finding, every consumer of the symbol, not only the one in the diff.
|
|
182
|
+
- Every performance finding states the node/edge count at which the cost applies;
|
|
183
|
+
without one it is `info`.
|
|
184
|
+
- No finding invents a severity: each lands under **Severity (canonical)** in
|
|
185
|
+
`review-orchestrator/SKILL.md`.
|
|
186
|
+
- The reply is the `REVIEW_RESULT` the Orchestrated Review Contract asks for, or
|
|
187
|
+
`NEEDS_CONTEXT` naming the context that was missing — never a guess in its place.
|
|
188
|
+
|
|
@@ -3,13 +3,11 @@ name: review-frontend
|
|
|
3
3
|
model_tier: standard
|
|
4
4
|
description: "Use when a frontend review is requested, checking React component patterns, MobX state management (observer, actions, computed, reactions, lifecycle), View-Store boundaries, and TypeScript safety in changed frontend code. NOT for backend patterns, security vulnerabilities, performance bottlenecks, or cross-layer architecture."
|
|
5
5
|
triggers:
|
|
6
|
-
- "review frontend"
|
|
7
6
|
- "frontend review"
|
|
7
|
+
- "component review"
|
|
8
|
+
- "ui review"
|
|
8
9
|
- "review React"
|
|
9
|
-
- "review MobX"
|
|
10
|
-
- "review store"
|
|
11
10
|
- "review components"
|
|
12
|
-
- dispatched by review-orchestrator
|
|
13
11
|
metadata:
|
|
14
12
|
author: "MrCipherSmith"
|
|
15
13
|
version: "1.1.0"
|
|
@@ -8,10 +8,14 @@ description: |
|
|
|
8
8
|
styling tokens, Storybook expectations, and local tooling rules. Dispatched
|
|
9
9
|
by review-orchestrator for --frontend-conventions, --project-conventions,
|
|
10
10
|
--all, or frontend src/**/*.ts(x) changes when local convention docs exist.
|
|
11
|
+
NOT for: generic React and MobX correctness with no local rule behind it
|
|
12
|
+
(review-frontend), what the CSS actually renders (review-layout), or naming and
|
|
13
|
+
readability as a matter of taste (review-style).
|
|
11
14
|
triggers:
|
|
15
|
+
- "frontend conventions"
|
|
16
|
+
- "local frontend rules"
|
|
17
|
+
- "CLAUDE frontend"
|
|
12
18
|
- "review frontend conventions"
|
|
13
|
-
- "review --frontend-conventions"
|
|
14
|
-
- dispatched by review-orchestrator
|
|
15
19
|
metadata:
|
|
16
20
|
author: "MrCipherSmith"
|
|
17
21
|
version: "1.0.0"
|
|
@@ -177,3 +181,33 @@ conditions land under that rubric.
|
|
|
177
181
|
| Naming, story coverage, file placement | `minor` | Correct today; the cost is to the next editor |
|
|
178
182
|
| A convention preference with no named consequence | `info` | Shared laws 1 and 2 |
|
|
179
183
|
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Red Flags
|
|
187
|
+
|
|
188
|
+
| Rationalization | Why it is wrong |
|
|
189
|
+
|----------------|-----------------|
|
|
190
|
+
| "There is no project guide here, but I know what good React looks like." | Then you are running the neutral baseline, and you must say so in the report. A preference with no local rule and no named consequence is `info`, not a convention violation — this lane's authority comes from the project's own documents. |
|
|
191
|
+
| "The guide says one thing but the newer files all do another, so that is the convention." | A pattern repeated in code is a candidate convention, not a decision. Cite the guide and name the divergence; let the team choose which one moves. |
|
|
192
|
+
| "The linter already fails on this, so it is at least `major`." | The machine catches it before merge. A reviewer restating a lint error spends a merge gate on something no human can ship past, which is why the rubric above puts it at `minor`. |
|
|
193
|
+
| "It is one direct `localStorage` call — the wrapper is overkill here." | The wrapper exists because the raw API throws on quota and is absent in some environments. One unguarded call is the class; enumerate the others before deciding it is small. |
|
|
194
|
+
| "This component does not read observables, so it does not need the reactive wrapper." | Check what it reads through props and through the store getters it calls. Lost reactivity is silent, which is why it is rated the same here as in `review-frontend`. |
|
|
195
|
+
| "The inline `style` is dynamic, so the token rule does not reach it." | Only the computed part is dynamic. Colours and spacing inside it still come from the local tokens, and mixing the two is how a theme change stops applying to one surface. |
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## Verification
|
|
200
|
+
|
|
201
|
+
Report done only once all of these hold:
|
|
202
|
+
|
|
203
|
+
- The report names which local convention documents were found and read, or
|
|
204
|
+
states plainly that none exist and only the neutral baseline ran.
|
|
205
|
+
- Every finding cites the local rule it rests on — the guide, the lint config, or
|
|
206
|
+
the baseline section above — and names `file:line`.
|
|
207
|
+
- Every `blocker` and `major` carries `class_scope` with `sites` and an
|
|
208
|
+
`enumeration_method` naming the search that produced them.
|
|
209
|
+
- No finding invents a severity: each lands under **Severity (canonical)** in
|
|
210
|
+
`review-orchestrator/SKILL.md`.
|
|
211
|
+
- The reply is the `REVIEW_RESULT` the Orchestrated Review Contract asks for, or
|
|
212
|
+
`NEEDS_CONTEXT` naming the context that was missing — never a guess in its place.
|
|
213
|
+
|
|
@@ -11,13 +11,11 @@ description: |
|
|
|
11
11
|
(review-performance), clean code style (review-clean-code), or NestJS module structure
|
|
12
12
|
(review-architecture).
|
|
13
13
|
triggers:
|
|
14
|
-
- "review highload"
|
|
15
|
-
- "review scalability"
|
|
16
14
|
- "highload review"
|
|
17
|
-
- "review
|
|
15
|
+
- "concurrency review"
|
|
16
|
+
- "race condition"
|
|
17
|
+
- "review scalability"
|
|
18
18
|
- "review distributed"
|
|
19
|
-
- "review --highload"
|
|
20
|
-
- dispatched by review-orchestrator
|
|
21
19
|
metadata:
|
|
22
20
|
author: "MrCipherSmith"
|
|
23
21
|
version: "1.0.0"
|
|
@@ -12,10 +12,9 @@ description: |
|
|
|
12
12
|
naming and readability (review-style), re-render cost (review-performance), React or
|
|
13
13
|
MobX structure (review-frontend).
|
|
14
14
|
triggers:
|
|
15
|
-
- "review layout"
|
|
16
15
|
- "layout review"
|
|
16
|
+
- "review layout"
|
|
17
17
|
- "does this render correctly"
|
|
18
|
-
- "dispatched by review-orchestrator"
|
|
19
18
|
metadata:
|
|
20
19
|
author: "MrCipherSmith"
|
|
21
20
|
version: "1.0.0"
|
|
@@ -215,3 +214,25 @@ a claim that the class has exactly one member — make it deliberately.
|
|
|
215
214
|
| "The class names look fine." | This lane does not review class names. That is `review-frontend-conventions`. |
|
|
216
215
|
| "I could not run the visual tier, so I reasoned it out." | Then it is `info`, marked unverified. Reasoning does not become measurement by being careful. |
|
|
217
216
|
| "RTL is handled, the component uses logical properties." | Check the gradients, shadows and transforms too. Those are the ones that do not flip. |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Verification
|
|
221
|
+
|
|
222
|
+
Report done only once all of these hold:
|
|
223
|
+
|
|
224
|
+
- Every finding carries a **measurement**: the host width, the element width or
|
|
225
|
+
the offset in pixels, and the command or probe that produced it. An unmeasured
|
|
226
|
+
observation is filed as `info`, marked unverified, and says what would settle it.
|
|
227
|
+
- The measurement was taken at the worst real case — the longest translation in
|
|
228
|
+
the catalog, the narrowest supported host, the state where the sibling is
|
|
229
|
+
absent — not at the convenient one.
|
|
230
|
+
- Every finding names `file:line` on the component that renders the box.
|
|
231
|
+
- Every `blocker` and `major` carries `class_scope` with `sites` and an
|
|
232
|
+
`enumeration_method` naming the search that derived the set of elements sharing
|
|
233
|
+
the sizing shape.
|
|
234
|
+
- No finding invents a severity: each lands under **Severity (canonical)** in
|
|
235
|
+
`review-orchestrator/SKILL.md`.
|
|
236
|
+
- The reply is the `REVIEW_RESULT` the Orchestrated Review Contract asks for, with
|
|
237
|
+
finding ids prefixed `LY-`, or `NEEDS_CONTEXT` naming the context that was
|
|
238
|
+
missing — never a guess in its place.
|
|
@@ -9,12 +9,12 @@ description: |
|
|
|
9
9
|
NOT for: security vulnerabilities, performance profiling, style/naming preferences,
|
|
10
10
|
or architectural pattern concerns — those belong in their respective specialized reviewers.
|
|
11
11
|
triggers:
|
|
12
|
-
- "review
|
|
12
|
+
- "logic review"
|
|
13
|
+
- "bug review"
|
|
14
|
+
- "correctness"
|
|
13
15
|
- "check correctness"
|
|
14
16
|
- "are there any bugs"
|
|
15
17
|
- "check this for bugs"
|
|
16
|
-
- "logic review"
|
|
17
|
-
- "dispatched by review-orchestrator"
|
|
18
18
|
metadata:
|
|
19
19
|
author: "MrCipherSmith"
|
|
20
20
|
version: "1.0.0"
|
|
@@ -1,36 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-orchestrator
|
|
3
|
-
description:
|
|
4
|
-
Use when: a code review is requested and the user does not explicitly name a specialized reviewer.
|
|
5
|
-
Handles "review", "code review", "review PR", "review --frontend", "review --backend",
|
|
6
|
-
"review --architecture", "review --security", "review --performance", "review --style",
|
|
7
|
-
"review --verify", "review --project-conventions", "review --legacy-profiles", "review --all". Routes to specialized reviewers in parallel and
|
|
8
|
-
consolidates findings into one unified report.
|
|
9
|
-
NOT for: running a single specialized reviewer — invoke it directly by name instead.
|
|
3
|
+
description: 'Use when: a code review is requested and the user does not name a specialized reviewer — "review", "code review", "review this PR", "review --all". Dispatches the relevant specialized reviewers in parallel and consolidates their findings into one unified report, and owns the fan-out flags "--all", "--project-conventions" and "--legacy-profiles". NOT for: running a single specialized reviewer — invoke it directly by name instead, which is also how a flag that names one domain reaches its reviewer.'
|
|
10
4
|
triggers:
|
|
11
5
|
- "review"
|
|
12
|
-
- "
|
|
6
|
+
- "ревью"
|
|
7
|
+
- "review code"
|
|
8
|
+
- "full review"
|
|
9
|
+
- "review changes"
|
|
13
10
|
- "review PR"
|
|
14
|
-
- "review --frontend"
|
|
15
|
-
- "review --backend"
|
|
16
|
-
- "review --architecture"
|
|
17
|
-
- "review --security"
|
|
18
|
-
- "review --performance"
|
|
19
|
-
- "review --style"
|
|
20
|
-
- "review --verify"
|
|
21
11
|
- "review --all"
|
|
22
|
-
- "review --clean-code"
|
|
23
|
-
- "review --highload"
|
|
24
12
|
- "review --project-conventions"
|
|
25
|
-
- "review --frontend-conventions"
|
|
26
|
-
- "review --testing-practices"
|
|
27
|
-
- "review --core-boundaries"
|
|
28
|
-
- "review --flow-graph"
|
|
29
13
|
- "review --legacy-profiles"
|
|
30
|
-
- "review --code-ai"
|
|
31
|
-
- "review --learned"
|
|
32
|
-
- "review --code-style"
|
|
33
|
-
- "review --mobx-store"
|
|
34
14
|
metadata:
|
|
35
15
|
author: "MrCipherSmith"
|
|
36
16
|
version: "1.9.0"
|
|
@@ -1163,10 +1143,10 @@ Skipped reviewers:
|
|
|
1163
1143
|
| `--verify` | `review-verifier`, AFTER all others; checks the consolidated findings by running something. Delete-only. |
|
|
1164
1144
|
| (auto) | detected from diff file extensions — see Auto-detection table |
|
|
1165
1145
|
|
|
1166
|
-
Multiple flags may be combined
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1146
|
+
Multiple flags may be combined: `review --backend --security` dispatches `review-logic` + `review-backend` + `review-architecture` + `review-security-code`; `review --frontend --frontend-conventions` dispatches the generic frontend set plus the local frontend conventions reviewer.
|
|
1147
|
+
|
|
1148
|
+
This table applies once this skill is running; reaching it is a separate question. The router strips `--`, so `review --style` is the same phrase as `review-style`'s own `style review` trigger and goes straight there — the same destination this table names, and likewise for `--architecture`, `--security` and `--performance`. Only `--all`, `--project-conventions` and `--legacy-profiles` name this orchestrator, which is why they are its triggers.
|
|
1149
|
+
`--frontend` and `--backend` are the exception: this table fans each out to three reviewers, but a bare `review --frontend` reaches `review-frontend` alone, because `review frontend` and `frontend review` are one phrase to the router and that phrase is the specialist's — two skills may not share a trigger token set (`src/gdskills/catalog-single-source.test.ts`). Ask by name, or use `review --all`, when you want the three-reviewer fan-out; `docs/skills/rejected-skill-changes.md` records the alternatives that were measured and rejected.
|
|
1170
1150
|
|
|
1171
1151
|
---
|
|
1172
1152
|
|
|
@@ -3,12 +3,12 @@ name: review-performance
|
|
|
3
3
|
model_tier: standard
|
|
4
4
|
description: "Use when a performance review is requested, checking for N+1 queries, unnecessary re-renders, memory leaks, missing indexes, large bundle imports, and synchronous blocking in changed code. NOT for security, logic correctness, style, or architecture."
|
|
5
5
|
triggers:
|
|
6
|
-
- "review performance"
|
|
7
6
|
- "performance review"
|
|
7
|
+
- "perf check"
|
|
8
|
+
- "slow"
|
|
8
9
|
- "check for perf issues"
|
|
9
10
|
- "perf review"
|
|
10
11
|
- "check N+1"
|
|
11
|
-
- dispatched by review-orchestrator
|
|
12
12
|
metadata:
|
|
13
13
|
author: "MrCipherSmith"
|
|
14
14
|
version: "1.0.0"
|
|
@@ -235,6 +235,12 @@ boundary is the trigger-and-outcome test.
|
|
|
235
235
|
frequency *is* the trigger shared law 1 asks for.
|
|
236
236
|
2. **Do not flag patterns outside the diff.** Review only changed code. Legacy
|
|
237
237
|
issues outside the diff are `info` at most, with a note to track separately.
|
|
238
|
+
3. **An optimisation with no before/after is an unmeasured claim, and a neutral
|
|
239
|
+
one is a finding.** Ask what was measured and on what workload. No pair at all
|
|
240
|
+
is `minor` — unjustified, not wrong. A neutral pair is `major`, and the fix it
|
|
241
|
+
suggests is a revert: what counts as neutral under noise, and what the attempt
|
|
242
|
+
owes the journal, are `perf-check`'s Rules, not restated here. Writing that
|
|
243
|
+
entry is the author's job, not yours; a revert with no entry is its own `minor`.
|
|
238
244
|
|
|
239
245
|
---
|
|
240
246
|
|
|
@@ -340,11 +346,9 @@ Stop and re-read these rules if you are thinking:
|
|
|
340
346
|
| Rationalization | Why it's wrong |
|
|
341
347
|
|---|---|
|
|
342
348
|
| "This loop iterates over user data, so N+1 is obviously a problem" | State the expected N and query cost; "user data" is not self-evidently large |
|
|
343
|
-
| "I'll flag this as major because it looks slow" | Looking slow is not a hot path; cite the execution context |
|
|
344
349
|
| "Missing useMemo here is a performance issue" | useMemo has overhead; only flag when the computation is measurably expensive or the component re-renders at high frequency |
|
|
345
|
-
| "I'll add a minor finding for every lodash default import" | Correct — but only flag if the library is large and the import is demonstrably not tree-shaken |
|
|
346
350
|
| "The dataset could grow large, so I'll call it a blocker" | "Could grow" = minor or info; known to be large = major or blocker |
|
|
347
|
-
| "
|
|
351
|
+
| "The optimisation measures neutral, but it does no harm — no reason to hold the diff" | The complexity it bought with no measured gain *is* the harm, and it passes review precisely because nothing in it is wrong. Neutral is `revert`, per performance law 3 |
|
|
348
352
|
|
|
349
353
|
---
|
|
350
354
|
|
|
@@ -365,10 +369,6 @@ If provided and the file exists, read the context document before starting the r
|
|
|
365
369
|
|
|
366
370
|
If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
|
|
367
371
|
|
|
368
|
-
|
|
369
372
|
## Orchestrated Review Contract
|
|
370
373
|
|
|
371
374
|
When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `.metaproject/skills/gdskills/review/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
|
|
372
|
-
|
|
373
|
-
---
|
|
374
|
-
|
|
@@ -9,13 +9,14 @@ description: |
|
|
|
9
9
|
NOT for: reviewing code directly — this skill reads human or bot PR feedback and
|
|
10
10
|
makes it actionable. To review code, use the domain review skills.
|
|
11
11
|
triggers:
|
|
12
|
-
- "analyze PR comments"
|
|
13
12
|
- "review PR feedback"
|
|
13
|
+
- "analyze PR comments"
|
|
14
|
+
- "review comments"
|
|
15
|
+
- "fix PR comments"
|
|
14
16
|
- "what did reviewers say"
|
|
15
17
|
- "parse PR #N"
|
|
16
18
|
- "explain PR comments"
|
|
17
19
|
- "PR feedback"
|
|
18
|
-
- "fix PR comments"
|
|
19
20
|
- "review-pr-feedback --fix"
|
|
20
21
|
metadata:
|
|
21
22
|
author: "MrCipherSmith"
|
|
@@ -10,8 +10,7 @@ description: |
|
|
|
10
10
|
triggers:
|
|
11
11
|
- "review regression"
|
|
12
12
|
- "does this change break anything"
|
|
13
|
-
- "blast radius
|
|
14
|
-
- "dispatched by review-orchestrator"
|
|
13
|
+
- "blast radius"
|
|
15
14
|
metadata:
|
|
16
15
|
author: "MrCipherSmith"
|
|
17
16
|
version: "1.0.0"
|
|
@@ -183,3 +182,35 @@ Severity levels are defined once, in `review-orchestrator/SKILL.md` →
|
|
|
183
182
|
**Severity (canonical)**. This reviewer does not restate them: `blocker` is the
|
|
184
183
|
four merge-blocking shapes named there and nothing else, and the `major`/`minor`
|
|
185
184
|
boundary is the trigger-and-outcome test.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Red Flags
|
|
189
|
+
|
|
190
|
+
| Rationalization | Why it is wrong |
|
|
191
|
+
|----------------|-----------------|
|
|
192
|
+
| "This code in the blast radius is badly written, so I will say so." | Scope B asks one question, and it is not that one. The screen rejects it as `outside-set` or as `non-regression-severity`, and the round is spent on a finding nobody reads. |
|
|
193
|
+
| "The caller might break." | Might is not a regression. Name the argument that is no longer passed, the type that narrowed, the branch that went away — or file nothing. Below `major` the screen rejects it by construction. |
|
|
194
|
+
| "I will anchor the finding at the changed line, since that is the cause." | Scope A already reviewed that line. Anchor where the damage lands: the caller a human has to open is the one that breaks. |
|
|
195
|
+
| "The blast radius came back empty, so the change breaks nothing." | An empty radius for a non-code change is recorded as unresolved, not clean. Say the radius could not answer the question — silence that reads as "nothing found" is the failure this lane was built to stop. |
|
|
196
|
+
| "It is a `major` about a dependent and the anchor names the file, so the link to the change is obvious." | `no-link-to-change` is a substring match over your prose, and only a `blocker` is exempt from it. Name the changed file, module or symbol in the finding text or it is dropped before it reaches `findings.json`. |
|
|
197
|
+
| "The set was capped, but I covered the important ones." | The cap is recorded. If files were dropped, say so in the summary; a report that implies a complete sweep over a truncated set is a false claim about coverage. |
|
|
198
|
+
| "The change is only reached through a spawned process / a string-keyed lookup, so the graph must have missed it — I will report it anyway." | Report it, and say the graph could not see the edge. What you must not do is present a runtime path as if the computed set produced it. |
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Verification
|
|
203
|
+
|
|
204
|
+
Report done only once all of these hold:
|
|
205
|
+
|
|
206
|
+
- Every finding is anchored inside the computed set or the changed set, at the
|
|
207
|
+
code that **breaks** rather than the code that changed.
|
|
208
|
+
- Every finding is `major` or above, and every `major` names the changed file,
|
|
209
|
+
module or symbol whose behaviour moved — the anchor alone does not carry it.
|
|
210
|
+
- Every finding carries `class_scope` whose `sites` are the callers that break and
|
|
211
|
+
whose `enumeration_method` is the walk over the blast-radius set that produced
|
|
212
|
+
them.
|
|
213
|
+
- The summary states whether the cap dropped files, and whether the radius could
|
|
214
|
+
answer the question at all for the shape of this change.
|
|
215
|
+
- Nothing that is merely an observation about pre-existing code is filed here; it
|
|
216
|
+
is either raised under scope A or not at all.
|
|
@@ -3,12 +3,14 @@ name: review-security-code
|
|
|
3
3
|
model_tier: standard
|
|
4
4
|
description: "Use when a code-level security review is requested, checking for injection vulnerabilities, auth gaps, insecure cryptography, secrets, and OWASP Top 10 patterns in changed code. NOT for infrastructure, deployment, or dependency audits."
|
|
5
5
|
triggers:
|
|
6
|
-
- "review security"
|
|
7
6
|
- "security review"
|
|
7
|
+
- "проверь безопасность"
|
|
8
|
+
- "безопасность кода"
|
|
9
|
+
- "secure code"
|
|
10
|
+
- "vulnerability"
|
|
8
11
|
- "check for vulnerabilities"
|
|
9
12
|
- "security check"
|
|
10
13
|
- "OWASP review"
|
|
11
|
-
- dispatched by review-orchestrator
|
|
12
14
|
metadata:
|
|
13
15
|
author: "MrCipherSmith"
|
|
14
16
|
version: "1.0.0"
|
|
@@ -8,11 +8,11 @@ description: |
|
|
|
8
8
|
NOT for: logic bugs, architectural violations, security vulnerabilities, performance
|
|
9
9
|
anti-patterns, or any finding that could cause a functional regression.
|
|
10
10
|
triggers:
|
|
11
|
-
- "review style"
|
|
12
11
|
- "style review"
|
|
12
|
+
- "readability"
|
|
13
|
+
- "clean up"
|
|
13
14
|
- "check naming"
|
|
14
15
|
- "check readability"
|
|
15
|
-
- "review --style"
|
|
16
16
|
metadata:
|
|
17
17
|
author: "MrCipherSmith"
|
|
18
18
|
version: "1.0.0"
|
|
@@ -10,11 +10,15 @@ description: |
|
|
|
10
10
|
cannot fail is found by executing it rather than by reading it.
|
|
11
11
|
Dispatched by review-orchestrator for --testing-practices,
|
|
12
12
|
--project-conventions, --all, or changed test/e2e/story files.
|
|
13
|
+
NOT for: the correctness of the production code a suite covers (review-logic),
|
|
14
|
+
or naming and readability inside a test with no effect on what it pins
|
|
15
|
+
(review-style).
|
|
13
16
|
triggers:
|
|
17
|
+
- "test review"
|
|
18
|
+
- "testing practices"
|
|
19
|
+
- "coverage quality"
|
|
14
20
|
- "review tests"
|
|
15
21
|
- "review testing practices"
|
|
16
|
-
- "review --testing-practices"
|
|
17
|
-
- dispatched by review-orchestrator
|
|
18
22
|
metadata:
|
|
19
23
|
author: "MrCipherSmith"
|
|
20
24
|
version: "1.1.0"
|
|
@@ -279,3 +283,37 @@ the unpinned code do the wrong thing**, that is a separate finding at the severi
|
|
|
279
283
|
its own outcome earns — usually `major`. The coverage gap and the defect are two
|
|
280
284
|
findings, not one, and conflating them loses whichever the adjudicator disbelieves.
|
|
281
285
|
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Red Flags
|
|
289
|
+
|
|
290
|
+
| Rationalization | Why it is wrong |
|
|
291
|
+
|----------------|-----------------|
|
|
292
|
+
| "The suite is green, so the tests pin the behaviour." | Green is the state before the mutation pass, not its result. Delete the gate, run the nearest suite, and report what happened — that is the one question this reviewer exists to answer. |
|
|
293
|
+
| "I could not run the suite, so I worked out what the mutation would do." | A predicted mutation is `info` at best and this lane has no use for one. Say which command you ran, what stopped it, and skip the pass — do not report a result you did not observe. |
|
|
294
|
+
| "I only published the mutations that survived; the rest were noise." | The reds are what makes the greens mean something. A table of survivors alone reads as cherry-picking and will be discounted whole. |
|
|
295
|
+
| "The fixture is named `drift-only`, so it covers the drift case." | The name is the claim under review. Open the producer and compare every field, not only the one the test pins; a fixture that carries another scenario's shape is coverage that lies. |
|
|
296
|
+
| "Mocking the API module is simpler than standing up the network boundary." | It also deletes the layer where the bug lives — serialisation, status handling, the error path. Simpler is the reason the convention exists to overrule. |
|
|
297
|
+
| "This test is flaky, that is a `blocker`." | Flake wastes time; it does not ship a defect. `major`. The one `blocker` in this lane is a test that cannot fail while the behaviour it names is broken. |
|
|
298
|
+
| "I mutated more gates than my budget allowed, but I got through most of them." | Say how many you did not reach. A stated cap is a result; silence reads as a complete sweep and the next round inherits the gap without knowing it. |
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
## Verification
|
|
303
|
+
|
|
304
|
+
Report done only once all of these hold:
|
|
305
|
+
|
|
306
|
+
- The mutation table is published in full, survivors and casualties both, or the
|
|
307
|
+
report says which command failed and that the pass was skipped.
|
|
308
|
+
- The report states the cap: how many added or previously-requested gates were
|
|
309
|
+
mutated and how many were not reached.
|
|
310
|
+
- Every finding names `file:line` and the evidence that settles it — the mutation
|
|
311
|
+
and its result, the producer line, or the selector that names the branch.
|
|
312
|
+
- Every `blocker` and `major` carries `class_scope` with `sites` and an
|
|
313
|
+
`enumeration_method` naming the search that produced them.
|
|
314
|
+
- No finding invents a severity: each lands under **Severity (canonical)** in
|
|
315
|
+
`review-orchestrator/SKILL.md`, and a coverage gap is filed separately from any
|
|
316
|
+
defect it exposes.
|
|
317
|
+
- The reply is the `REVIEW_RESULT` the Orchestrated Review Contract asks for, or
|
|
318
|
+
`NEEDS_CONTEXT` naming the context that was missing — never a guess in its place.
|
|
319
|
+
|