@ngockhoale/ukit 1.5.22 → 1.5.23

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,18 @@
2
2
 
3
3
  All notable changes to UKit are documented here.
4
4
 
5
+ ## 1.5.23 - 2026-06-10
6
+
7
+ ### Added
8
+
9
+ - `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.
10
+
11
+ ## 1.5.22 - 2026-06-09
12
+
13
+ ### Changed
14
+
15
+ - Internal: bumped version for release.
16
+
5
17
  ## 1.5.21 - 2026-06-09
6
18
 
7
19
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngockhoale/ukit",
3
- "version": "1.5.22",
3
+ "version": "1.5.23",
4
4
  "description": "Install/update an index-first AI workspace for Claude Code, Antigravity, OpenAI Codex, and OpenCode.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -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
+ ```