@mrciphersmith/keryx 0.2.71 → 0.2.73

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 (162) hide show
  1. package/dist/cli.js +4632 -2229
  2. package/package.json +2 -2
  3. package/src/gdskills/bundled/rules/core/code-review-learned-profile.mdc +81 -0
  4. package/src/gdskills/bundled/rules/core/gproject-contracts.mdc +1 -1
  5. package/src/gdskills/bundled/rules/core/jobs-documentation.mdc +2 -2
  6. package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +8 -4
  7. package/src/gdskills/bundled/rules/core/subagent-context-construction.md +1 -1
  8. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +326 -20
  9. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +320 -22
  10. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +326 -12
  11. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +333 -9
  12. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +94 -6
  13. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +94 -6
  14. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +2 -2
  15. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +94 -6
  16. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +94 -6
  17. package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +3 -3
  18. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +154 -1098
  19. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +154 -1098
  20. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +3 -3
  21. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +154 -1098
  22. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +154 -1098
  23. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +1 -1
  24. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +102 -42
  25. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +102 -42
  26. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +2 -2
  27. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +2 -2
  28. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +115 -49
  29. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +115 -49
  30. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +115 -49
  31. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +115 -49
  32. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +1 -1
  33. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +16 -7
  34. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +16 -7
  35. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +1 -1
  36. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +16 -7
  37. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +16 -7
  38. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +973 -510
  39. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +973 -510
  40. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +944 -514
  41. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +973 -510
  42. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +973 -510
  43. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/input-contract.schema.json +38 -28
  44. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/orchestrator-prompt.md +98 -66
  45. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/output-contract.schema.json +27 -5
  46. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +300 -55
  47. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +300 -55
  48. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +120 -37
  49. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +300 -55
  50. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +300 -55
  51. package/src/gdskills/bundled/skills/orchestration/task-implementer/input-contract.schema.json +57 -15
  52. package/src/gdskills/bundled/skills/orchestration/task-implementer/orchestrator-prompt.md +50 -23
  53. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +6 -2
  54. package/src/gdskills/bundled/skills/orchestration/task-implementer/task-request.template.md +18 -12
  55. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +1 -1
  56. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +1 -1
  57. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +168 -9
  58. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +168 -9
  59. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +7 -1
  60. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +7 -1
  61. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +7 -1
  62. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +7 -1
  63. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +215 -9
  64. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +215 -9
  65. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +168 -9
  66. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +168 -9
  67. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +2 -2
  68. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +2 -2
  69. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +2 -2
  70. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +2 -2
  71. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +133 -9
  72. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +133 -9
  73. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +145 -9
  74. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +145 -9
  75. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +210 -9
  76. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +210 -9
  77. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +161 -9
  78. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +161 -9
  79. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +1 -1
  80. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +1 -1
  81. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +1 -1
  82. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +1 -1
  83. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +1 -1
  84. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +1 -1
  85. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +1 -1
  86. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +1 -1
  87. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +1 -1
  88. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +1 -1
  89. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +1 -1
  90. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +1 -1
  91. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +1 -1
  92. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +1 -1
  93. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +1 -1
  94. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +1 -1
  95. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +1 -1
  96. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +1 -1
  97. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +15 -1
  98. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +248 -165
  99. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +15 -1
  100. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +359 -19
  101. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +1 -1
  102. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +1 -1
  103. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +1 -1
  104. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +1 -1
  105. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +1 -1
  106. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +1 -1
  107. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +299 -24
  108. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +296 -31
  109. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +309 -18
  110. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +312 -17
  111. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +29 -30
  112. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +29 -30
  113. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +2 -2
  114. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +29 -30
  115. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +29 -30
  116. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.codex.md +243 -0
  117. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.cursor.md +243 -0
  118. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.md +243 -0
  119. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.opencode.md +243 -0
  120. package/src/gdskills/bundled/skills/review/code-learned-review/SKILL.zed.md +243 -0
  121. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +19 -23
  122. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +19 -23
  123. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +1 -1
  124. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +19 -23
  125. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +19 -23
  126. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +17 -24
  127. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +17 -24
  128. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +1 -1
  129. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +17 -24
  130. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +17 -24
  131. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +1 -1
  132. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +1 -1
  133. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +1 -1
  134. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +1 -1
  135. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +1 -1
  136. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +1 -1
  137. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +1 -1
  138. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +1 -1
  139. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +2 -2
  140. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +26 -13
  141. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +1 -1
  142. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +36 -17
  143. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +1 -1
  144. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +1 -1
  145. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +1 -1
  146. package/src/gdskills/bundled/skills/review/review-verifier/SKILL.md +1 -1
  147. package/src/gdskills/bundled/skills/shared/git-merge-base.md +1 -1
  148. package/src/gdskills/bundled/rules/core/code-review-b091-profile.mdc +0 -48
  149. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.claude.md +0 -46
  150. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.claude.md +0 -94
  151. package/src/gdskills/bundled/skills/quality/changelog/SKILL.claude.md +0 -45
  152. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.claude.md +0 -40
  153. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.claude.md +0 -45
  154. package/src/gdskills/bundled/skills/quality/deploy/SKILL.claude.md +0 -42
  155. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.claude.md +0 -48
  156. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.claude.md +0 -40
  157. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.claude.md +0 -30
  158. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.codex.md +0 -209
  159. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.cursor.md +0 -209
  160. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.md +0 -208
  161. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.opencode.md +0 -209
  162. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.zed.md +0 -209
