@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
|
@@ -131,7 +131,7 @@ Three fields, three different jobs, and mixing them is the recorded failure mode
|
|
|
131
131
|
somewhere else and will move on; without the hash, a reviewer built from last
|
|
132
132
|
month's version reads as current forever, and nobody finds out until its findings
|
|
133
133
|
disagree with the standard it claims to encode. With it,
|
|
134
|
-
`keryx review reviewers`
|
|
134
|
+
`keryx review reviewers` prints that reviewer's row as `- <name> (<origin> — changed)` the moment the file differs.
|
|
135
135
|
|
|
136
136
|
Quote the path if it starts with `~` and you want it stored that way; an
|
|
137
137
|
unquoted `~` is expanded by the shell before keryx sees it. Either is fine —
|
|
@@ -192,8 +192,8 @@ keryx review reviewers
|
|
|
192
192
|
|
|
193
193
|
The second is the one that matters: it is the same call
|
|
194
194
|
`review-orchestrator` makes, so its output is proof the reviewer will be
|
|
195
|
-
dispatched rather than a hope. Check the row
|
|
196
|
-
`
|
|
195
|
+
dispatched rather than a hope. Check the row reads `- <reviewer-name> (<origin> — clean)` — `changed` means the
|
|
196
|
+
source moved, `missing` that it no longer resolves, `no recorded origin` that the reviewer was created without `--origin`.
|
|
197
197
|
|
|
198
198
|
Then say, in your reply, which of the three piles from Step 1 you kept, which you
|
|
199
199
|
dropped, and what you could not verify against this project.
|
|
@@ -216,8 +216,8 @@ dropped, and what you could not verify against this project.
|
|
|
216
216
|
|
|
217
217
|
## Refreshing a reviewer whose source moved on
|
|
218
218
|
|
|
219
|
-
|
|
220
|
-
from what was imported. It does **not** mean the reviewer is wrong.
|
|
219
|
+
A row of `- <name> (<origin> — changed)` from `keryx review reviewers` means the
|
|
220
|
+
source file differs from what was imported. It does **not** mean the reviewer is wrong.
|
|
221
221
|
|
|
222
222
|
Re-read the source, diff it against what the skill encodes, and then decide per
|
|
223
223
|
change: fold it in, or record in the skill why this project deliberately differs.
|
|
@@ -241,3 +241,40 @@ undocumented is drift that will be silently "fixed" by whoever refreshes next.
|
|
|
241
241
|
| Decide which reviewers a round dispatches | NO | `review-orchestrator` |
|
|
242
242
|
| Import a tree of overlay reviewers | YES — `keryx skills import --from <dir> --module review` (`keryx review import` alias) | — |
|
|
243
243
|
| Import a non-review SKILL.md / GitHub URL | NO | `entity-skill-creator` / `keryx skills import` |
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Red Flags
|
|
248
|
+
|
|
249
|
+
| Rationalization | Why it is wrong |
|
|
250
|
+
|----------------|-----------------|
|
|
251
|
+
| "The source's voice is what makes it a good standard — stripping it loses the edge." | A reviewer distilled from someone's tone reviews tone. Step 4 drops the persona pile whole and keeps the method with its reason beside it; a reason transplants into a codebase the author never saw, and an assertion does not. |
|
|
252
|
+
| "I know where the source file lives, so `--origin` adds nothing." | Without the recorded hash, a reviewer built from last month's version of that file reads as current forever, and nobody finds out until its findings disagree with the standard it claims to encode. `drift: changed` is the whole point. |
|
|
253
|
+
| "The target should say what the reviewer is for, so a sentence is clearer." | The target is a routing key that `keryx skills route` matches queries against. A sentence there produces a skill that matches nothing and verifies as permanently stale. The prose belongs in `--note`. |
|
|
254
|
+
| "The source has a clear severity scale, so I will carry it over." | Ten private rubrics feeding one sorted report produce a ranking that means ten things at once. Point at **Severity (canonical)** and add one table saying where this reviewer's recurring conditions land under it. |
|
|
255
|
+
| "The files are written and the frontmatter is valid, so the reviewer is wired." | Creating files is not registration, and registration is not discovery. Until `keryx review reviewers` prints the name, the orchestrator will never dispatch it. |
|
|
256
|
+
| "The source's conventions are sensible, so they will hold in this project too." | They are true of the source's own codebase until verified here. Keep a convention only after checking it against this project, and say in your reply which ones you could not check. |
|
|
257
|
+
| "The row came back `— changed`, so the reviewer is wrong and I will overwrite it." | It means the source moved, not that the reviewer is wrong. Diff the two and decide per change: fold it in, or write down why this project deliberately differs. An undocumented divergence is drift the next refresh silently "fixes". |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Verification
|
|
262
|
+
|
|
263
|
+
Report done only once all of these hold:
|
|
264
|
+
|
|
265
|
+
- `keryx skills verify review/<reviewer-name>` passes.
|
|
266
|
+
- `keryx review reviewers` lists the reviewer as `- <reviewer-name> (<origin> — clean)` — that literal row, not a `drift:` field, which the command never prints. This is the
|
|
267
|
+
same call `review-orchestrator` makes, so its output — not the presence of the
|
|
268
|
+
files — is what proves the reviewer will be dispatched.
|
|
269
|
+
- The `SKILL.md` carries all six required parts from Step 3: Scope naming the
|
|
270
|
+
neighbouring reviewers it excludes, a Checklist of performable checks, a
|
|
271
|
+
pointer to the canonical severity rubric with no rubric of its own, the three
|
|
272
|
+
shared laws verbatim, the class-scope contract, and the Orchestrated Review
|
|
273
|
+
Contract with its own finding-id prefix.
|
|
274
|
+
- `--origin` was passed whenever a source file exists, and the recorded path is
|
|
275
|
+
the one a human would read later.
|
|
276
|
+
- Any method that only works when a command is run — a mutation, a measurement, a
|
|
277
|
+
probe — is stated as an iron law, together with what the finding is worth
|
|
278
|
+
without it.
|
|
279
|
+
- The reply says which of Step 1's three piles were kept, which were dropped, and
|
|
280
|
+
what could not be verified against this project.
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: code-verifier
|
|
3
3
|
model_tier: light
|
|
4
|
-
description: "Use when running a full quality gate after implementation — lint, type-check, tests, and import validation. Mandatory step in job-orchestrator after task-implementer and after fix iterations. Use standalone when you need a structured verification report."
|
|
4
|
+
description: "Use when running a full quality gate after implementation — lint, type-check, tests, and import validation. Mandatory step in job-orchestrator after task-implementer and after fix iterations. Use standalone when you need a structured verification report. NOT for: fixing what the gate reports — this skill is read-only (use task-implementer)."
|
|
5
5
|
triggers:
|
|
6
|
+
- "verify code"
|
|
7
|
+
- "run checks"
|
|
8
|
+
- "quality gate"
|
|
6
9
|
- "Run verification"
|
|
7
|
-
- "Quality gate"
|
|
8
10
|
- "Check code quality"
|
|
9
11
|
- "Run lint and tests"
|
|
10
12
|
- "Verify implementation"
|
|
11
|
-
- "Run checks"
|
|
12
13
|
metadata:
|
|
13
14
|
author: "MrCipherSmith"
|
|
14
15
|
version: "1.0.0"
|
|
@@ -328,3 +329,18 @@ code-verifier:
|
|
|
328
329
|
3. **Scope to changed files** by default — full scans are slow and produce noise.
|
|
329
330
|
4. **Be specific** in findings — include file, line, rule, message. Vague "lint failed" is not actionable.
|
|
330
331
|
5. Return `VERIFICATION_RESULT` as the **final message** to the orchestrator.
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Red Flags
|
|
336
|
+
|
|
337
|
+
Stop and re-read this skill if you are thinking:
|
|
338
|
+
|
|
339
|
+
| Rationalization | Rebuttal |
|
|
340
|
+
|---|---|
|
|
341
|
+
| "Lint already failed, so running the type-check and tests adds nothing." | Rule 1: run ALL checks. The orchestrator sizes one fix wave from the full picture. Aborting early means it fixes lint, re-dispatches, then discovers the type errors — one wave per check instead of one wave. |
|
|
342
|
+
| "This type error is a one-line fix — faster to correct it than to report it." | Rule 2: this gate is read-only. A verifier that edits has verified its own edit, and the diff the reviewer sees no longer matches what the implementer wrote. Report it; let the fix come back through the loop. |
|
|
343
|
+
| "The lint binary isn't installed, so there is nothing wrong — the gate passes." | A check that did not run is `status: skipped`, never `pass`. `gate: PASS` on an empty check set is a false all-clear, and zero checks available is `STATUS: BLOCKED` by the Error Handling table. |
|
|
344
|
+
| "`gate: FAIL`, so my STATUS must be BLOCKED." | STATUS reports whether THIS SKILL ran, not what it found. A complete report of a failing gate is `STATUS: DONE`. `BLOCKED` tells the orchestrator verification never happened and it must resolve tooling — a different, wrong branch. |
|
|
345
|
+
| "That failing test is unrelated to the diff, so I'll record it as skipped." | `skipped` means it did not run. A failure you judged out of scope is still `failed`, with a finding. Deciding what is in scope is the orchestrator's call, and it cannot make it on a result you rewrote. |
|
|
346
|
+
| "I hit `max_findings_reported`, so the remaining findings can go unmentioned." | The cap limits the list, not the count. Report the true totals in `checks:` and say in `summary` that the finding list is truncated, or the orchestrator plans a fix wave against a number that is quietly too small. |
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: context-collector
|
|
3
|
-
description: "Use when a job needs a unified context document — gathering docs, libraries, and references for sub-agents before execution."
|
|
3
|
+
description: "Use when a job needs a unified context document — gathering docs, libraries, and references for sub-agents before execution. NOT for: deciding what to build from that context (use interview, or job-orchestrator for the whole pipeline)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
6
|
-
- "
|
|
7
|
-
- "
|
|
5
|
+
- "collect context"
|
|
6
|
+
- "gather context"
|
|
7
|
+
- "build context"
|
|
8
8
|
- "Update context"
|
|
9
9
|
- "Refresh context"
|
|
10
10
|
- "Context for job"
|
|
@@ -653,3 +653,19 @@ Execute update flow and return a CONTEXT_RESULT block.
|
|
|
653
653
|
10. **DO NOT** fetch external docs for standard well-known patterns already covered by project rules.
|
|
654
654
|
11. **DO NOT** modify any project files — this is a read + research + write-to-jobs skill only.
|
|
655
655
|
12. **DO NOT** skip the metadata block and update log — they are mandatory for version tracking.
|
|
656
|
+
|
|
657
|
+
---
|
|
658
|
+
|
|
659
|
+
## Red Flags
|
|
660
|
+
|
|
661
|
+
Stop and re-read this skill if you are thinking:
|
|
662
|
+
|
|
663
|
+
| Rationalization | Rebuttal |
|
|
664
|
+
|---|---|
|
|
665
|
+
| "More context is safer, so I'll include everything I found." | Rule 9 caps `context.md` at ~500 lines, and 3.4 admits only HIGH and MEDIUM findings. A 1200-line context is read by no sub-agent; the three paragraphs that mattered are now buried, which is the same as not having collected them. |
|
|
666
|
+
| "I know this library well, so I can write the API section from memory." | Phase 3 fetches the docs for the version the project actually pins. A remembered signature is the single most expensive thing in this document: every sub-agent downstream implements against it without checking. |
|
|
667
|
+
| "The task mentions React, so I should fetch React documentation." | Rule 10: no external fetch for well-known patterns already covered by project rules. External research is for the specific API, version gotcha or convention this task turns on — not for a topic overview. |
|
|
668
|
+
| "This section of the existing context looks stale, so I'll drop it while updating." | 4.3 and Rule 4: preserve existing sections unless they are explicitly outdated. "Looks stale" from inside a scoped update usually means "I did not re-research it" — removing it silently deletes a decision another agent is relying on. |
|
|
669
|
+
| "I fixed the small inconsistency I noticed in the source file while reading it." | Rule 11: this skill writes only into the job folder. An edit made during collection lands in a diff nobody attributed to a task, and the implementer inherits it without knowing. |
|
|
670
|
+
| "The context is written, so I can return — job-documenter can be called later." | Phase 5 is part of the skill. A `context.md` that was never persisted through `job-documenter` is absent from the README index, and the next phase resolves the path to nothing. |
|
|
671
|
+
| "The content changed only slightly, so bumping the Version and update log is overkill." | Rule 12 and Rule 3: version, timestamp and update log are mandatory. Without them, two agents reading different revisions have no way to tell which one they have. |
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: feature-analyzer
|
|
3
|
-
description: "Use when analyzing feature branch changes across repos, planning implementation, or understanding backend→frontend contracts. Requires the source repository, target repository, and branch as confirmed input; the skill's PRE-STEP validates them before any analysis."
|
|
3
|
+
description: "Use when analyzing feature branch changes across repos, planning implementation, or understanding backend→frontend contracts. Requires the source repository, target repository, and branch as confirmed input; the skill's PRE-STEP validates them before any analysis. NOT for: breaking an issue into implementable tasks (use issue-analyzer)."
|
|
4
4
|
triggers:
|
|
5
|
+
- "analyze feature"
|
|
6
|
+
- "study module"
|
|
7
|
+
- "investigate branch"
|
|
5
8
|
- "Analyze branch"
|
|
6
9
|
- "Analyze changes"
|
|
7
10
|
- "Analyze commit"
|
|
@@ -409,15 +412,35 @@ Follow `documentation-management.mdc`: update `<DOCS_ROOT>/readme.md`, add entry
|
|
|
409
412
|
|
|
410
413
|
---
|
|
411
414
|
|
|
412
|
-
##
|
|
415
|
+
## Red Flags
|
|
413
416
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
-
|
|
419
|
-
|
|
420
|
-
|
|
417
|
+
Stop and re-read this skill if you are thinking:
|
|
418
|
+
|
|
419
|
+
| Rationalization | Rebuttal |
|
|
420
|
+
|---|---|
|
|
421
|
+
| "The user named a branch, so I have enough to start." | The PRE-STEP needs source repo, target repo and branch, each confirmed. A branch without its repo pair is how a cross-repo analysis quietly becomes source-only and reports no frontend impact because it never looked at the frontend. |
|
|
422
|
+
| "`git diff` came back empty, so the branch changed nothing." | Step 12 names the three usual causes: the wrong BASE_SHA, changes that are staged or untracked, and the wrong branch checked out. Report "no changes" only after `--cached`, `git status` and the branching point all agree. |
|
|
423
|
+
| "I read the diff hunks, so I understand the change." | A hunk shows the lines that moved, not the contract they belong to. The Deep Dive Protocol reads P0 files whole because the breaking part of a change is usually the caller the diff never touched. |
|
|
424
|
+
| "The finding is clear from the code I just read — the line reference can wait." | Step 11 makes a `file:L123` citation mandatory for every claim. An uncited claim cannot be checked by the developer acting on it, and a report of uncited claims is indistinguishable from a plausible guess. |
|
|
425
|
+
| "There are 6 P0 files but the picture is obvious, so I'll skip the intermediate review." | Rule 5 forbids skipping it above 3 P0 files. The intermediate review is the only point where the user can correct the scope before a full report is written against the wrong one. |
|
|
426
|
+
| "An analysis for this feature already exists, so I'll write mine into a new folder." | Step 10 requires updating `report.md` and `implementation-plan.md` in place. Parallel copies mean the next reader picks one, and nothing marks which is current. |
|
|
427
|
+
| "GitHub MCP is unavailable, so issue and PR context is out of reach." | Step 12's fallback is git history plus a notice to the user — not silence. An analysis that drops the issue context without saying so reads as if the issue held nothing relevant. |
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## Exit Criteria
|
|
432
|
+
|
|
433
|
+
Do not report the analysis as complete until all of these hold:
|
|
434
|
+
|
|
435
|
+
- The PRE-STEP inputs (source repo + branch, target repo + branch, mode) were confirmed by the user, not inferred — and the report states them.
|
|
436
|
+
- Mode A: `BASE_SHA` is recorded in the report. Mode B: the report says explicitly that it describes current state, not a diff.
|
|
437
|
+
- Every P0 file was read in full and appears in the analysed-files list; the P0/P1/P2 counts in `## Analysis Metrics` match that list.
|
|
438
|
+
- `report.md` contains at least 3 code examples, and every claim carries a `file:line` reference.
|
|
439
|
+
- API contracts and breaking changes each have a section — a "none found" is written out with what was checked to reach it.
|
|
440
|
+
- `implementation-plan.md` exists and every step names a file or module to touch; no step reads "investigate".
|
|
441
|
+
- `## Analysis Metrics` includes the computed complexity score and its inputs.
|
|
442
|
+
- The user answered the intermediate review prompt (mandatory whenever P0 files > 3), and any correction they made is reflected in the final report.
|
|
443
|
+
- Step 15 post-analysis is done: `<DOCS_ROOT>/readme.md` and the analysis index name this analysis.
|
|
421
444
|
|
|
422
445
|
---
|
|
423
446
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: feature-dev
|
|
3
|
-
description: "Use when taking a feature from idea or GitHub issue all the way to a merge-ready PR in one guided workflow."
|
|
3
|
+
description: "Use when taking a feature from idea or GitHub issue all the way to a merge-ready PR in one guided workflow. NOT for: splitting an issue into tasks run by parallel sub-agents (use job-orchestrator)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
6
|
-
- "
|
|
5
|
+
- "feature dev"
|
|
6
|
+
- "develop feature"
|
|
7
|
+
- "guided feature workflow"
|
|
7
8
|
- "Build feature"
|
|
8
9
|
- "Implement feature"
|
|
9
10
|
- "Feature from scratch"
|
|
@@ -89,7 +90,7 @@ End-to-end feature development workflow from idea to merge-ready PR.
|
|
|
89
90
|
1. Implement changes file by file, following the plan from Phase 2
|
|
90
91
|
2. Goal: make the failing tests from Phase 4 GREEN
|
|
91
92
|
3. Follow existing code patterns and loaded rules
|
|
92
|
-
4. After each file group, run quick inline check: `
|
|
93
|
+
4. After each file group, run a quick inline check: `keryx health run --changed --source typescript` (type errors only, over the changed files — `src/health/sources/typescript.ts` resolves the real invocation, so this is never a hardcoded `npx tsc`; on a project with no keryx health config, fall back to its own configured type-check command)
|
|
93
94
|
5. Commit with conventional message after each logical chunk
|
|
94
95
|
|
|
95
96
|
### Phase 6: VERIFY (code-verifier gate)
|
|
@@ -161,3 +162,16 @@ At each phase transition, report progress:
|
|
|
161
162
|
| "I understand the requirements, confirmation is just a formality" | The confirmation step exists to catch the gap between what you understood and what was meant |
|
|
162
163
|
|
|
163
164
|
**The three constraints that hold the pipeline together:** no implementation before the spec is written and confirmed; no implementation code before tests-creator has generated failing stubs; no delivery without a passing code-verifier gate and a Change Report.
|
|
165
|
+
|
|
166
|
+
## Verification
|
|
167
|
+
|
|
168
|
+
Do not report the feature as delivered until all of these hold:
|
|
169
|
+
|
|
170
|
+
- The user explicitly confirmed the Phase 1 spec and the Phase 2 design — a confirmation you can quote, not one you inferred from silence.
|
|
171
|
+
- Phase 4's test stubs were observed FAILING before any implementation code was written, and the same tests pass now. Tests that were green the moment they were written tested nothing.
|
|
172
|
+
- Every acceptance criterion in the Phase 1 spec maps to at least one test, and each is checked off in the Change Report.
|
|
173
|
+
- `code-verifier` was re-run after the last fix and its final result is `gate: PASS` (or `PASS_WITH_WARNINGS` with the warnings named in the Change Report). A gate result from before the last edit does not count.
|
|
174
|
+
- `git diff <base>...HEAD` shows no TODOs, debug logging, or hardcoded values introduced by this work.
|
|
175
|
+
- Commits are atomic — one logical chunk each — and the branch is pushed.
|
|
176
|
+
- The PR exists with the issue link, acceptance-criteria checklist, test plan and gate result; if no PR was created, the Change Report says why.
|
|
177
|
+
- The Change Report was printed to the user and names files changed, test count and result, gate result, checked-off criteria, and the commit list.
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flow-orchestrator
|
|
3
|
-
description: "Use when Task Manager is enabled and a non-trivial feature, issue, or story should be driven through keryx flow from initialization to a user-selected completion, verified handoff, or open state."
|
|
3
|
+
description: "Use when Task Manager is enabled and a non-trivial feature, issue, or story should be driven through keryx flow from initialization to a user-selected completion, verified handoff, or open state. NOT for: the same pipeline without Task Manager state (use job-orchestrator)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "создай flow"
|
|
6
5
|
- "создай фло"
|
|
7
|
-
- "
|
|
8
|
-
- "implement with flow"
|
|
6
|
+
- "create flow"
|
|
9
7
|
- "issue to flow"
|
|
8
|
+
- "managed implementation"
|
|
10
9
|
- "task manager orchestration"
|
|
10
|
+
- "создай flow"
|
|
11
|
+
- "заведи стори"
|
|
12
|
+
- "implement with flow"
|
|
11
13
|
- "flow orchestration"
|
|
12
|
-
- "managed implementation"
|
|
13
14
|
metadata:
|
|
14
15
|
author: "MrCipherSmith"
|
|
15
16
|
version: "1.4.0"
|
|
@@ -678,3 +679,18 @@ keryx skills contracts validate <file> --schema subagent-result
|
|
|
678
679
|
completion.
|
|
679
680
|
- Do not read broad source trees when gdgraph/gdctx/wiki/memory can first
|
|
680
681
|
narrow context.
|
|
682
|
+
|
|
683
|
+
## Red Flags
|
|
684
|
+
|
|
685
|
+
Stop and re-read this skill if you are thinking:
|
|
686
|
+
|
|
687
|
+
| Rationalization | Rebuttal |
|
|
688
|
+
|---|---|
|
|
689
|
+
| "The worker's reply reads like it finished, so the task is done." | The STATUS protocol says read the `STATUS:` line first and never infer the outcome from prose. A reply without one is `NEEDS_CONTEXT` — a confident-sounding summary is exactly what an unusable result looks like. |
|
|
690
|
+
| "`DONE_WITH_CONCERNS` is still done, so I can move on." | Every concern goes into `journal.md` and gets an explicit continue-or-fix decision before `flow task done`. Concerns dropped at the task boundary are invisible by the completion report, which is where they would have mattered. |
|
|
691
|
+
| "The acceptance criterion no longer matches what we built, so I'll reword it." | Frozen AC changes only through `keryx flow ac update <id> --reason "<why>"`. Rewriting a criterion to fit the implementation makes the flow pass a gate it actually failed, and leaves no record that it moved. |
|
|
692
|
+
| "`flow.json` is just a file — editing one field is faster than the CLI." | `flow.json`, status transitions, task status and attempt counts are CLI-owned. A hand-written field desynchronises the durable state from the flow's own history, and the CLI's next gate check reads yours, not reality. |
|
|
693
|
+
| "Tests pass and the review is clean, so I'll open the PR and complete the flow." | Phase 4 stops and asks the user how the flow should end; not every flow wants a PR. And completion requires a confirmed merge into the base branch captured at creation — not a green local run. |
|
|
694
|
+
| "The worker returned BLOCKED twice — faster if I implement this task myself." | The implementer never self-accepts and the orchestrator never implements. Block the flow, escalate one concise question, then unblock and re-dispatch. Doing the work here erases the boundary the whole flow model rests on. |
|
|
695
|
+
| "Verification is described in the plan, so it will happen." | A verification step in the plan is a task, not a sentence. If it is not a task with a status, nothing records whether it ran, and the flow reaches `implemented` with an unrun gate. |
|
|
696
|
+
| "The review fan-out is cheap, so the budget check can wait." | `keryx review budget --spent … --outstanding …` gates the fan-out, and `review-orchestrator` nests under this skill where keryx cannot see the in-flight subagents. Skipping the check means the cap bounds nothing. |
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: issue-analyzer
|
|
3
|
-
description: "Use when decomposing a GitHub issue into atomic tasks for AI implementation, planning task breakdown, or preparing work for task-implementer agents."
|
|
3
|
+
description: "Use when decomposing a GitHub issue into atomic tasks for AI implementation, planning task breakdown, or preparing work for task-implementer agents. NOT for: writing the code for those tasks (use task-implementer)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
6
|
-
- "
|
|
7
|
-
- "
|
|
5
|
+
- "analyze issue"
|
|
6
|
+
- "decompose issue"
|
|
7
|
+
- "break down issue"
|
|
8
8
|
- "Issue to tasks"
|
|
9
9
|
- "Plan issue implementation"
|
|
10
10
|
metadata:
|
|
@@ -62,7 +62,7 @@ Fill in the template below and launch via Task tool.
|
|
|
62
62
|
You are running the issue-analyzer skill in AUTONOMOUS MODE.
|
|
63
63
|
DO NOT ask the user any questions. Execute the full workflow end-to-end.
|
|
64
64
|
|
|
65
|
-
Load the skill: issue-analyzer (from skills/issue-analyzer/SKILL.md)
|
|
65
|
+
Load the skill: issue-analyzer (from skills/gdskills/orchestration/issue-analyzer/SKILL.md)
|
|
66
66
|
|
|
67
67
|
═══════════════════════════════════════════════
|
|
68
68
|
INPUT PARAMETERS
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: job-documenter
|
|
3
3
|
model_tier: light
|
|
4
|
-
description: "Use when a job folder needs to be initialized, or analysis/report/review documents need to be created or updated in jobs/."
|
|
4
|
+
description: "Use when a job folder needs to be initialized, or analysis/report/review documents need to be created or updated in jobs/. NOT for: producing the analysis or report content itself — this skill persists what the orchestrator hands it (use job-orchestrator)."
|
|
5
5
|
triggers:
|
|
6
|
-
- "
|
|
6
|
+
- "job docs"
|
|
7
|
+
- "document job"
|
|
8
|
+
- "persistent job documentation"
|
|
7
9
|
- "Initialize job folder"
|
|
8
10
|
- "Save job report"
|
|
9
11
|
- "Add job document"
|
|
@@ -372,3 +374,41 @@ Execute the action and return a DOCUMENTER_RESULT block.
|
|
|
372
374
|
8. **DO NOT** delete or overwrite existing documents without explicit instruction.
|
|
373
375
|
9. **DO NOT** modify files in other job folders.
|
|
374
376
|
10. **DO NOT** interact with the user directly — all communication goes through the orchestrator.
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Red Flags
|
|
381
|
+
|
|
382
|
+
Stop and re-read this skill if you are thinking:
|
|
383
|
+
|
|
384
|
+
| Rationalization | Rebuttal |
|
|
385
|
+
|---|---|
|
|
386
|
+
| "The write call raised no error, so the file is there." | Rule 3 requires verifying existence after every write. A missing parent directory, a `JOBS_ROOT` that does not exist, or a path assembled from a truncated job name all fail in ways that look like success until the orchestrator reads back nothing. |
|
|
387
|
+
| "`JOBS_ROOT` wasn't in the dispatch, so `.metaproject/jobs/` is the obvious default." | The JOBS_ROOT note forbids resolving it yourself, with no fallback. A missing `JOBS_ROOT` is a `status: error` result — writing to a guessed root scatters a job's documents where the orchestrator will never look for them. |
|
|
388
|
+
| "The README table already lists this document, so the directory must match it." | The README is what you wrote; the directory is what exists. `finalize` cross-checks every table entry against a real listing precisely because those two drift, and the drift is invisible from either side alone. |
|
|
389
|
+
| "A document with this name already exists, so the new content replaces it." | Rule 8: no overwrite without explicit instruction. The existing file is a previous phase's record; the orchestrator asked to ADD a document, not to erase the trail it is keeping. |
|
|
390
|
+
| "The file operation failed, so I should stop and surface the exception." | Rule: never throw. The orchestrator has a decision to make (retry, continue, abort) and can only make it from a structured `DOCUMENTER_RESULT` with `status: error` and `error_details`. A crash gives it nothing to route on. |
|
|
391
|
+
| "The payload the orchestrator sent is thin — I'll ask the user what to put in the report." | Rule 10: no direct user contact. Persist exactly what was handed over; an incomplete payload is reported as a discrepancy, not filled in from a conversation this skill is not part of. |
|
|
392
|
+
| "The job is basically finished, so I'll set the README status to completed." | Only the `finalize` action, with an explicit `FINAL_STATUS`, may set it. Marking a job complete from inside `add-document` reports an outcome the orchestrator has not reached. |
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
## Verification
|
|
397
|
+
|
|
398
|
+
Report `STATUS: <TOKEN>` as the first line of the response, followed by the `DOCUMENTER_RESULT` block:
|
|
399
|
+
|
|
400
|
+
```
|
|
401
|
+
STATUS: DONE — the action completed and every written path was verified to exist
|
|
402
|
+
STATUS: DONE_WITH_CONCERNS — the action completed, but the README/directory cross-check found discrepancies
|
|
403
|
+
STATUS: BLOCKED — cannot proceed: JOBS_ROOT missing from the dispatch, job folder absent for a non-init action
|
|
404
|
+
STATUS: FAILED — a file operation failed and could not be recovered; error_details says what
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
Before reporting `DONE`, all of these must hold:
|
|
408
|
+
|
|
409
|
+
- Every path named in `DOCUMENTER_RESULT` was listed or read back after writing, not inferred from the write succeeding.
|
|
410
|
+
- Every document written carries its metadata block and an ISO 8601 UTC timestamp.
|
|
411
|
+
- `README.md`'s Documents tables and the real contents of `man/` and `ai/` agree entry for entry; any mismatch is reported in `verification`, never quietly corrected in only one of the two.
|
|
412
|
+
- No file was created, modified or deleted outside `<JOBS_ROOT>/<JOB_NAME>/`.
|
|
413
|
+
- The `DOCUMENTER_RESULT` block names the action actually performed and has every field that action's contract defines; `status: error` always carries `error_details`.
|
|
414
|
+
- For `finalize`: README Status equals the given `FINAL_STATUS`, `total_documents` matches the real file count, and the summary is present.
|
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: job-orchestrator
|
|
3
|
-
description: "Use when a GitHub issue or complex intent needs to be analyzed, planned, and implemented end-to-end with sub-agents."
|
|
3
|
+
description: "Use when a GitHub issue or complex intent needs to be analyzed, planned, and implemented end-to-end with sub-agents. NOT for: the same pipeline under Task Manager flow state (use flow-orchestrator)."
|
|
4
4
|
triggers:
|
|
5
|
-
- "
|
|
5
|
+
- "implement issue"
|
|
6
|
+
- "full workflow"
|
|
7
|
+
- "orchestrate task"
|
|
6
8
|
- "Issue to PR"
|
|
7
|
-
- "Orchestrate"
|
|
8
9
|
- "Run pipeline"
|
|
9
10
|
- "Analyze and implement"
|
|
10
11
|
- "Full implementation"
|
|
11
|
-
- "Full review"
|
|
12
|
-
- "Полное ревью"
|
|
13
|
-
- "Review my code"
|
|
14
|
-
- "Analyze branch"
|
|
15
|
-
- "Review via orchestrator"
|
|
16
|
-
- "Orchestrated review"
|
|
17
12
|
- "Auto-implement"
|
|
18
13
|
- "Auto-implement issue"
|
|
19
14
|
- "Orchestrate issue"
|
|
@@ -2129,6 +2124,25 @@ wrong, cannot be undone by trying again.
|
|
|
2129
2124
|
|
|
2130
2125
|
---
|
|
2131
2126
|
|
|
2127
|
+
## Red Flags
|
|
2128
|
+
|
|
2129
|
+
The two callouts above ("the result looks fine without a status line", "the
|
|
2130
|
+
subagent can read `state.json` itself") are the two this orchestrator gets wrong
|
|
2131
|
+
most often. These are the rest. Stop and re-read this skill if you are thinking:
|
|
2132
|
+
|
|
2133
|
+
| Rationalization | Rebuttal |
|
|
2134
|
+
|---|---|
|
|
2135
|
+
| "The worker returned `STATUS: DONE`, so the task is verified." | `DONE` is the worker's report that it finished its own task, self-check included. The gate is step 2.8: `code-verifier` over the wave's whole diff. A task can be individually DONE and still break the build the moment it meets the other tasks in the wave. |
|
|
2136
|
+
| "The user is right here — I'll just ask which option they prefer." | Between Phase 0 and completion there are exactly two reasons to ask: a critical failure, and extending the plan from analyze to implement. Everything else was settled in Phase 0. A mid-run question turns an autonomous run into a session the user has to babysit. |
|
|
2137
|
+
| "`git checkout -b` is simpler than setting up a worktree for this one." | It switches the user's own working directory out from under their live session, mid-run. This is in the "unrecoverable if wrong" list: `git worktree add`, always, and every later command runs inside that worktree. |
|
|
2138
|
+
| "I know this step completed — recording it through `keryx job` is bookkeeping." | The package IS the state. `keryx job` is the only writer of `state.json`, and a resumed session knows only what it reads there. A step held in this session's head did not happen as far as the next session is concerned. |
|
|
2139
|
+
| "The subagent will work better with the full analysis JSON, so I'll paste it in." | The minimality principle: each subagent type gets its scoped slice. Extra context does not add capability; it fills the window with material the worker must first decide is irrelevant, and raises the odds it invents something from it. |
|
|
2140
|
+
| "This step failed twice — one more attempt with a sharper prompt should do it." | The retry protocol is one retry with the EXACT same prompt plus the error list; a second failure escalates to the user. Re-deriving the prompt causes drift, and the drifted attempt no longer tests the same thing. |
|
|
2141
|
+
| "The branch is ready and the PR is the obvious next step, so I'll push." | Do not push until the user confirms, unless `auto_create_pr` is set. A push is visible to everyone watching the repository, and there is no un-push they will not see. |
|
|
2142
|
+
| "The job finished cleanly, so the report can be short." | Say where the job package is, every time. It is the only durable record of the run; a user who cannot find it is left with a summary and nothing to check it against. |
|
|
2143
|
+
|
|
2144
|
+
---
|
|
2145
|
+
|
|
2132
2146
|
## Configurable Jobs Root
|
|
2133
2147
|
|
|
2134
2148
|
`JOBS_ROOT` in this document is shorthand for **`.metaproject/jobs`, relative to the
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: task-implementer
|
|
3
3
|
model_tier: standard
|
|
4
|
-
description: "Use when implementing a single
|
|
4
|
+
description: "Use when implementing a single task out of an issue-analyzer breakdown end-to-end, or executing autonomous code changes from a JSON task object. NOT for: splitting an issue into that breakdown in the first place (use issue-analyzer)."
|
|
5
5
|
triggers:
|
|
6
|
-
- "
|
|
6
|
+
- "implement task"
|
|
7
|
+
- "execute task"
|
|
8
|
+
- "atomic task"
|
|
7
9
|
- "Execute task scenario"
|
|
8
10
|
- "Code this task"
|
|
9
11
|
- "Run task-implementer"
|
|
@@ -183,7 +185,7 @@ This step is read-only and inline; do not spawn a subagent for it.
|
|
|
183
185
|
(`input-contract.schema.json`). Empty means none; the string `"none"` is not a
|
|
184
186
|
legal value and a request carrying it is refused by 1.4
|
|
185
187
|
- Read each file listed in either array
|
|
186
|
-
- Understand existing test patterns (describe/it structure, mocks, fixtures)
|
|
188
|
+
- Understand existing test patterns (describe/it structure, mocks, fixtures) and, for every file in `existing_stories`, the story patterns it uses (`Meta`/`StoryObj` shape, how variants are declared, how callbacks are stubbed) — 4.4 builds on what you record here
|
|
187
189
|
|
|
188
190
|
**2.3 Read module neighbors:**
|
|
189
191
|
- List sibling files in the same directory as each target file
|
|
@@ -223,16 +225,6 @@ Based on what you're implementing, load and follow the relevant project rules.
|
|
|
223
225
|
Rules live at `.metaproject/rules/core/<rule>.mdc` on every harness — that is the
|
|
224
226
|
one tree `keryx init` installs and the one every build of this skill reads.
|
|
225
227
|
|
|
226
|
-
**Output of Phase 2:** Mental model of the implementation:
|
|
227
|
-
```
|
|
228
|
-
RESEARCH_SUMMARY:
|
|
229
|
-
target_files_status: [{path, exists: bool, line_count, key_exports}]
|
|
230
|
-
test_pattern: <describe structure, assertion style>
|
|
231
|
-
story_pattern: <Meta/StoryObj, args pattern>
|
|
232
|
-
module_conventions: <naming, imports, exports, TS patterns>
|
|
233
|
-
relevant_rules_loaded: [<rule names>]
|
|
234
|
-
```
|
|
235
|
-
|
|
236
228
|
### Phase 3: PLAN
|
|
237
229
|
|
|
238
230
|
Decide the implementation approach. Self-validate — no orchestrator approval needed.
|
|
@@ -286,13 +278,6 @@ Execute the change plan. Write production-quality code.
|
|
|
286
278
|
5. Component/UI layer implementation (make component tests GREEN)
|
|
287
279
|
6. Stories (if needed)
|
|
288
280
|
|
|
289
|
-
**4.1 Implementation order (TDD Mode — test_case_specs provided):**
|
|
290
|
-
1. Read all test stubs from `test_case_specs.test_files`
|
|
291
|
-
2. Understand the expected API shape from test assertions
|
|
292
|
-
3. Implement types/interfaces to satisfy test imports
|
|
293
|
-
4. Implement code layer by layer until all tests are GREEN
|
|
294
|
-
5. Stories (if needed)
|
|
295
|
-
|
|
296
281
|
**4.2 Code standards (always follow):**
|
|
297
282
|
- TypeScript strict mode — no `any`, no `as` casts unless justified
|
|
298
283
|
- Use project path aliases for imports (`@components/...`, `@utils/...`)
|
|
@@ -302,16 +287,10 @@ Execute the change plan. Write production-quality code.
|
|
|
302
287
|
- Follow existing module patterns discovered in Phase 2
|
|
303
288
|
|
|
304
289
|
**4.3 Test standards:**
|
|
305
|
-
-
|
|
306
|
-
- Use `data-testid` for test selectors
|
|
307
|
-
- Follow AAA pattern (Arrange, Act, Assert)
|
|
308
|
-
- Mock external dependencies, not internal module logic
|
|
290
|
+
- Use the runner, selectors and structure Phase 2.2 found in this project's own tests — not a remembered stack. Arrange/Act/Assert; mock external dependencies, not internal module logic.
|
|
309
291
|
|
|
310
292
|
**4.4 Story standards:**
|
|
311
|
-
- `Meta` + `StoryObj`
|
|
312
|
-
- `args`-based variants
|
|
313
|
-
- `fn()` for action callbacks
|
|
314
|
-
- Cover: default state, edge cases, error states
|
|
293
|
+
- Use the story patterns Phase 2.2 found (`Meta` + `StoryObj`, `args`-based variants, `fn()` callbacks); cover default state, edge cases and error states.
|
|
315
294
|
|
|
316
295
|
**4.5 Commit after implementation:**
|
|
317
296
|
|
|
@@ -399,7 +378,6 @@ attempts. The counter cannot tell "converging slowly" from "stuck", and three
|
|
|
399
378
|
identical outputs cost the whole budget to learn what the second one already
|
|
400
379
|
said. Report the block instead, naming what repeated.
|
|
401
380
|
|
|
402
|
-
|
|
403
381
|
**ROLLBACK POLICY**: If implementation fatally fails (tests still failing after 3 attempts, or unresolvable compilation errors), restore ONLY the files this task changed — `git -C "<codebase_path>" checkout -- <your files>` for tracked ones, delete the untracked ones you created — then report the failure in Phase 6.
|
|
404
382
|
|
|
405
383
|
**Never run `git reset --hard`, `git clean`, or any unscoped revert.** You do not own the worktree. `job-orchestrator` dispatches implementers in PARALLEL WAVES sharing a single worktree, so an unscoped reset destroys a wave-mate's uncommitted work — work that is not yours, cannot be recovered, and whose loss is invisible to you because the other agent's failure surfaces somewhere else entirely. If you cannot identify which files are yours, leave the tree exactly as it is and say so in the report: a dirty tree is recoverable, a destroyed one is not.
|
|
@@ -447,12 +425,30 @@ Write full JSON to `<JOBS_ROOT>/<JOB_NAME>/results/<task_id>.json`:
|
|
|
447
425
|
"story_result": "<pass|build error: details|not applicable>",
|
|
448
426
|
"acceptance_criteria_met": "<all|partial: list of unmet criteria|none>",
|
|
449
427
|
"skill_drift": "<none | stale: <module>/<skill> — <what diverged> | missing: <module> should have a project-skill>",
|
|
428
|
+
"noticed_not_touched": [{ "what": "<problem>", "where": "<path|symbol>" }],
|
|
429
|
+
"assumptions": ["<what you assumed where the task did not say>"],
|
|
430
|
+
"not_touched": [{ "path": "src/path/file.ts", "reason": "<why left alone>" }],
|
|
450
431
|
"notes": "<any warnings, blockers, or additional context>"
|
|
451
432
|
}
|
|
452
433
|
```
|
|
453
434
|
|
|
454
435
|
Set `skill_drift` from Phase 2.0b: if the project-skill you used was not `fresh`, or the code you wrote diverged from what a skill documents, name the skill and the divergence. The orchestrator uses this to decide whether to trigger `skills learn` (do NOT run `learn` yourself — it is a mutating step the orchestrator dispatches; see `rules/core/skill-lifecycle.mdc`).
|
|
455
436
|
|
|
437
|
+
Three of those fields have a bar, and a field that collects noise trains the
|
|
438
|
+
reader to skim all three. Omit one rather than pad it. The trio is adapted (MIT)
|
|
439
|
+
from [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills) as contract fields rather than a free-text template; the bars below are ours.
|
|
440
|
+
|
|
441
|
+
- `assumptions` — what you assumed where the task was silent AND acted on. If
|
|
442
|
+
the assumption being wrong would not change a line you wrote, it is a hedge,
|
|
443
|
+
not an assumption; leave it out.
|
|
444
|
+
- `noticed_not_touched` — a problem in code you actually read, stated so a
|
|
445
|
+
follow-up task could be written from it alone, with `where` it lives. Not a
|
|
446
|
+
dumping ground for every smell seen in passing, and not style opinion.
|
|
447
|
+
- `not_touched` — of the files this task was aimed at (`target_files`), the ones
|
|
448
|
+
absent from `files_modified`/`files_created`/`files_deleted`, each with why.
|
|
449
|
+
It answers that one question and no other: a reader subtracts those lists and
|
|
450
|
+
this one from `target_files`, and flags the remainder as an unexplained omission.
|
|
451
|
+
|
|
456
452
|
Then check the shape and record the file — two commands, both of which refuse
|
|
457
453
|
rather than warn:
|
|
458
454
|
|
|
@@ -496,8 +492,14 @@ Return a compact STATUS response following `rules/core/subagent-status-protocol.
|
|
|
496
492
|
The inline response must contain only: STATUS line + Completed bullets + Files changed + Verification summary.
|
|
497
493
|
|
|
498
494
|
**Status classification:**
|
|
499
|
-
- `success` → `STATUS: DONE`
|
|
500
|
-
|
|
495
|
+
- `success` → `STATUS: DONE`, or `DONE_WITH_CONCERNS` when work that cleared the
|
|
496
|
+
bar still carries something the orchestrator must know.
|
|
497
|
+
- `partial` → `STATUS: BLOCKED` — never `DONE_WITH_CONCERNS`. An unmet criterion,
|
|
498
|
+
a failed gate or a gate that did not run breaks `rules/core/definition-of-done.mdc`,
|
|
499
|
+
and `DONE_WITH_CONCERNS` reports on work that cleared that bar, never a lower
|
|
500
|
+
one. The harness already reads it this way: `shouldEscalate`
|
|
501
|
+
(`src/harness/child/escalation.ts`) escalates on any `acceptance[].status` of
|
|
502
|
+
`not_met` whatever token arrived with it.
|
|
501
503
|
- `failed` → `STATUS: BLOCKED`
|
|
502
504
|
|
|
503
505
|
---
|
package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json
CHANGED
|
@@ -47,9 +47,40 @@
|
|
|
47
47
|
"type": "string",
|
|
48
48
|
"description": "Set from SKILL.md Phase 2.0b: 'none' | 'stale: <module>/<skill> — <what diverged>' | 'missing: <module> should have a project-skill'. SKILL.md has required this field since project-skill verification was added; this object is `additionalProperties: false`, so until it was declared here a compliant result was REFUSED by its own contract."
|
|
49
49
|
},
|
|
50
|
+
"noticed_not_touched": {
|
|
51
|
+
"type": "array",
|
|
52
|
+
"description": "Problems seen in passing and deliberately left alone because they were out of scope. Candidate follow-up work: the location is required because a note a reader has to go searching for is a note nobody acts on. Omit the field when nothing was noticed; `[]` says the same thing explicitly.",
|
|
53
|
+
"items": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": false,
|
|
56
|
+
"required": ["what", "where"],
|
|
57
|
+
"properties": {
|
|
58
|
+
"what": { "type": "string", "minLength": 1, "description": "The problem, stated so a follow-up task could be written from it alone" },
|
|
59
|
+
"where": { "type": "string", "minLength": 1, "description": "Path, directory or symbol it lives at" }
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"assumptions": {
|
|
64
|
+
"type": "array",
|
|
65
|
+
"description": "What was assumed where the task did not say. A wrong assumption is the usual cause of a rejected result, so these are the first thing a reviewer should check. Read only by a human — nothing in the result or the request can confirm an assumption, so this is deliberately an array of sentences rather than a structure that would imply a check nobody performs.",
|
|
66
|
+
"items": { "type": "string", "minLength": 1 }
|
|
67
|
+
},
|
|
68
|
+
"not_touched": {
|
|
69
|
+
"type": "array",
|
|
70
|
+
"description": "Files a reader would expect in `files_modified` and will not find there, each with the reason. `path` is a separate field because this is machine-checkable: a reader holding the request can subtract `files_modified`/`files_created`/`files_deleted` and this list from `task.target_files` and flag whatever is left as an unexplained omission.",
|
|
71
|
+
"items": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"additionalProperties": false,
|
|
74
|
+
"required": ["path", "reason"],
|
|
75
|
+
"properties": {
|
|
76
|
+
"path": { "type": "string", "minLength": 1 },
|
|
77
|
+
"reason": { "type": "string", "minLength": 1, "description": "Why it was left alone — 'already correct', 'out of scope', 'blocked by <x>'" }
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
50
81
|
"notes": {
|
|
51
82
|
"type": "string",
|
|
52
|
-
"description": "Warnings, blockers, or additional context"
|
|
83
|
+
"description": "Warnings, blockers, or additional context. The three fields above were carved out of this one: free text is where they went before they were declared, and anything that fits one of them belongs there instead."
|
|
53
84
|
}
|
|
54
85
|
}
|
|
55
86
|
}
|