@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.
- package/dist/cli.js +4583 -2702
- package/dist/core.js +40 -2
- package/package.json +1 -1
- package/src/gdskills/bundled/rules/core/api-contracts.mdc +1 -0
- package/src/gdskills/bundled/rules/core/cli-interface-design.mdc +237 -0
- package/src/gdskills/bundled/rules/core/code-style-patterns.mdc +1 -0
- package/src/gdskills/bundled/rules/core/database-patterns.mdc +1 -0
- package/src/gdskills/bundled/rules/core/definition-of-done.mdc +116 -0
- package/src/gdskills/bundled/rules/core/documentation-management.mdc +33 -38
- package/src/gdskills/bundled/rules/core/error-handling.mdc +1 -11
- package/src/gdskills/bundled/rules/core/execution-metrics.md +1 -2
- package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +1 -0
- package/src/gdskills/bundled/rules/core/git-concurrency.mdc +101 -0
- package/src/gdskills/bundled/rules/core/implementation-plans.mdc +23 -11
- package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +1 -0
- package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +1 -0
- package/src/gdskills/bundled/rules/core/playwright-testing.mdc +1 -0
- package/src/gdskills/bundled/rules/core/requirements-management.mdc +15 -11
- package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +29 -14
- package/src/gdskills/bundled/rules/core/shared-definitions.mdc +1 -1
- package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +9 -5
- package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +156 -23
- package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +1 -0
- package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +9 -2
- package/src/gdskills/bundled/skills/core/reviewer-skill-creator/SKILL.md +42 -5
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +67 -74
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +24 -8
- package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +12 -22
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +44 -31
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +4 -4
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +2 -2
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +20 -6
- package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +67 -9
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +6 -6
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +45 -5
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +88 -32
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +52 -41
- package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +32 -1
- package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +29 -4
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +17 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +17 -0
- package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +32 -2
- package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +14 -2
- package/src/gdskills/bundled/skills/planning/interview/SKILL.md +30 -8
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +33 -7
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +17 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +17 -0
- package/src/gdskills/bundled/skills/planning/planner/SKILL.md +17 -0
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +27 -10
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +16 -0
- package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +16 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +4 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +4 -0
- package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +4 -0
- package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +4 -0
- package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +31 -4
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +27 -3
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +29 -4
- package/src/gdskills/bundled/skills/quality/api-truth/SKILL.md +226 -0
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +25 -5
- package/src/gdskills/bundled/skills/quality/commit/SKILL.md +26 -5
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +26 -5
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +27 -4
- package/src/gdskills/bundled/skills/quality/deprecation-path/SKILL.md +268 -0
- package/src/gdskills/bundled/skills/quality/fresh-eyes/SKILL.md +190 -0
- package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +30 -9
- package/src/gdskills/bundled/skills/quality/pr/SKILL.md +25 -5
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +27 -4
- package/src/gdskills/bundled/skills/quality/push/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/root-cause/SKILL.md +204 -0
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +25 -4
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +31 -5
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +32 -11
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +42 -7
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +43 -3
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +46 -4
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +46 -6
- package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +5 -5
- package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +5 -6
- package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +6 -6
- package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +37 -3
- package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +38 -4
- package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +4 -6
- package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +37 -3
- package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +5 -7
- package/src/gdskills/bundled/skills/review/review-layout/SKILL.md +24 -3
- package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +5 -5
- package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +49 -64
- package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +1 -2
- package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +1 -5
- package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +53 -9
- package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +11 -11
- package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +9 -8
- package/src/gdskills/bundled/skills/review/review-regression/SKILL.md +33 -2
- package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +6 -4
- package/src/gdskills/bundled/skills/review/review-style/SKILL.md +5 -5
- package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +41 -3
- package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +2 -2
- package/src/gdskills/bundled/rules/core/review-agent-profile.mdc +0 -49
- package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +0 -48
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +0 -353
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +0 -353
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +0 -353
- package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +0 -353
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +0 -655
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +0 -434
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +0 -434
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +0 -434
- package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +0 -434
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +0 -163
- package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +0 -163
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +0 -373
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +0 -374
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +0 -2190
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +0 -2190
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +0 -2190
- package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +0 -2190
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +0 -659
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +0 -659
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +0 -659
- package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +0 -659
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +0 -90
- package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +0 -90
- package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +0 -187
- package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +0 -187
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +0 -105
- package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +0 -105
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +0 -193
- package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +0 -193
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +0 -87
- package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +0 -87
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +0 -100
- package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +0 -100
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +0 -84
- package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +0 -84
- package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +0 -66
- package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +0 -66
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +0 -66
- package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +0 -66
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +0 -81
- package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +0 -81
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +0 -70
- package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +0 -70
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +0 -83
- package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +0 -83
- package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +0 -75
- package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +0 -75
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +0 -378
- package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +0 -378
- package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +0 -52
- package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +0 -52
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +0 -108
- package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +0 -108
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +0 -75
- package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +0 -75
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +0 -339
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +0 -339
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +0 -339
- package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +0 -339
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +0 -203
- package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +0 -203
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +0 -243
- package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +0 -243
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +0 -259
- package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +0 -259
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +0 -168
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +0 -168
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +0 -168
- package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +0 -168
|
@@ -1,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
|
-
- "
|
|
6
|
-
- "
|
|
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: "
|
|
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: `
|
|
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
|
-
|
|
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
|
|
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
|
-
- "
|
|
6
|
-
- "
|
|
7
|
-
- "
|
|
5
|
+
- "analyze issue"
|
|
6
|
+
- "decompose issue"
|
|
7
|
+
- "break down issue"
|
|
8
8
|
- "Issue to tasks"
|
|
9
9
|
- "Plan issue implementation"
|
|
10
10
|
metadata:
|
|
11
11
|
author: "MrCipherSmith"
|
|
12
12
|
version: "1.1.0"
|
|
13
|
-
category: "
|
|
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
|
-
- "
|
|
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: "
|
|
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
|
-
- "
|
|
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>/
|
|
608
|
+
CONTEXT_LOCATION: <JOBS_ROOT>/<job-name>/ai/context.md
|
|
614
609
|
```
|
|
615
610
|
|
|
616
|
-
**Context versioning:**
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
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> ←
|
|
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
|
-
|
|
774
|
-
|
|
775
|
-
|
|
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>/
|
|
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>/
|
|
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>/
|
|
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 --
|
|
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>/
|
|
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
|
|
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
|