@@ -10,10 +10,10 @@ triggers:
10
10
  - "Implement issue task"
11
11
  metadata:
12
12
  author: "MrCipherSmith"
13
- version: "1.2.0"
13
+ version: "1.3.0"
14
14
  category: "implementation"
15
15
  agent_worthy: true
16
- compatible_harnesses: "cursor,codex,zed,opencode"
16
+ compatible_harnesses: "claude,cursor,codex,zed,opencode"
17
17
  license: "MIT"
18
18
  ---
19
19
 
@@ -69,7 +69,7 @@ TASK: (from JSON object passed by orchestrator)
69
69
  task_name: string, e.g. "Add validation to form"
70
70
  task_type: string: ui_component|store_logic|service_api|refactoring|fix|mixed
71
71
  complexity: string: low|medium|high
72
- dependencies: array of task_id strings (already satisfied — orchestrator ensures order)
72
+ dependencies: array of task_id strings this task reads from
73
73
  description: string: what to implement
74
74
  target_files: array of file path strings
75
75
  acceptance_criteria: array of criterion strings
@@ -95,17 +95,46 @@ WORKSPACE:
95
95
  ```
96
96
  FIX_CONTEXT:
97
97
  review_feedback: structured findings from reviewer (file, line, severity, message)
98
- original_task_id: the task that introduced the issue
99
- iteration: fix iteration number (1 or 2)
98
+ original_task_ids: the tasks that introduced the findings (array)
99
+ iteration: fix iteration number, 1..3 — the same repair bound as 5.4
100
100
  ```
101
101
 
102
- **1.4 Validate:**
102
+ **1.4 Validate the request against the contract:**
103
+
104
+ Write the request you were handed to a file and run:
105
+
106
+ ```bash
107
+ keryx skills contracts validate <request.json> --schema task-implementer-input
103
108
  ```
