@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.
Files changed (182) hide show
  1. package/dist/cli.js +4057 -2510
  2. package/dist/core.js +39 -1
  3. package/package.json +1 -1
  4. package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
  5. package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
  6. package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +101 -11
  7. package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
  8. package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
  9. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +19 -3
  10. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +20 -4
  11. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +32 -9
  12. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +18 -4
  13. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +21 -5
  14. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +4 -4
  15. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
  16. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +42 -2
  17. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +23 -9
  18. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +33 -31
  19. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
  20. package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
  21. package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
  22. package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
  23. package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
  24. package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
  25. package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
  26. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +28 -3
  27. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
  28. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
  29. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
  30. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
  31. package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
  32. package/src/gdskills/bundled/skills/planning/interview/SKILL.md +29 -7
  33. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +32 -6
  34. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
  35. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
  36. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
  37. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
  38. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
  39. package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
  40. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +20 -3
  41. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
  42. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
  43. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
  44. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
  45. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
  46. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
  47. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
  48. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
  49. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
  50. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
  51. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
  52. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
  53. package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
  54. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +26 -2
  55. package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +28 -3
  56. package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
  57. package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +24 -4
  58. package/src/gdskills/bundled/skills/quality/commit/SKILL.md +24 -3
  59. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +24 -3
  60. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +25 -4
  61. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +26 -3
  62. package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
  63. package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
  64. package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
  65. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +29 -8
  66. package/src/gdskills/bundled/skills/quality/pr/SKILL.md +24 -4
  67. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +25 -2
  68. package/src/gdskills/bundled/skills/quality/push/SKILL.md +24 -3
  69. package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
  70. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
  71. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +24 -3
  72. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +17 -2
  73. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +40 -5
  74. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +41 -1
  75. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +44 -2
  76. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +44 -4
  77. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +3 -3
  78. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +2 -3
  79. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +4 -4
  80. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +36 -2
  81. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +37 -3
  82. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +2 -4
  83. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +36 -2
  84. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +3 -5
  85. package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +23 -2
  86. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +3 -3
  87. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +9 -29
  88. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +9 -9
  89. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +3 -2
  90. package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
  91. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +4 -2
  92. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +2 -2
  93. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +40 -2
  94. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
  95. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -330
  96. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -330
  97. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -330
  98. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -330
  99. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
  100. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
  101. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
  102. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
  103. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -424
  104. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -424
  105. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -424
  106. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -424
  107. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
  108. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
  109. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
  110. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
  111. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
  112. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
  113. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
  114. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
  115. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
  116. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
  117. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2232
  118. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2232
  119. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2232
  120. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2232
  121. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -668
  122. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -668
  123. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -668
  124. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -668
  125. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
  126. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
  127. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
  128. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
  129. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
  130. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
  131. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
  132. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
  133. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
  134. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
  135. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
  136. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
  137. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
  138. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
  139. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
  140. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
  141. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
  142. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
  143. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
  144. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
  145. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
  146. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
  147. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
  148. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
  149. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
  150. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
  151. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
  152. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
  153. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
  154. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
  155. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
  156. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
  157. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
  158. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
  159. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
  160. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
  161. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -80
  162. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -80
  163. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -345
  164. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -345
  165. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -345
  166. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -345
  167. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
  168. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
  169. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
  170. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
  171. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
  172. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
  173. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
  174. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
  175. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
  176. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
  177. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
  178. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
  179. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
  180. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
  181. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
  182. 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` reports `drift: changed` the moment the file differs.
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 shows your reviewer with
196
- `drift: clean`.
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
- `keryx review reviewers` reporting `drift: changed` means the source file differs
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
- - "Collect context"
6
- - "Build context"
7
- - "Gather context"
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
- ## Success Criteria
415
+ ## Red Flags
413
416
 
414
- Analysis is successful when:
415
- - Business logic is fully understood and documented
416
- - API contracts are clearly specified
417
- - Breaking changes are identified
418
- - Implementation plan is actionable
419
- - User confirms understanding via intermediate review
420
- - All P0 files analyzed completely
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
- - "/feature-dev"
6
- - "Develop feature"
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: `npx tsc --noEmit` (type errors only)
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
- - "Analyze issue"
6
- - "Decompose issue"
7
- - "Break down issue"
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
- - "Document job"
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
- - "Implement issue"
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 decomposed task from issue-analyzer end-to-end, or executing autonomous code changes from a JSON task object."
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
- - "Implement task"
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
- - Unit tests: Vitest with `describe`/`it`, `@testing-library/react` for components
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` pattern
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
- - `partial` → `STATUS: DONE_WITH_CONCERNS`
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
  ---
@@ -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
  }