@ngockhoale/ukit 1.5.22 → 1.5.24
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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to UKit are documented here.
|
|
4
4
|
|
|
5
|
+
## 1.5.24 - 2026-06-10
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Register `command-handoff-fullstack` in `manifests/platform.full.yaml` so `ukit install` now copies `handoff-fullstack.md` to target projects. Previously the template existed but was missing from the manifest.
|
|
10
|
+
|
|
11
|
+
## 1.5.23 - 2026-06-10
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- `handoff-fullstack`: new all-in-one slash command combining `handoff-create` + `handoff-implement` + `handoff-review` into a single pipeline. Per-step model split (haiku/unic-lite for light work, sonnet/unic-code for implementation, opus/unic-smart for planning + review), plan auto-commit, conditional push on full approval, always-on worktree/branch cleanup, guaranteed clean git state at cycle end.
|
|
16
|
+
|
|
17
|
+
## 1.5.22 - 2026-06-09
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Internal: bumped version for release.
|
|
22
|
+
|
|
5
23
|
## 1.5.21 - 2026-06-09
|
|
6
24
|
|
|
7
25
|
### Changed
|
|
@@ -879,6 +879,18 @@ items:
|
|
|
879
879
|
packs:
|
|
880
880
|
- core
|
|
881
881
|
|
|
882
|
+
- id: command-handoff-fullstack
|
|
883
|
+
type: command
|
|
884
|
+
sourceTemplate: .claude/commands/ukit/handoff-fullstack.md
|
|
885
|
+
targetPath: .claude/commands/ukit/handoff-fullstack.md
|
|
886
|
+
requires:
|
|
887
|
+
- command-handoff-create
|
|
888
|
+
mergeStrategy: overwrite_with_backup
|
|
889
|
+
variables: []
|
|
890
|
+
enabledByDefault: true
|
|
891
|
+
packs:
|
|
892
|
+
- core
|
|
893
|
+
|
|
882
894
|
- id: provider-compat-config
|
|
883
895
|
type: config
|
|
884
896
|
sourceTemplate: .claude/config/providers.md
|
package/package.json
CHANGED
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
# /ukit:handoff-fullstack — Full Pipeline: Plan → Implement → Review
|
|
2
|
+
|
|
3
|
+
**Role: ORCHESTRATOR**
|
|
4
|
+
**Tool: any** (Claude Code / Codex / Kilo / OpenCode — your choice)
|
|
5
|
+
|
|
6
|
+
## Model Split
|
|
7
|
+
|
|
8
|
+
| Work type | Model |
|
|
9
|
+
|-----------|-------|
|
|
10
|
+
| Light work (git ops, reads, summaries, consolidation) | haiku · unic-lite · lightest available |
|
|
11
|
+
| Implementation (TDD, write code, edit files) | sonnet · unic-code · code model |
|
|
12
|
+
| Planning + Review (reasoning, design, verification) | opus · unic-smart · strongest available |
|
|
13
|
+
|
|
14
|
+
> Claude Code: spawn `ukit-small-task-maintainer` (haiku) for light steps; spawn `handoff-planner` (opus) for planning; spawn `feature-implementer` (sonnet) agents for implementation; spawn `code-reviewer` (opus) per task for review.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Problem / feature
|
|
19
|
+
$ARGUMENTS
|
|
20
|
+
|
|
21
|
+
> **If `$ARGUMENTS` is empty:** Do NOT proceed. Ask the user: "What problem or feature would you like to tackle in this handoff cycle? Please describe it in one or more sentences." Wait for the answer before running any phase.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Phase 1+2 — Plan (strong model)
|
|
26
|
+
|
|
27
|
+
### P1 — Read context (lite model)
|
|
28
|
+
|
|
29
|
+
Use the lightest model available. Read and return a compact summary of:
|
|
30
|
+
|
|
31
|
+
1. `docs/AI_HANDOFF/INDEX.md` — current tasks + statuses (or "empty / no tasks")
|
|
32
|
+
2. `docs/AI_HANDOFF/ACTIVE.md` — active cycle info (or "no active cycle")
|
|
33
|
+
3. `docs/AI_HANDOFF/RULES.md` — PLAN.md 6-section format, Task Gate required fields, state machine
|
|
34
|
+
4. `docs/AI_HANDOFF/tasks/_TEMPLATE.md` — task file structure
|
|
35
|
+
|
|
36
|
+
Return a compact summary. Do NOT write any files yet.
|
|
37
|
+
|
|
38
|
+
> Claude Code: spawn `ukit-small-task-maintainer` (haiku) for P1.
|
|
39
|
+
|
|
40
|
+
### P2 — Write PLAN.md + task files (strong model)
|
|
41
|
+
|
|
42
|
+
Switch to strongest model (opus / unic-smart). Use P1 summary — do NOT re-read files.
|
|
43
|
+
|
|
44
|
+
1. **Guard — check INDEX statuses:**
|
|
45
|
+
- All tasks are `ready` (planning only) → re-run is allowed: overwrite `PLAN.md` and `TASK-xxx.md` freely (iterative refinement).
|
|
46
|
+
- Any task has status `pending_review`, `changes_requested`, `merge_conflict`, or `blocked` → **STOP**: warn the human — tasks are already in implement/review phase, cannot overwrite safely.
|
|
47
|
+
- No tasks → fresh cycle, proceed.
|
|
48
|
+
|
|
49
|
+
2. **Resolve base branch:**
|
|
50
|
+
```bash
|
|
51
|
+
BASE=$(git symbolic-ref --short HEAD)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
3. **Write `docs/AI_HANDOFF/PLAN.md`** — all 6 sections mandatory:
|
|
55
|
+
- §1 Intent — problem + success definition
|
|
56
|
+
- §2 Scope — in / out of scope; same-wave tasks must not modify the same file (prevents merge conflicts)
|
|
57
|
+
- §3 Approach — solution, trade-offs, alternatives rejected
|
|
58
|
+
- §4 Test Plan — happy path + ≥1 edge case + regression if bugfix (non-negotiable)
|
|
59
|
+
- §5 Verification — exact shell commands executor will run
|
|
60
|
+
- §6 Acceptance — done checklist (prefer verifiable criteria with commands)
|
|
61
|
+
|
|
62
|
+
4. **Create `docs/AI_HANDOFF/tasks/TASK-001.md`, `TASK-002.md`...** from `_TEMPLATE.md`.
|
|
63
|
+
Every task MUST have:
|
|
64
|
+
- Target Files (exact paths — no two tasks in same wave share a file)
|
|
65
|
+
- Dependencies (`TASK-xxx` or `none` — wave structure inferred from this)
|
|
66
|
+
- Test Cases (Type | Name | Expected — ≥1 happy + ≥1 edge case)
|
|
67
|
+
- Test Files (exact paths)
|
|
68
|
+
- Verification Commands (runnable shell commands)
|
|
69
|
+
- Acceptance Criteria (verifiable checklist)
|
|
70
|
+
Missing any field → status `needs_breakdown`, never `ready`.
|
|
71
|
+
|
|
72
|
+
5. **Update `docs/AI_HANDOFF/INDEX.md`** — one row per task, `status=ready`.
|
|
73
|
+
|
|
74
|
+
6. **Update `docs/AI_HANDOFF/ACTIVE.md`:**
|
|
75
|
+
```
|
|
76
|
+
Cycle: <ID> Date: <YYYY-MM-DD> Base: <BASE>
|
|
77
|
+
Goal: <1 sentence>
|
|
78
|
+
Tasks: <N> total
|
|
79
|
+
Status: planning_done — ready for executor
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
7. **Report:** task IDs, dependency graph, any `needs_breakdown` tasks + reason.
|
|
83
|
+
|
|
84
|
+
> Claude Code: spawn `handoff-planner` (opus) with P1 summary + `$ARGUMENTS` problem.
|
|
85
|
+
|
|
86
|
+
### P3 — Commit the plan (lite model)
|
|
87
|
+
|
|
88
|
+
Use the lightest model. Run:
|
|
89
|
+
```bash
|
|
90
|
+
git add docs/AI_HANDOFF/ && git commit -m "handoff: plan — <goal>"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Replace `<goal>` with the one-sentence goal from ACTIVE.md. This locks the plan in git before any implementation begins.
|
|
94
|
+
|
|
95
|
+
> Claude Code: spawn `ukit-small-task-maintainer` (haiku) for P3.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Phase 3 — Implement (code model)
|
|
100
|
+
|
|
101
|
+
### I1 — Setup + verify (lite model)
|
|
102
|
+
|
|
103
|
+
Use the lightest model. Read:
|
|
104
|
+
- `docs/AI_HANDOFF/ACTIVE.md` → get `Base: <BASE>`
|
|
105
|
+
- `docs/AI_HANDOFF/INDEX.md` → collect all `ready` tasks
|
|
106
|
+
|
|
107
|
+
If no ready tasks → report and stop.
|
|
108
|
+
|
|
109
|
+
Verify working tree is clean after the plan commit:
|
|
110
|
+
```bash
|
|
111
|
+
git status # must be clean — plan commit already done in P3
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
If working tree is dirty → stop. Ask human to resolve uncommitted changes first.
|
|
115
|
+
|
|
116
|
+
> Claude Code: spawn `ukit-small-task-maintainer` (haiku) for I1.
|
|
117
|
+
|
|
118
|
+
### I2 — Infer wave groups
|
|
119
|
+
|
|
120
|
+
Read each `docs/AI_HANDOFF/tasks/TASK-xxx.md` for `Dependencies` field:
|
|
121
|
+
- Wave 1: tasks with `Dependencies: none` (or all deps already `done`)
|
|
122
|
+
- Wave N+1: tasks whose deps are all in Wave N or earlier
|
|
123
|
+
- Chain A→B→C = 3 waves of 1 task each (sequential)
|
|
124
|
+
- Independent A, B, C = 1 wave of 3 tasks (parallel)
|
|
125
|
+
|
|
126
|
+
### I3 — Execute wave by wave (code model agents)
|
|
127
|
+
|
|
128
|
+
For each wave:
|
|
129
|
+
|
|
130
|
+
**3a — Create worktrees** (one per task, from `$BASE`):
|
|
131
|
+
```bash
|
|
132
|
+
git worktree add -b handoff/task-xxx .worktrees/task-xxx $BASE
|
|
133
|
+
# (omit -b if branch already exists)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**3b — Run tasks in parallel** — one code-model agent per task, each in its own worktree. Each agent:
|
|
137
|
+
```
|
|
138
|
+
Read docs/AI_HANDOFF/tasks/TASK-xxx.md
|
|
139
|
+
|
|
140
|
+
TDD — mandatory:
|
|
141
|
+
1. Write tests from §Test Cases
|
|
142
|
+
cd .worktrees/task-xxx && <test command>
|
|
143
|
+
Confirm RED (immediately GREEN → test is wrong — flag this)
|
|
144
|
+
2. Implement → run → confirm GREEN
|
|
145
|
+
3. Run §Verification Commands inside the worktree:
|
|
146
|
+
cd .worktrees/task-xxx && <each verification command>
|
|
147
|
+
Paste full output.
|
|
148
|
+
|
|
149
|
+
DO NOT run: git add, git commit, git push — leave files as-is in worktree.
|
|
150
|
+
|
|
151
|
+
Executor Report (append to task file — do NOT touch INDEX.md):
|
|
152
|
+
## Executor Report
|
|
153
|
+
EXECUTOR_TOOL: <tool>
|
|
154
|
+
EXECUTOR_MODEL: <exact model ID — mandatory>
|
|
155
|
+
EXECUTOR_SUBAGENT: <name or "-">
|
|
156
|
+
Verification Output: <paste full output>
|
|
157
|
+
Status: PASS | FAIL
|
|
158
|
+
Note: <issues or "none">
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
> Claude Code: spawn `feature-implementer` (sonnet) agents in parallel, one per task in the wave.
|
|
162
|
+
|
|
163
|
+
**3c — Copy changes back + delete worktrees** (orchestrator, after each task reports):
|
|
164
|
+
|
|
165
|
+
For **PASS + EXECUTOR_MODEL present:**
|
|
166
|
+
```bash
|
|
167
|
+
WORKTREE=".worktrees/task-xxx"
|
|
168
|
+
|
|
169
|
+
# Copy modified tracked files to main working tree
|
|
170
|
+
git -C "$WORKTREE" diff --name-only | while read f; do
|
|
171
|
+
mkdir -p "$(dirname "$f")"
|
|
172
|
+
cp "$WORKTREE/$f" "$f"
|
|
173
|
+
done
|
|
174
|
+
|
|
175
|
+
# Copy new untracked files
|
|
176
|
+
git -C "$WORKTREE" ls-files --others --exclude-standard | while read f; do
|
|
177
|
+
mkdir -p "$(dirname "$f")"
|
|
178
|
+
cp "$WORKTREE/$f" "$f"
|
|
179
|
+
done
|
|
180
|
+
|
|
181
|
+
# Delete worktree and branch immediately
|
|
182
|
+
git worktree remove "$WORKTREE" --force
|
|
183
|
+
git branch -D handoff/task-xxx
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
For **FAIL:**
|
|
187
|
+
```bash
|
|
188
|
+
git worktree remove .worktrees/task-xxx --force
|
|
189
|
+
git branch -D handoff/task-xxx
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
For **EXECUTOR_MODEL missing:**
|
|
193
|
+
```bash
|
|
194
|
+
git worktree remove .worktrees/task-xxx --force
|
|
195
|
+
git branch -D handoff/task-xxx
|
|
196
|
+
# mark needs_executor_report in INDEX
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Worktrees are **always deleted immediately** — no exceptions.
|
|
200
|
+
|
|
201
|
+
### I4 — Consolidate + update INDEX (lite model)
|
|
202
|
+
|
|
203
|
+
After all waves complete:
|
|
204
|
+
|
|
205
|
+
1. Update `docs/AI_HANDOFF/INDEX.md`:
|
|
206
|
+
- PASS tasks → `pending_review`
|
|
207
|
+
- FAIL tasks → `blocked`
|
|
208
|
+
- EXECUTOR_MODEL missing → `needs_executor_report`
|
|
209
|
+
|
|
210
|
+
2. Verify cleanup:
|
|
211
|
+
```bash
|
|
212
|
+
git worktree list # must show only main worktree
|
|
213
|
+
git branch | grep handoff # must be empty
|
|
214
|
+
git diff --stat # summary of all uncommitted changes
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
> Claude Code: spawn `ukit-small-task-maintainer` (haiku) for I4.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Phase 4 — Review (strong model)
|
|
222
|
+
|
|
223
|
+
### R1 — Setup (lite model)
|
|
224
|
+
|
|
225
|
+
Use the lightest model. Read:
|
|
226
|
+
- `docs/AI_HANDOFF/ACTIVE.md` → get `Base: <BASE>`
|
|
227
|
+
- `docs/AI_HANDOFF/INDEX.md` → collect `pending_review` tasks
|
|
228
|
+
|
|
229
|
+
Run:
|
|
230
|
+
```bash
|
|
231
|
+
git status # should show modified/new files, no handoff branches/worktrees
|
|
232
|
+
git diff --stat # summary of all changes
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
If `git diff` is empty and `git status` is clean → implement was not completed. Stop and re-run Phase 3.
|
|
236
|
+
|
|
237
|
+
> Claude Code: `ukit-small-task-maintainer` (haiku) for R1 reads; orchestrator handles R1 guard check.
|
|
238
|
+
|
|
239
|
+
### R2 — Model isolation check (strong model, always first)
|
|
240
|
+
|
|
241
|
+
Read `EXECUTOR_MODEL` from each task file `## Executor Report`.
|
|
242
|
+
|
|
243
|
+
| Executor model | Reviewer model | Action |
|
|
244
|
+
|----------------|----------------|--------|
|
|
245
|
+
| present, ≠ reviewer | present | proceed |
|
|
246
|
+
| present, == reviewer | present | **REFUSE** → `changes_requested`: "reviewer ≠ executor required" |
|
|
247
|
+
| missing / blank | any | **REFUSE** → `changes_requested`: "EXECUTOR_MODEL missing — re-run Phase 3" |
|
|
248
|
+
| "unknown" | present | proceed + flag: "executor model unverified — human confirm" |
|
|
249
|
+
|
|
250
|
+
> Claude Code: spawn `code-reviewer` (opus) per task for R2–R4.
|
|
251
|
+
|
|
252
|
+
### R3 — Re-run Verification Commands (strong model)
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
<each command from §Verification Commands across all pending_review tasks>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
If any command fails → verdict `critical_block`. Stop. Do NOT proceed to R4.
|
|
259
|
+
|
|
260
|
+
### R4 — Review unified diff + append verdict (strong model)
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
git diff # all uncommitted changes vs $BASE
|
|
264
|
+
git status # overview of modified/new/deleted files
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Review as one unified diff — correctness, regression risk, security, edge cases, maintainability. Cross-reference each task's intent in `docs/AI_HANDOFF/tasks/TASK-xxx.md`.
|
|
268
|
+
|
|
269
|
+
Append verdict to each task file:
|
|
270
|
+
```
|
|
271
|
+
## Reviewer Verdict
|
|
272
|
+
VERDICT: approved | approved_minor | changes_requested | critical_block
|
|
273
|
+
REVIEWER_MODEL: <your exact model ID>
|
|
274
|
+
EXECUTOR_MODEL: <from Executor Report>
|
|
275
|
+
VERIFICATION_RERUN: PASS | FAIL
|
|
276
|
+
FINDINGS:
|
|
277
|
+
critical: <file:line — what fails> | none
|
|
278
|
+
important: <file:line — risk> | none
|
|
279
|
+
minor: <style/naming> | none
|
|
280
|
+
NEXT_STATUS_FOR_INDEX: <status>
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### R5 — Commit + push or stop (orchestrator)
|
|
284
|
+
|
|
285
|
+
**All tasks `approved` or `approved_minor`:**
|
|
286
|
+
|
|
287
|
+
Update `docs/AI_HANDOFF/INDEX.md`: all approved tasks → `done`.
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
git add . && git commit -m "handoff: implement <goal>" && git push origin $BASE
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Replace `<goal>` with the one-sentence goal from ACTIVE.md.
|
|
294
|
+
|
|
295
|
+
**Any task `changes_requested` or `critical_block`:**
|
|
296
|
+
|
|
297
|
+
Report which tasks need fixes. Do NOT push. Executor re-runs Phase 3 for those tasks.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Cleanup Verification (always)
|
|
302
|
+
|
|
303
|
+
Run at the very end of every cycle, regardless of outcome:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
git worktree list # must show ONLY main worktree
|
|
307
|
+
git branch | grep handoff # must be EMPTY
|
|
308
|
+
git status # clean (fully approved + pushed) or expected partial state
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
If any lingering worktrees or handoff branches found, force-remove them:
|
|
312
|
+
```bash
|
|
313
|
+
# For each lingering worktree/branch:
|
|
314
|
+
git worktree remove .worktrees/<name> --force
|
|
315
|
+
git branch -D handoff/<name>
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Re-run assertions after removal to confirm clean state.
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Final Report
|
|
323
|
+
|
|
324
|
+
```
|
|
325
|
+
handoff-fullstack complete:
|
|
326
|
+
Cycle: <ID>
|
|
327
|
+
Tasks: <N> approved, <M> blocked
|
|
328
|
+
Git: committed + pushed to <branch> | pending human (<M> blocked)
|
|
329
|
+
Worktrees: all cleaned
|
|
330
|
+
Branches: all cleaned
|
|
331
|
+
```
|