104
- ASSERT task_id IS NOT EMPTY → otherwise ABORT("Missing task_id")
105
- ASSERT task_type IN valid_types → otherwise ABORT("Invalid task_type")
106
- ASSERT target_files IS NOT EMPTY → otherwise ABORT("No target files")
107
- ASSERT codebase_path EXISTS → otherwise ABORT("Codebase path not found")
108
- ASSERT branch IS NOT EMPTY → otherwise ABORT("Wrong branch checked out")
109
+
110
+ Non-zero exit means the dispatch is malformed — ABORT and report `NEEDS_CONTEXT`
111
+ with the validator's own message. Do not repair the request yourself; the
112
+ orchestrator owns it.
113
+
114
+ The refusals are the contract's, not a checklist you run by eye
115
+ (`input-contract.schema.json`, registered in `src/gdskills/contracts.ts`):
116
+
117
+ | What is refused | Where the schema says so |
118
+ |---|---|
119
+ | Missing `task_id` / `task_name` / `task_type` / `description` / `target_files` / `acceptance_criteria` | `task.required` |
120
+ | `task_type` outside `ui_component\|store_logic\|service_api\|refactoring\|fix\|mixed` | `task.task_type.enum` |
121
+ | A `task_id` that is not `task-<n>` | `task.task_id.pattern` |
122
+ | Empty `target_files` or empty `acceptance_criteria` | `minItems: 1` on both |
123
+ | Missing `codebase_path` / `branch` / `issue_number` | `workspace.required` |
124
+ | `skip_confirmation` anything but `true` | `automation.skip_confirmation.const` |
125
+ | `max_self_fix_attempts` above 3 | `automation.max_self_fix_attempts.maximum` |
126
+ | Any field the contract does not declare | `additionalProperties: false` |
127
+
128
+ The list above is a reading aid. The schema is the authority, and if the two
129
+ disagree the schema wins.
130
+
131
+ Two things a schema cannot check, because they are facts about the machine
132
+ rather than about the payload. Check them yourself and ABORT with
133
+ `STATUS: NEEDS_CONTEXT` on either:
134
+
135
+ ```bash
136
+ test -d "<codebase_path>" # otherwise: codebase path not found
137
+ git -C "<codebase_path>" rev-parse --abbrev-ref HEAD # must equal <branch>
109
138
  ```
110
139
 
111
140
  **1.5 TDD Check (if `test_case_specs` is present):**
@@ -148,8 +177,10 @@ This step is read-only and inline; do not spawn a subagent for it.
148
177
  - Read the `context` field for additional type/signature info
149
178
 
150
179
  **2.2 Read existing tests and stories:**
151
- - If `existing_tests` is not "none" — read each test file
152
- - If `existing_stories` is not "none" — read each story file
180
+ - `existing_tests` and `existing_stories` are arrays and default to `[]`
181
+ (`input-contract.schema.json`). Empty means none; the string `"none"` is not a
182
+ legal value and a request carrying it is refused by 1.4
183
+ - Read each file listed in either array
153
184
  - Understand existing test patterns (describe/it structure, mocks, fixtures)
154
185
 
155
186
  **2.3 Read module neighbors:**
@@ -187,10 +218,10 @@ Based on what you're implementing, load and follow the relevant project rules.
187
218
  - `async`/`await` or queue code → `async-patterns.mdc`
188
219
  - New architectural layers or modules → `clean-architecture.mdc`
189
220
 
190
- Rules are located at:
191
- - OpenCode: `.metaproject/rules/core/<rule>.mdc`
192
- - Cursor: `.cursor/rules/core/<rule>.mdc`
193
- - Codex: `.metaproject/rules/core/<rule>.mdc`
221
+ Rules live at `.metaproject/rules/core/<rule>.mdc` on every harness — that is the
222
+ one tree `keryx init` installs and the one every build of this skill reads.
223
+ Cursor additionally mirrors them under `.cursor/rules/core/<rule>.mdc`; when both
224
+ are present they are copies of the same file, so read either.
194
225
 
195
226
  **Output of Phase 2:** Mental model of the implementation:
196
227
  ```
@@ -308,28 +339,38 @@ Commit type mapping:
308
339
  Run verification checks appropriate to the task type.
309
340
 
310
341
  **5.1 Always run:**
342
+
311
343
  ```bash
312
- npm run lint # ESLint (errors only)
313
- npm run type-check # tsc --noEmit
344
+ keryx health run --changed --source eslint,typescript
314
345
  ```
315
346
 
347
+ Lint and type-check in one call, over the changed files only. Do NOT hard-code a
348
+ package manager and a script name: the project may not be an npm project, and
349
+ `src/health/sources/eslint.ts` and `src/health/sources/typescript.ts` resolve the
350
+ real invocation. The run writes a normalized report; `keryx health status` prints
351
+ it.
352
+
316
353
  **5.2 Run if tests exist:**
354
+
317
355
  ```bash
