@mrciphersmith/keryx 0.2.97 → 0.2.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/dist/cli.js +4583 -2702
  2. package/dist/core.js +40 -2
  3. package/package.json +1 -1
  4. package/src/gdskills/bundled/rules/core/api-contracts.mdc +1 -0
  5. package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
  6. package/src/gdskills/bundled/rules/core/code-style-patterns.mdc +1 -0
  7. package/src/gdskills/bundled/rules/core/database-patterns.mdc +1 -0
  8. package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
  9. package/src/gdskills/bundled/rules/core/documentation-management.mdc +33 -38
  10. package/src/gdskills/bundled/rules/core/error-handling.mdc +1 -11
  11. package/src/gdskills/bundled/rules/core/execution-metrics.md +1 -2
  12. package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +1 -0
  13. package/src/gdskills/bundled/rules/core/git-concurrency.mdc +101 -0
  14. package/src/gdskills/bundled/rules/core/implementation-plans.mdc +23 -11
  15. package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +1 -0
  16. package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +1 -0
  17. package/src/gdskills/bundled/rules/core/playwright-testing.mdc +1 -0
  18. package/src/gdskills/bundled/rules/core/requirements-management.mdc +15 -11
  19. package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +29 -14
  20. package/src/gdskills/bundled/rules/core/shared-definitions.mdc +1 -1
  21. package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +9 -5
  22. package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +156 -23
  23. package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +1 -0
  24. package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
  25. package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
  26. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +67 -74
  27. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +24 -8
  28. package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +2 -2
  29. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +12 -22
  30. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +44 -31
  31. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +2 -2
  32. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +1 -1
  33. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +4 -4
  34. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +2 -2
  35. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +20 -6
  36. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +67 -9
  37. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +6 -6
  38. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
  39. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +45 -5
  40. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +88 -32
  41. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +52 -41
  42. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
  43. package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
  44. package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
  45. package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
  46. package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
  47. package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
  48. package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
  49. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +29 -4
  50. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
  51. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
  52. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
  53. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
  54. package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
  55. package/src/gdskills/bundled/skills/planning/interview/SKILL.md +30 -8
  56. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +33 -7
  57. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
  58. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
  59. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
  60. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
  61. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
  62. package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
  63. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +27 -10
  64. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
  65. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
  66. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
  67. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
  68. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
  69. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
  70. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
  71. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
  72. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
  73. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
  74. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
  75. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
  76. package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
  77. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +27 -3
  78. package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +29 -4
  79. package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
  80. package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +25 -5
  81. package/src/gdskills/bundled/skills/quality/commit/SKILL.md +26 -5
  82. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +25 -4
  83. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +26 -5
  84. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +27 -4
  85. package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
  86. package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
  87. package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
  88. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +30 -9
  89. package/src/gdskills/bundled/skills/quality/pr/SKILL.md +25 -5
  90. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +27 -4
  91. package/src/gdskills/bundled/skills/quality/push/SKILL.md +25 -4
  92. package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
  93. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
  94. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +31 -5
  95. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +32 -11
  96. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +42 -7
  97. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +43 -3
  98. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +46 -4
  99. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +46 -6
  100. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +5 -5
  101. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +5 -6
  102. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +6 -6
  103. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +37 -3
  104. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +38 -4
  105. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +4 -6
  106. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +37 -3
  107. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +5 -7
  108. package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +24 -3
  109. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +5 -5
  110. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +49 -64
  111. package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +1 -2
  112. package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +1 -5
  113. package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +53 -9
  114. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +11 -11
  115. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +9 -8
  116. package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
  117. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +6 -4
  118. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +5 -5
  119. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +41 -3
  120. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +2 -2
  121. package/src/gdskills/bundled/rules/core/review-agent-profile.mdc +0 -49
  122. package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +0 -48
  123. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -353
  124. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -353
  125. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -353
  126. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -353
  127. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
  128. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
  129. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
  130. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
  131. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -434
  132. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -434
  133. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -434
  134. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -434
  135. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
  136. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
  137. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
  138. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
  139. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
  140. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
  141. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
  142. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
  143. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
  144. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
  145. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2190
  146. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2190
  147. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2190
  148. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2190
  149. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -659
  150. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -659
  151. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -659
  152. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -659
  153. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
  154. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
  155. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
  156. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
  157. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
  158. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
  159. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
  160. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
  161. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
  162. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
  163. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
  164. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
  165. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
  166. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
  167. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
  168. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
  169. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
  170. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
  171. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
  172. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
  173. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
  174. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
  175. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
  176. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
  177. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
  178. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
  179. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
  180. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
  181. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
  182. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
  183. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
  184. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
  185. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
  186. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
  187. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
  188. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
  189. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -75
  190. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -75
  191. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -339
  192. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -339
  193. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -339
  194. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -339
  195. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
  196. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
  197. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
  198. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
  199. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
  200. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
  201. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
  202. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
  203. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
  204. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
  205. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
  206. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
  207. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
  208. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
  209. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
  210. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +0 -168