318
- npm test # Vitest run
356
+ keryx test run --changed --strict
319
357
  ```
320
358
 
321
- If tests were created or modified, ensure they pass.
359
+ `src/testing/service.ts:780` detects `bun` / `pnpm` / `yarn` / `npm` from the
360
+ lockfile and builds the argv from the project's own test script — the
361
+ if-chain you would otherwise write in shell, already written. `--strict` makes a
362
+ non-zero exit the signal; if tests were created or modified they must pass.
322
363
 
323
- **5.3 Run if stories were created (optional, only if build is available):**
364
+ **5.3 Run if stories were created (optional, only if the script exists):**
324
365
  ```bash
325
- npm run build-storybook # Verify stories compile
366
+ <pm> run build-storybook # <pm> is the package manager keryx test run detected
326
367
  ```
327
368
 
328
369
  **5.4 Handle failures:**
329
370
 
330
371
  | Failure | Action |
331
372
  |---------|--------|
332
- | Lint errors | Fix automatically using `npm run lint:fix:changed`, re-run lint |
373
+ | Lint errors | Fix them in code, re-run `keryx health run --changed` |
333
374
  | Type errors | Fix the type errors in code, re-commit |
334
375
  | Test failures | Fix failing tests, re-commit |
335
376
  | Story build failure | Fix story code, re-commit |
@@ -353,7 +394,9 @@ identical outputs cost the whole budget to learn what the second one already
353
394
  said. Report the block instead, naming what repeated.
354
395
 
355
396
 
356
- **ROLLBACK POLICY**: If implementation fatally fails (e.g. tests still failing after 3 attempts or unresolvable compilation errors), you MUST run `git reset --hard` to clean the worktree before reporting the failure in Phase 6, unless explicitly instructed to leave it dirty.
397
+ **ROLLBACK POLICY**: If implementation fatally fails (tests still failing after 3 attempts, or unresolvable compilation errors), restore ONLY the files this task changed — `git checkout -- <your files>` for tracked ones, delete the untracked ones you created — then report the failure in Phase 6.
398
+
399
+ **Never run `git reset --hard`, `git clean`, or any unscoped revert.** You do not own the worktree. `job-orchestrator` dispatches implementers in PARALLEL WAVES sharing a single worktree, so an unscoped reset destroys a wave-mate's uncommitted work — work that is not yours, cannot be recovered, and whose loss is invisible to you because the other agent's failure surfaces somewhere else entirely. If you cannot identify which files are yours, leave the tree exactly as it is and say so in the report: a dirty tree is recoverable, a destroyed one is not.
357
400
 
358
401
  **5.5 Re-commit fixes if any:**
359
402
  ```bash
@@ -398,7 +441,41 @@ Write full JSON to `<JOBS_ROOT>/<JOB_NAME>/results/<task_id>.json`:
398
441
 
399
442
  Set `skill_drift` from Phase 2.0b: if the project-skill you used was not `fresh`, or the code you wrote diverged from what a skill documents, name the skill and the divergence. The orchestrator uses this to decide whether to trigger `skills learn` (do NOT run `learn` yourself — it is a mutating step the orchestrator dispatches; see `rules/core/skill-lifecycle.mdc`).
400
443
 