@@ -1,16 +1,17 @@
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"
10
11
  metadata:
11
12
  author: "MrCipherSmith"
12
13
  version: "2.0.0"
13
- category: "workflow"
14
+ category: "orchestration"
14
15
  compatible_harnesses: "cursor,codex,zed,opencode,claude"
15
16
  license: "MIT"
16
17
  ---
@@ -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)
@@ -97,7 +98,7 @@ End-to-end feature development workflow from idea to merge-ready PR.
97
98
  Run `code-verifier` on the full diff:
98
99
 
99
100
  ```
100
- Invoke: skills/orchestration/code-verifier/SKILL.md
101
+ Invoke: .metaproject/skills/gdskills/orchestration/code-verifier/SKILL.md
101
102
  Input: codebase_path=<project_root>, scope=changed, base_branch=<base>
102
103
  ```
103
104
 
@@ -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"
@@ -231,6 +232,7 @@ Required rules:
231
232
  - `.metaproject/rules/core/error-handling.mdc`
232
233
  - `.metaproject/rules/core/implementation-doc-mandate.mdc`
233
234
  - `.metaproject/rules/core/execution-metrics.md`
235
+ - `.metaproject/rules/core/git-concurrency.mdc` — no `git stash`, no unscoped `git add`, pin every dispatch to its worktree
234
236
 
235
237
  Execution metrics (opt-in): when a USER runs this orchestrator directly, at the
236
238
  start ask "Collect execution statistics for this run? (yes/no)" per
@@ -320,6 +322,19 @@ worker reply is a `subagent-result` object
320
322
  line is `STATUS: <status>`
321
323
  (`.metaproject/rules/core/subagent-status-protocol.md`).
322
324
 
325
+ `<worktree_path>` below is the absolute root of the checkout this flow's work
326
+ happens in: the git worktree the flow runs in, or the project root when it runs
327
+ in the main checkout. Resolve it once, before the first dispatch
328
+ (`git rev-parse --show-toplevel` from that checkout), check
329
+ `git -C <worktree_path> branch --show-current` is the branch the work belongs
330
+ on, and pin every dispatch to it (`rules/core/git-concurrency.mdc`, "Pinning A
331
+ Dispatch To Its Worktree").
332
+
333
+ Workers do not commit: flow-orchestrator owns every commit and dispatches with
334
+ auto-commit off (task-implementer's `automation.auto_commit: false`). A
335
+ `subagent-dispatch` has no `automation` field, so the setting travels as the
336
+ explicit constraint below — never as the worker's default, which is `true`.
337
+
323
338
  Dispatch payload, bound to the flow (map `target_skill` from the routing table):
324
339
 
325
340
  ```json
@@ -340,7 +355,10 @@ Dispatch payload, bound to the flow (map `target_skill` from the routing table):
340
355
  "constraints": [
341
356
  "Never edit flow.json.",
342
357
  "Never edit frozen acceptance criteria.",
343
- "Return a subagent-result; first line must be STATUS:."
358
+ "Return a subagent-result; first line must be STATUS:.",
359
+ "Follow rules/core/git-concurrency.mdc: never git stash; never git add -A.",
360
+ "Root: <worktree_path>. Before the first write run `cd <worktree_path> && pwd && git branch --show-current`; run every git command as `git -C <worktree_path>`.",
361
+ "Auto-commit is off (automation.auto_commit: false): do not commit; list every path you changed in changed_files. flow-orchestrator commits them at the task boundary."
344
362
  ],
345
363
  "allowed_actions": ["read", "write", "run-command", "git"],
346
364
  "output_contract": { "schema": "subagent-result", "artifact_path": ".metaproject/flows/<dir>/journal.md" },
@@ -349,12 +367,37 @@ Dispatch payload, bound to the flow (map `target_skill` from the routing table):
349
367
  }
350
368
  ```
351
369
 
352
- After a worker succeeds, the flow-orchestrator marks task progress:
370
+ **Task boundary commit, after every accepted worker result** (`DONE` or
371
+ `DONE_WITH_CONCERNS`), then mark task progress. It commits exactly those
372
+ `changed_files` from the worker's `subagent-result` that git still shows as
373
+ changed, never `-A`/`--all`/`.` (`rules/core/git-concurrency.mdc` rule 4 and
374
+ "Reporting Back"). It skips cleanly when none remain. That is expected, not an
375
+ error, for a worker that reported no files (review, context, docs) or that
376
+ committed on its own (tests-creator's stubs):
353
377
 
354
378
  ```bash
379
+ set -- <each changed_files path, single-quoted: 'src/a.ts' 'docs/b c.md'> # may be none; an unquoted path with a space splits and is skipped
380
+ PENDING=()
381
+ for p in "$@"; do
382
+ [ -n "$(git -C <worktree_path> status --porcelain -- "$p")" ] && PENDING+=("$p")
383
+ done
384
+ if [ ${#PENDING[@]} -eq 0 ]; then
385
+ echo "boundary commit: nothing left to commit, skipped"
386
+ else
387
+ git -C <worktree_path> add -- "${PENDING[@]}"
388
+ git -C <worktree_path> commit -m "<type>(<scope>): <Tn title>
389
+
390
+ task: <Tn>" -- "${PENDING[@]}"
391
+ fi
355
392
  keryx flow task done <id> <Tn>
356
393
  ```
357
394
 
395
+ Why each path is checked on its own: `git status --porcelain --` with no path
396
+ lists the whole tree, `git add` fails on a path that is neither on disk nor
397
+ tracked, and `git commit` with nothing staged exits 1. The trailing
398
+ `-- "${PENDING[@]}"` commits only these paths, so a file another lane staged is
399
+ not swept into this commit.
400
+
358
401
  If new work is discovered:
359
402
 
360
403
  ```bash
@@ -369,8 +412,8 @@ properly formatted `subagent-result`.
369
412
 
370
413
  | Worker `status` | flow-orchestrator action |
371
414
  |---|---|
372
- | `DONE` | Accept. `keryx flow task done <id> <Tn>`. Continue. |
373
- | `DONE_WITH_CONCERNS` | Accept, record every concern in `journal.md`, decide continue vs. add a fix task, then `flow task done`. Never silently drop concerns. |
415
+ | `DONE` | Accept, run the task boundary commit (above), `keryx flow task done <id> <Tn>`. Continue. |
416
+ | `DONE_WITH_CONCERNS` | Accept, run the task boundary commit (above), record every concern in `journal.md`, decide continue vs. add a fix task, then `flow task done`. Never silently drop concerns. |
374
417
  | `NEEDS_CONTEXT` | Do not fail. Enrich `context_refs`/`files_to_read` from gdgraph/gdctx/wiki/memory, then re-dispatch the same `dispatch_id`. |
375
418
  | `BLOCKED` | `keryx flow block <id> --reason "<worker reason>"`; resolve or escalate one concise question, then `flow unblock` and re-dispatch. |
376
419
  | `FAILED` | Emitted by harness **child** workers (`src/harness/child/contract.ts`), never by skill workers — `task-implementer` maps its own `failed` onto `BLOCKED`. Retry once with the same dispatch. If it fails again, block the flow and surface the error to the user. |
@@ -636,3 +679,18 @@ keryx skills contracts validate <file> --schema subagent-result
636
679
  completion.
637
680
  - Do not read broad source trees when gdgraph/gdctx/wiki/memory can first
638
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,18 +1,18 @@
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:
11
11
  author: "MrCipherSmith"
12
12
  version: "1.1.0"
13
- category: "analysis"
13
+ category: "orchestration"
14
14
  agent_worthy: true
15
- compatible_harnesses: "cursor,codex,zed,opencode"
15
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
16
16
  license: "MIT"
17
17
  ---
18
18
 
@@ -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,17 +1,19 @@
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"
10
12
  metadata:
11
13
  author: "MrCipherSmith"
12
14
  version: "1.0.0"
13
- category: "documentation"
14
- compatible_harnesses: "cursor,codex,zed,opencode"
15
+ category: "orchestration"
16
+ compatible_harnesses: "cursor,codex,zed,opencode,claude"
15
17
  license: "MIT"
16
18
  ---
17
19
 
@@ -345,7 +347,7 @@ When the orchestrator dispatches this skill as a sub-agent, it should use this p
345
347
  ```
346
348
  You are the job-documenter agent. Your task is to manage job documentation.
347
349
 
348
- Load the skill from: skills/orchestration/job-documenter/SKILL.md
350
+ Load the skill from: .metaproject/skills/gdskills/orchestration/job-documenter/SKILL.md
349
351
  Follow the rules from: rules/core/jobs-documentation.mdc
350
352
 
351
353
  ACTION: <action>
@@ -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"
@@ -610,19 +605,14 @@ CONTEXT_RESULT:
610
605
  into every subsequent dispatch prompt:
611
606
 
612
607
  ```
613
- CONTEXT_LOCATION: <JOBS_ROOT>/<job-name>/context_v<N>.md
608
+ CONTEXT_LOCATION: <JOBS_ROOT>/<job-name>/ai/context.md
614
609
  ```
615
610
 
616
- **Context versioning:** never overwrite an existing context file — write snapshots as
617
- `context_v1.md`, `context_v2.md`, and so on. Version 1 comes from the first collect in
618
- 2.3; each update writes the next number.
619
-
620
- The current version is the highest-numbered file in the package, which is a fact on
621
- disk that any session can read:
622
-
623
- ```bash
624
- ls .metaproject/jobs/<job-name>/context_v*.md
625
- ```
611
+ **Context versioning:** the file lives at this one fixed path and is overwritten in
612
+ place on every update — never written to a new, version-numbered filename. Each
613
+ collect/update instead increments the `Version` field in the document's own
614
+ "Document Metadata" table and appends a line to its `Update Log` section (see
615
+ context-collector SKILL.md §4.1, §4.3); that table on disk is the current version.
626
616
 
627
617
  `state.json` does not carry a context pointer and nothing writes one — do not tell a
628
618
  sub-agent to look for one. The orchestrator passes the path (Constructing Subagent
@@ -645,7 +635,7 @@ Task({
645
635
  JOB_NAME: <job-name>
646
636
  JOBS_ROOT: <JOBS_ROOT>
647
637
  PROJECT_DIR: <project_dir>
648
- CONTEXT_VERSION: <current version + 1> ← write to context_v<N+1>.md
638
+ CONTEXT_VERSION: <current version + 1> ← written into ai/context.md's Version field; file overwritten in place
649
639
 
650
640
  DATA:
651
641
  TASK_DESCRIPTION: <original task description>
@@ -703,6 +693,8 @@ fi
703
693
 
704
694
  > **IMPORTANT**: After creating the worktree, ALL subsequent operations (implementation, review, lint, test, git) MUST run in the **worktree directory**, NOT in the original project directory.
705
695
 
696
+ > **Concurrency**: every subsequent git command MUST use `git -C <worktree_path>`, never a bare `git`, and MUST NOT `git stash` or `git add -A`/`--all`/`.` — see `rules/core/git-concurrency.mdc`. Pin each dispatch to `<worktree_path>` explicitly; a dispatched agent's first action is `cd <worktree_path> && pwd && git branch --show-current`, re-checked before its first write.
697
+
706
698
  **Record state:**
707
699
  ```
708
700
  BRANCH_STATE:
@@ -770,9 +762,15 @@ FOR wave_index, wave_tasks in enumerate(WAVES):
770
762
  Wait for ALL of them.
771
763
 
772
764
  Read each result's STATUS line:
773
- all DONE → continue to next wave
774
- any DONE_WITH_CONCERNS → record the concerns, continue
775
- any BLOCKED → STOP, read the result file, resolve or ask the user
765
+ DONE / DONE_WITH_CONCERNS → accept it (record every concern)
766
+ BLOCKED → do not accept it; read its result file
767
+
768
+ # Task boundary commit, for EVERY accepted result, before anything else,
769
+ # whatever auto_commit was (see "Task boundary commit" below):
770
+ FOR each accepted result: commit its still-changed reported paths, or skip
771
+
772
+ any BLOCKED → STOP, resolve or ask the user
773
+ otherwise → continue to next wave
776
774
  ```
777
775
 
778
776
  #### tests-creator dispatch (Step A)
@@ -792,7 +790,7 @@ Task({
792
790
  - branch: <branch name>
793
791
  - package_manager: <pm>
794
792
  - run_command: <runner>
795
- - context_path: <JOBS_ROOT>/<job-name>/context_v<N>.md
793
+ - context_path: <JOBS_ROOT>/<job-name>/ai/context.md
796
794
 
797
795
  ## Required response
798
796
  Begin with STATUS: <STATUS>. Return the test_case_specs for this task and
@@ -820,12 +818,15 @@ Task({
820
818
  - run_command: <runner>
821
819
  - issue_number: <N>
822
820
  - job_name: <job-name>
823
- - context_path: <JOBS_ROOT>/<job-name>/context_v<N>.md
821
+ - context_path: <JOBS_ROOT>/<job-name>/ai/context.md
822
+
823
+ ## Automation (task-implementer input `automation`)
824
+ - auto_commit: <implementer_settings.auto_commit> # false: do not commit; report exact paths
824
825
 
825
826
  ## Required response format (compact — no inline JSON)
826
827
  STATUS: DONE
827
828
  Task: <task_id>
828
- Commits: [abc1234 feat(x): ...]
829
+ Commits: [abc1234 feat(x): ...] # auto_commit=false: Commits: none (auto_commit=false)
829
830
  Tests: <N passed, M failed>
830
831
  Result file: <JOBS_ROOT>/<job-name>/results/<task_id>.json
831
832
 
@@ -833,6 +834,42 @@ Task({
833
834
  })
834
835
  ```
835
836
 
837
+ **Who commits is set by the dispatch, never by a default.** Step B always passes
838
+ `auto_commit` explicitly. The worker's own default is `true`, so a dispatch that
839
+ leaves it out gets a worker that commits even when `implementer_settings.auto_commit`
840
+ is `false`.
841
+
842
+ **Task boundary commit, for every accepted result, whatever `auto_commit` was:**
843
+ a task is not done until its diff is committed (`rules/core/git-concurrency.mdc`
844
+ rule 4, "Reporting Back"). As soon as a result is accepted (`STATUS: DONE` or
845
+ `DONE_WITH_CONCERNS`), take its reported `files_modified`/`files_created`/
846
+ `files_deleted` from the result file and commit the ones git still shows as
847
+ changed, never `-A`/`--all`/`.`:
848
+ ```bash
849
+ set -- <each files_modified/files_created/files_deleted path, single-quoted: 'src/a.ts' 'docs/b c.md'> # may be none; an unquoted path with a space splits and is skipped
850
+ PENDING=()
851
+ for p in "$@"; do
852
+ [ -n "$(git -C <worktree_path> status --porcelain -- "$p")" ] && PENDING+=("$p")
853
+ done
854
+ if [ ${#PENDING[@]} -eq 0 ]; then
855
+ echo "boundary commit: nothing left to commit, skipped"
856
+ else
857
+ git -C <worktree_path> add -- "${PENDING[@]}"
858
+ git -C <worktree_path> commit -m "<type>(<scope>): <task description>
859
+
860
+ task: <task_id>" -- "${PENDING[@]}"
861
+ fi
862
+ ```
863
+ With `auto_commit=false` this commits exactly the worker's paths. With
864
+ `auto_commit=true` the worker already committed, so nothing is left and the step
865
+ skips. That is the expected outcome, not an error. If paths remain after an
866
+ `auto_commit=true` worker, it left part of its diff uncommitted: the step
867
+ commits it, and you record that as a concern. Each path is checked on its own
868
+ because `git status --porcelain --` with no path lists the whole tree, `git add`
869
+ fails on a path that is neither on disk nor tracked, and `git commit` with
870
+ nothing staged exits 1. The trailing `-- "${PENDING[@]}"` commits only these
871
+ paths, so a file another lane staged is not swept into this commit.
872
+
836
873
  **Each wave runs in ONE worktree.** The worktree created in 2.4 is the whole job's
837
874
  workspace — waves are ordered, not isolated from each other, and a later wave sees
838
875
  what an earlier one committed. That is what makes the dependency order mean anything.
@@ -904,7 +941,7 @@ git log <merge_base>..HEAD --oneline
904
941
 
905
942
  | Check | Pass | Fail action |
906
943
  |-------|------|-------------|
907
- | At least 1 commit exists | ≥1 commit | `retryable` — re-dispatch the task-implementers for that wave with: "No commits were made. Implement the changes and commit them." |
944
+ | At least 1 commit exists | ≥1 commit | `implementer_settings.auto_commit=true`: `retryable` — re-dispatch the task-implementers for that wave with: "No commits were made. Implement the changes and commit them." `auto_commit=false`: the task-boundary commit (wave loop, after Step B) should already have committed each accepted result's files — if none exist, `retryable`: re-run that commit step for the wave's result files instead of re-dispatching workers. |
908
945
  | At least 1 file modified | ≥1 file changed | Same as above |
909
946
  | Claimed files actually modified | All files named in the result files appear in the diff | Log discrepancy as a concern, continue |
910
947
 
@@ -1095,7 +1132,7 @@ Task({
1095
1132
  flags: <selected flags, e.g. --backend --security --testing-practices>
1096
1133
  commit_range: <BASE_SHA>..HEAD
1097
1134
  issue_url: <issue URL, when the job has one — enables the Stage 1 spec gate>
1098
- context_doc: <JOBS_ROOT>/<job-name>/context_v<N>.md
1135
+ context_doc: <JOBS_ROOT>/<job-name>/ai/context.md
1099
1136
  verification_mode: annotate
1100
1137
  managed_review: { mode: "review-flow", target: "branch", target_ref: "<feature-branch>" }
1101
1138
  is_fix_round: <true on any round after the first>
@@ -1426,7 +1463,7 @@ IF no skill_drift and Skill Learning == none:
1426
1463
  ELSE for each flagged project-skill:
1427
1464
  1. Dispatch a subagent to build the learning proposal:
1428
1465
  - Model: COMPUTED, not chosen — run
1429
- keryx review tier --scope narrow --json
1466
+ keryx review tier --findings 1 --diff-lines 0 --json
1430
1467
  and paste the `model` block into the dispatch. The command names no model:
1431
1468
  it ranks what the provider reports at runtime, and when it cannot rank
1432
1469
  anything it prints `inherit: true`, which means the dispatch runs on the
@@ -1514,7 +1551,7 @@ JOB_NAME: <job-name>
1514
1551
  BRANCH: <feature_branch>
1515
1552
  BASE: <base_branch>
1516
1553
  ISSUE_NUMBER: <issue_number if available>
1517
- CONTEXT_PATH: <JOBS_ROOT>/<job-name>/context_v<N>.md
1554
+ CONTEXT_PATH: <JOBS_ROOT>/<job-name>/ai/context.md
1518
1555
  ```
1519
1556
 
1520
1557
  `pr-issue-documenter` will analyze the branch diff and produce a structured PR description (Summary + Changes by area + Key Files table). Use its output as the `body` for the PR.
@@ -1704,7 +1741,7 @@ the dispatch prompt, or it does not reach the sub-agent:
1704
1741
  ```
1705
1742
  branch: { name, worktree_path, merge_base, package_manager, run_command }
1706
1743
  analysis: { total_tasks, tasks, dependency_order }
1707
- context_doc: the path to the highest-numbered context_v<N>.md in the package
1744
+ context_doc: the path to the job's ai/context.md
1708
1745
  review: the current round's findings — the durable copy is the managed review
1709
1746
  package, not this
1710
1747
  ```
@@ -2087,6 +2124,25 @@ wrong, cannot be undone by trying again.
2087
2124
 
2088
2125
  ---
2089
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
+
2090
2146
  ## Configurable Jobs Root
2091
2147
 
2092
2148
  `JOBS_ROOT` in this document is shorthand for **`.metaproject/jobs`, relative to the