401
- If `JOB_NAME` is not provided, skip the file write.
444
+ Then check the shape and record the file — two commands, both of which refuse
445
+ rather than warn:
446
+
447
+ ```bash
448
+ keryx skills contracts validate <JOBS_ROOT>/<JOB_NAME>/results/<task_id>.json \
449
+ --schema task-implementer-output
450
+ keryx job document <JOB_NAME> --type implementation-report \
451
+ --file <JOBS_ROOT>/<JOB_NAME>/results/<task_id>.json
452
+ ```
453
+
454
+ - `contracts validate` exits non-zero on a missing required field, a `status`
455
+ outside `success|partial|failed`, a `task_id` that is not `task-<n>`, or any
456
+ key the contract does not declare (`additionalProperties: false`). Fix the
457
+ result and re-run; do not report a result the contract rejects.
458
+ - `job document` **refuses when the file does not exist** — "`--file` not found:
459
+ … Write the document first, then record it" (`src/job/service.ts`) — and
460
+ refuses a `--type` outside `analysis|implementation-report|review|verification-report`
461
+ and a job name no package matches. On success it copies the result into the
462
+ job package and appends it to `documentation.documents_created` in
463
+ `state.json`, which is what makes "the result was recorded" a fact
464
+ `keryx job status <JOB_NAME> --json` can be asked about instead of a sentence
465
+ in this file.
466
+
467
+ One caveat, stated because it is real: the package holds ONE
468
+ `implementation-report.json` per job, so a later task in the same wave replaces
469
+ it. The per-task files under `results/` are the complete set; the recorded
470
+ document is the most recent.
471
+
472
+ If `JOB_NAME` is not provided, skip the file write and both commands — there is
473
+ no job package to record against.
474
+
475
+ The step's own status is the orchestrator's to write (`keryx job step <JOB_NAME>
476
+ <step-id> --status …`). Do not write it yourself: `src/job/plans.ts` makes
477
+ `implement` ONE step for a whole wave, so a single task cannot close it, and
478
+ `keryx job complete` refuses while any step is still open.
402
479
 
403
480
  **6.2 Emit compact STATUS response:**
404
481
 
@@ -415,17 +492,18 @@ The inline response must contain only: STATUS line + Completed bullets + Files c
415
492
 
416
493
  ## Automation Settings
417
494
 
418
- This skill is designed to run fully autonomously. The following settings control behavior:
495
+ This skill is designed to run fully autonomously. The settings, their types,
496
+ their defaults and their bounds are declared in one place —
497
+ `input-contract.schema.json`, the `automation` object — and are checked by the
498
+ validation in Phase 1.4. To see them:
499
+
500
+ ```bash
501
+ keryx skills contracts list # names task-implementer-input and its file
502
+ ```
419
503
 
420
- | Setting | Default | Options | Description |
421
- |---------|---------|---------|-------------|
422
- | `auto_commit` | `true` | true/false | Automatically commit changes |
423
- | `verify_lint` | `true` | true/false | Run ESLint after implementation |
424
- | `verify_types` | `true` | true/false | Run type-check after implementation |
425
- | `verify_tests` | `true` | true/false | Run tests after implementation |
426
- | `verify_stories` | `false` | true/false | Build storybook to verify stories |
427
- | `max_self_fix_attempts` | `3` | 1-5 | Max attempts to fix verification failures |
428
- | `commit_message_style` | `conventional` | `conventional` | Commit format |
504
+ They are deliberately not restated here. The table that used to sit in this spot
505
+ said `max_self_fix_attempts: 1-5` while Phase 5.4 says the maximum is 3, and a
506
+ second copy of a schema is how that happens.
429
507
 
430
508
  ---
431
509
 
@@ -454,7 +532,12 @@ This skill is designed to run fully autonomously. The following settings control
454
532
  7. **DO** use `runInAction()` after every `await` in MobX actions.
455
533
  8. **DO** commit with conventional commit format referencing the issue number.
456
534
  9. **DO** verify your work before reporting.
457
- 10. Return the JSON result object as your **final message** to the orchestrator.
535
+ 10. **DO** make `STATUS: <TOKEN>` the first line of your final message, and put no
536
+ JSON in the response body. The full JSON result is the file Phase 6.1 writes
537
+ and records. (This rule used to say the opposite — "return the JSON result
538
+ object as your final message" — which contradicted 6.2, `## Reporting
539
+ Results`, and `parseChildResult`, the production function that throws on any
540
+ first line that is not a canonical STATUS token.)
458
541
 
459
542
  ---
460
543