claude-plugin-viban 1.2.2 → 1.3.1
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/.claude-plugin/plugin.json +1 -1
- package/README.md +90 -74
- package/bin/viban +19 -6
- package/commands/add.md +17 -6
- package/commands/assign.md +8 -211
- package/package.json +1 -1
- package/skills/add/SKILL.md +17 -6
- package/skills/assign/SKILL.md +47 -151
- package/skills/parallel-assign/SKILL.md +4 -2
- package/commands/sync.md +0 -99
- package/skills/sync/SKILL.md +0 -100
package/README.md
CHANGED
|
@@ -24,14 +24,14 @@ The most effective way to use viban is with **multiple terminal sessions**:
|
|
|
24
24
|
│ Session 1 │ │ Session 2 │ │ Session 3 │
|
|
25
25
|
│ │ │ │ │ │
|
|
26
26
|
│ Product QA │ │ Issue Work │ │ viban TUI │
|
|
27
|
-
│ + /viban:
|
|
27
|
+
│ + /viban:add │ │ + /viban:assign │ │ │
|
|
28
28
|
│ │ │ │ │ (always open) │
|
|
29
29
|
│ Find bugs, │ │ Pick & resolve │ │ Monitor board │
|
|
30
30
|
│ register issues │ │ issues │ │ in real-time │
|
|
31
31
|
└───────────────────┘ └───────────────────┘ └───────────────────┘
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
- **Session 1**: QA your product, find issues, run `/viban:
|
|
34
|
+
- **Session 1**: QA your product, find issues, run `/viban:add` to register them
|
|
35
35
|
- **Session 2**: Run `/viban:assign` to pick the next issue and resolve it
|
|
36
36
|
- **Session 3**: Keep `viban` TUI open to monitor the board
|
|
37
37
|
|
|
@@ -39,7 +39,7 @@ This separation keeps your workflow clean and prevents context switching.
|
|
|
39
39
|
|
|
40
40
|
## Features
|
|
41
41
|
|
|
42
|
-
- **
|
|
42
|
+
- **4-Column Kanban Board**: `backlog` → `in_progress` → `review` → `done`
|
|
43
43
|
- **Priority Levels**: P0 (critical) to P3 (low priority)
|
|
44
44
|
- **Type Tags**: bug, feat, chore, refactor
|
|
45
45
|
- **TUI Navigation**: Interactive terminal UI with gum
|
|
@@ -118,12 +118,17 @@ viban # Launch TUI
|
|
|
118
118
|
|
|
119
119
|
```bash
|
|
120
120
|
viban list # Display kanban board
|
|
121
|
-
viban add "Title" "
|
|
121
|
+
viban add "Title" ["Desc"] [P0-P3] [type] [files...] # Create new issue
|
|
122
|
+
viban attach <id> <file1> [file2...] # Attach files to issue
|
|
123
|
+
viban priority <id> <P0-P3> # Set priority
|
|
122
124
|
viban assign [session-id] # Assign top backlog issue
|
|
123
125
|
viban review [id] # Move issue to review
|
|
124
|
-
viban done <id> #
|
|
126
|
+
viban done <id> # Complete & remove
|
|
127
|
+
viban edit <id> # Edit issue in editor
|
|
125
128
|
viban get <id> # Get issue details (JSON)
|
|
126
129
|
viban sync # Sync with external tracker
|
|
130
|
+
viban migrate # Migrate: extract type from title
|
|
131
|
+
viban update # Update to latest version
|
|
127
132
|
viban help # Show help message
|
|
128
133
|
```
|
|
129
134
|
|
|
@@ -133,12 +138,18 @@ viban help # Show help message
|
|
|
133
138
|
# Add a high-priority bug
|
|
134
139
|
viban add "Fix login error" "Users cannot login after password reset" P1 bug
|
|
135
140
|
|
|
141
|
+
# Add an issue with file attachments
|
|
142
|
+
viban add "Refactor auth" "Simplify login flow" P2 refactor src/auth.ts src/login.ts
|
|
143
|
+
|
|
136
144
|
# List all issues
|
|
137
145
|
viban list
|
|
138
146
|
|
|
139
147
|
# Assign first backlog issue to current session
|
|
140
148
|
viban assign
|
|
141
149
|
|
|
150
|
+
# Change priority of issue #3
|
|
151
|
+
viban priority 3 P1
|
|
152
|
+
|
|
142
153
|
# Mark issue #5 as done
|
|
143
154
|
viban done 5
|
|
144
155
|
|
|
@@ -148,48 +159,55 @@ viban get 3
|
|
|
148
159
|
|
|
149
160
|
### Claude Code Integration
|
|
150
161
|
|
|
151
|
-
viban provides commands for automated issue management in Claude Code:
|
|
152
|
-
|
|
153
|
-
#### `/viban:assign` - Auto-resolve next issue
|
|
162
|
+
viban provides skills and commands for automated issue management in Claude Code:
|
|
154
163
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
1. Fetches top backlog issue
|
|
158
|
-
2. Assigns to current session
|
|
159
|
-
3. Analyzes and implements the fix
|
|
160
|
-
4. Marks as review/done upon completion
|
|
161
|
-
|
|
162
|
-
**Use cases:**
|
|
163
|
-
- Autonomous issue resolution
|
|
164
|
-
- Parallel agent workflows
|
|
165
|
-
- Pre-prioritized backlog processing
|
|
166
|
-
|
|
167
|
-
#### `/viban:task` - Create structured issue
|
|
164
|
+
#### `/viban:add` - Register structured issue
|
|
168
165
|
|
|
169
166
|
Analyzes a problem and creates a properly structured viban issue:
|
|
170
167
|
|
|
171
|
-
1.
|
|
172
|
-
2.
|
|
173
|
-
3.
|
|
168
|
+
1. Clarifies the problem if vague
|
|
169
|
+
2. Infers priority and type from description
|
|
170
|
+
3. Registers with proper title, description, priority, type
|
|
171
|
+
4. Optionally enters plan mode to design a solution
|
|
174
172
|
|
|
175
173
|
**Use cases:**
|
|
176
174
|
- Bug reporting
|
|
177
175
|
- Feature requests
|
|
178
176
|
- Converting free-form descriptions to structured issues
|
|
179
177
|
|
|
180
|
-
#### `/viban:
|
|
178
|
+
#### `/viban:assign` - Assign next backlog issue
|
|
179
|
+
|
|
180
|
+
Picks the highest priority backlog issue and assigns it to the current session:
|
|
181
|
+
|
|
182
|
+
1. Assigns top backlog issue
|
|
183
|
+
2. Evaluates description clarity
|
|
184
|
+
3. If unclear, interviews user and enriches the issue description
|
|
185
|
+
|
|
186
|
+
This command is **assignment only** - it does not start implementation. Use your project's workflow (`.viban/workflow.md`) to define what happens next.
|
|
187
|
+
|
|
188
|
+
#### `/viban:parallel-assign` - Parallel resolution with worktrees
|
|
181
189
|
|
|
182
|
-
|
|
190
|
+
Resolves multiple backlog issues simultaneously using isolated git worktrees:
|
|
183
191
|
|
|
184
|
-
1.
|
|
185
|
-
2.
|
|
186
|
-
3.
|
|
187
|
-
4.
|
|
192
|
+
1. Assigns N issues (default: 3, max: 5) and creates worktrees
|
|
193
|
+
2. Spawns one opus agent per issue in its own worktree
|
|
194
|
+
3. Each agent analyzes, implements, commits, and creates a PR
|
|
195
|
+
4. Coordinator collects results, runs tests, and cleans up
|
|
188
196
|
|
|
189
197
|
**Use cases:**
|
|
190
|
-
-
|
|
191
|
-
-
|
|
192
|
-
-
|
|
198
|
+
- Batch processing a backlog
|
|
199
|
+
- Parallel agent workflows with zero interference
|
|
200
|
+
- Rapid issue throughput
|
|
201
|
+
|
|
202
|
+
#### `/viban:setup` - Install & configure
|
|
203
|
+
|
|
204
|
+
Installs all dependencies and optionally configures a project workflow:
|
|
205
|
+
|
|
206
|
+
1. Detects OS and installs missing dependencies (zsh, gum, jq)
|
|
207
|
+
2. Installs/updates viban CLI via npm
|
|
208
|
+
3. Auto-detects project conventions (build/test, commit style, branch naming)
|
|
209
|
+
4. Interviews for workflow preferences (pipeline depth, issue numbering)
|
|
210
|
+
5. Generates `.viban/workflow.md` for `/viban:assign` to follow
|
|
193
211
|
|
|
194
212
|
## External Tracker Sync
|
|
195
213
|
|
|
@@ -208,7 +226,7 @@ viban sync --dry-run
|
|
|
208
226
|
viban sync
|
|
209
227
|
```
|
|
210
228
|
|
|
211
|
-
>
|
|
229
|
+
> **Tip:** Use `viban sync --dry-run` first to preview changes before syncing.
|
|
212
230
|
|
|
213
231
|
### How It Works
|
|
214
232
|
|
|
@@ -290,8 +308,6 @@ backlog → in_progress → review → done
|
|
|
290
308
|
| **feat** | New feature or enhancement |
|
|
291
309
|
| **refactor** | Code restructuring |
|
|
292
310
|
| **chore** | Maintenance tasks |
|
|
293
|
-
| **docs** | Documentation updates |
|
|
294
|
-
| **test** | Test additions/fixes |
|
|
295
311
|
|
|
296
312
|
## Data Structure
|
|
297
313
|
|
|
@@ -332,34 +348,47 @@ This prevents duplicate work and enables parallel agent workflows.
|
|
|
332
348
|
```
|
|
333
349
|
claude-plugin-viban/
|
|
334
350
|
├── .claude-plugin/
|
|
335
|
-
│ └── plugin.json
|
|
351
|
+
│ └── plugin.json # Plugin metadata
|
|
336
352
|
├── .github/
|
|
337
353
|
│ └── workflows/
|
|
338
|
-
│ ├── ci.yml
|
|
339
|
-
│ └── release.yml
|
|
354
|
+
│ ├── ci.yml # CI testing
|
|
355
|
+
│ └── release.yml # NPM publishing
|
|
340
356
|
├── bin/
|
|
341
|
-
│ └── viban
|
|
342
|
-
├── docs/
|
|
343
|
-
│ └── CLAUDE.md # Claude Code integration guide
|
|
357
|
+
│ └── viban # Main TUI/CLI script
|
|
344
358
|
├── commands/
|
|
345
|
-
│
|
|
359
|
+
│ ├── add.md # /viban:add command
|
|
360
|
+
│ ├── assign.md # /viban:assign command
|
|
361
|
+
│ ├── parallel-assign.md # /viban:parallel-assign command
|
|
362
|
+
│ └── setup.md # /viban:setup command
|
|
363
|
+
├── docs/
|
|
364
|
+
│ ├── CLAUDE.md # Claude Code integration guide
|
|
365
|
+
│ └── release.md # Release workflow
|
|
346
366
|
├── scripts/
|
|
347
|
-
│ ├── check-deps.sh
|
|
348
|
-
│ ├──
|
|
367
|
+
│ ├── check-deps.sh # Dependency checker
|
|
368
|
+
│ ├── generate-release-notes.sh # Release notes generator
|
|
369
|
+
│ ├── sync.sh # Core sync engine (provider-agnostic)
|
|
370
|
+
│ ├── sync_create.sh # Sync initialization
|
|
349
371
|
│ ├── providers/
|
|
350
|
-
│ │ └── github.sh
|
|
351
|
-
│ └── tui_coprocess.py
|
|
372
|
+
│ │ └── github.sh # GitHub Issues provider
|
|
373
|
+
│ └── tui_coprocess.py # Persistent Python coprocess for TUI rendering
|
|
352
374
|
├── skills/
|
|
353
|
-
│ ├──
|
|
354
|
-
│ ├──
|
|
355
|
-
│ ├──
|
|
356
|
-
│ └──
|
|
375
|
+
│ ├── add/SKILL.md # /viban:add skill
|
|
376
|
+
│ ├── assign/SKILL.md # /viban:assign skill
|
|
377
|
+
│ ├── parallel-assign/SKILL.md # /viban:parallel-assign skill
|
|
378
|
+
│ └── setup/SKILL.md # /viban:setup skill
|
|
357
379
|
├── tests/
|
|
358
|
-
│ ├── run_all.zsh
|
|
359
|
-
│
|
|
360
|
-
├──
|
|
361
|
-
├──
|
|
362
|
-
|
|
380
|
+
│ ├── run_all.zsh # Test runner
|
|
381
|
+
│ ├── test_cmd_add.zsh # Add command tests
|
|
382
|
+
│ ├── test_coprocess.zsh # Python coprocess tests
|
|
383
|
+
│ ├── test_install.zsh # Installation tests
|
|
384
|
+
│ ├── test_layout.zsh # TUI layout tests
|
|
385
|
+
│ ├── test_pad_width.zsh # Unicode width tests
|
|
386
|
+
│ ├── test_sort_order.zsh # Sort order tests
|
|
387
|
+
│ ├── test_sync.zsh # Sync engine tests
|
|
388
|
+
│ └── test_sync_auto.zsh # Auto-sync tests
|
|
389
|
+
├── LICENSE # MIT License
|
|
390
|
+
├── package.json # NPM package config
|
|
391
|
+
└── README.md # This file
|
|
363
392
|
```
|
|
364
393
|
|
|
365
394
|
## Development
|
|
@@ -370,29 +399,16 @@ claude-plugin-viban/
|
|
|
370
399
|
# Install dependencies
|
|
371
400
|
brew install gum jq
|
|
372
401
|
|
|
373
|
-
#
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
# Run tests
|
|
377
|
-
./bin/viban help
|
|
378
|
-
|
|
379
|
-
# Test in a git repo
|
|
380
|
-
cd /path/to/git/repo
|
|
381
|
-
viban add "Test issue" "Test description" P2 feat
|
|
382
|
-
viban list
|
|
402
|
+
# Run the full test suite (8 suites, 39 tests)
|
|
403
|
+
zsh tests/run_all.zsh
|
|
383
404
|
```
|
|
384
405
|
|
|
385
406
|
### Publishing
|
|
386
407
|
|
|
387
|
-
|
|
388
|
-
# Update version in package.json
|
|
389
|
-
npm version patch # or minor, major
|
|
408
|
+
See [docs/release.md](docs/release.md) for the full release workflow.
|
|
390
409
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
git push origin v1.0.1
|
|
394
|
-
|
|
395
|
-
# GitHub Actions will automatically publish to npm
|
|
410
|
+
```bash
|
|
411
|
+
# GitHub Actions will automatically publish to npm on tag push
|
|
396
412
|
```
|
|
397
413
|
|
|
398
414
|
## Contributing
|
package/bin/viban
CHANGED
|
@@ -906,7 +906,7 @@ draw_board() {
|
|
|
906
906
|
|
|
907
907
|
draw_footer() {
|
|
908
908
|
printf '\033[K\n'
|
|
909
|
-
print_center "←→ Column │ ↑↓ Card │ Shift+↑↓ Reorder │ Shift+←→ Move │ Enter Edit │ ⌫ Del │ A Add │ Q Quit" "${A_DIM}"
|
|
909
|
+
print_center "←→ Column │ ↑↓ Card │ Shift+↑↓ Reorder │ Shift+←→ Move │ Enter Edit/PR │ ⌫ Del │ A Add │ Q Quit" "${A_DIM}"
|
|
910
910
|
}
|
|
911
911
|
|
|
912
912
|
read_key() {
|
|
@@ -1173,11 +1173,24 @@ level1_columns() {
|
|
|
1173
1173
|
if (( cnt > 0 )); then
|
|
1174
1174
|
local id=$(get_issue_id_at_index "$st" "$card" "$json_data")
|
|
1175
1175
|
[[ -n "$id" ]] && {
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1176
|
+
if [[ "$st" == "review" ]]; then
|
|
1177
|
+
# Open associated PR in browser
|
|
1178
|
+
local _branch="issue-${id}"
|
|
1179
|
+
local _ext_id=$(get_ext_id "$id")
|
|
1180
|
+
if [[ -n "$_ext_id" && "$_ext_id" != "null" ]]; then
|
|
1181
|
+
local _num="${_ext_id##*:}"
|
|
1182
|
+
gh pr view "$_num" --web 2>/dev/null || \
|
|
1183
|
+
gh pr list --head "$_branch" --web 2>/dev/null
|
|
1184
|
+
else
|
|
1185
|
+
gh pr list --head "$_branch" --web 2>/dev/null
|
|
1186
|
+
fi
|
|
1187
|
+
else
|
|
1188
|
+
printf '\033[?25h'
|
|
1189
|
+
stty echo 2>/dev/null
|
|
1190
|
+
edit_issue "$id"
|
|
1191
|
+
stty -echo 2>/dev/null
|
|
1192
|
+
printf '\033[?25l\033[2J\033[H'
|
|
1193
|
+
fi
|
|
1181
1194
|
}
|
|
1182
1195
|
fi
|
|
1183
1196
|
;;
|
package/commands/add.md
CHANGED
|
@@ -64,12 +64,20 @@ Issue #{id} registered
|
|
|
64
64
|
|
|
65
65
|
## Step 6: Suggest Plan Mode
|
|
66
66
|
|
|
67
|
-
**Skip**
|
|
68
|
-
**Recommend** for everything else. Use AskUserQuestion:
|
|
67
|
+
**Skip** unless the issue clearly needs upfront design. Most issues don't.
|
|
69
68
|
|
|
70
|
-
|
|
69
|
+
Only suggest plan mode when:
|
|
70
|
+
- The issue spans multiple subsystems or requires architectural decisions
|
|
71
|
+
- The description is too vague to act on without investigation
|
|
72
|
+
- P0 issues where a wrong fix could make things worse
|
|
73
|
+
|
|
74
|
+
**Do NOT suggest** for: single-file fixes, straightforward bugs, feature additions with clear scope, chores, refactors with obvious targets.
|
|
75
|
+
|
|
76
|
+
When suggesting, use AskUserQuestion:
|
|
77
|
+
|
|
78
|
+
- header: "Next step", question: "This looks complex — want to plan before working on it?"
|
|
71
79
|
- options:
|
|
72
|
-
- "Plan now
|
|
80
|
+
- "Plan now" — Enter plan mode to analyze and design a solution
|
|
73
81
|
- "Later" — Just register, work on it later
|
|
74
82
|
|
|
75
83
|
**"Plan now"**: `EnterPlanMode` → after approval, save to `.viban/plans/{issue-id}.md`:
|
|
@@ -89,11 +97,14 @@ Report: `Plan saved to .viban/plans/{issue-id}.md — /viban:assign will auto-lo
|
|
|
89
97
|
|
|
90
98
|
**"Later"**: end skill.
|
|
91
99
|
|
|
92
|
-
> **Bias towards
|
|
100
|
+
> **Bias towards skipping.** When in doubt, just register and finish.
|
|
93
101
|
|
|
94
102
|
## Rules
|
|
95
103
|
|
|
104
|
+
- **NEVER edit, create, or modify any source code files** — this skill registers issues only
|
|
105
|
+
- **NEVER start implementation** — even after plan mode, just save the plan and stop
|
|
96
106
|
- No codebase exploration — assignee does that in `/viban:assign`
|
|
97
|
-
- No solution proposals — symptoms only
|
|
107
|
+
- No solution proposals in the issue — symptoms only
|
|
98
108
|
- Check duplicates first: `viban list`
|
|
99
109
|
- P0 is system-down only
|
|
110
|
+
- After Step 6 completes (plan saved or skipped), the skill is **done**. Do not continue.
|
package/commands/assign.md
CHANGED
|
@@ -1,217 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: "Assign
|
|
2
|
+
description: "Assign first backlog issue — clarify if unclear, then finish"
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Run `/viban:assign` to pick up the next backlog issue.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Usage: `/viban:assign`
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
What it does:
|
|
10
|
+
1. Assigns the first backlog issue (by priority) to the current session
|
|
11
|
+
2. If the issue description is unclear or lacks context, interviews you to gather missing information and updates the issue
|
|
12
|
+
3. That's it — no implementation, no branch creation
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
## Phase 0: SETUP
|
|
14
|
-
|
|
15
|
-
### 0.1 Read Workflow (CRITICAL)
|
|
16
|
-
|
|
17
|
-
Check in priority order — first match wins, follow it exactly:
|
|
18
|
-
|
|
19
|
-
1. `.viban/workflow.md` → `[ -f ".viban/workflow.md" ] && cat ".viban/workflow.md"`
|
|
20
|
-
2. CLAUDE.md (legacy, only if no workflow.md):
|
|
21
|
-
```bash
|
|
22
|
-
for path in "./CLAUDE.md" "./.claude/CLAUDE.md" "../CLAUDE.md"; do
|
|
23
|
-
[ -f "$path" ] && cat "$path"
|
|
24
|
-
done
|
|
25
|
-
```
|
|
26
|
-
Look for `Issue Resolution Workflow` or `Workflow` section.
|
|
27
|
-
3. Default workflow (Phase 1 below)
|
|
28
|
-
|
|
29
|
-
### 0.2 Git Setup & Assign
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
# Check uncommitted changes → AskUserQuestion if dirty
|
|
33
|
-
[ -n "$(git status --porcelain)" ] && echo "Warning: Uncommitted changes"
|
|
34
|
-
|
|
35
|
-
git checkout main && git fetch origin main && git reset --hard origin/main
|
|
36
|
-
|
|
37
|
-
ISSUE_ID=$(viban assign 2>&1 | tail -1)
|
|
38
|
-
[[ -z "$ISSUE_ID" || "$ISSUE_ID" == "No backlog" ]] && echo "No issues in backlog" && exit 0
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
### 0.3 Detect Sync & Create Branch
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
ISSUE_JSON=$(viban get $ISSUE_ID)
|
|
45
|
-
EXT_ID=$(echo "$ISSUE_JSON" | jq -r '.external_id // ""')
|
|
46
|
-
SYNC_ACTIVE=false; EXTERNAL_NUM=""
|
|
47
|
-
|
|
48
|
-
if [ -n "$EXT_ID" ] && [ "$EXT_ID" != "null" ]; then
|
|
49
|
-
SYNC_ACTIVE=true
|
|
50
|
-
EXTERNAL_NUM="${EXT_ID##*:}" # "github:42" -> "42"
|
|
51
|
-
TITLE=$(echo "$ISSUE_JSON" | jq -r '.title' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]/-/g' | head -c 40)
|
|
52
|
-
git checkout -b "issue-${EXTERNAL_NUM}-${TITLE}"
|
|
53
|
-
else
|
|
54
|
-
git checkout -b issue-$ISSUE_ID
|
|
55
|
-
fi
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 0.4 Load Plan (if available)
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
[ -f ".viban/plans/${ISSUE_ID}.md" ] && cat ".viban/plans/${ISSUE_ID}.md"
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
If plan exists: use as primary guide for Phase 1, skip redundant analysis, but verify plan is still current.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Phase 1: ANALYZE & IMPLEMENT
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
viban get $ISSUE_ID
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
**With project workflow**: follow its exact steps.
|
|
75
|
-
**Default** (no workflow): Understand → Locate → Analyze root cause → Implement minimal changes.
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## Phase 2: VERIFY
|
|
80
|
-
|
|
81
|
-
Manual verification — do NOT run build/test here (Phase 3).
|
|
82
|
-
|
|
83
|
-
| Type | Tool |
|
|
84
|
-
|------|------|
|
|
85
|
-
| Web UI | Playwright MCP (`browser_navigate`, `browser_snapshot`, `browser_click`) |
|
|
86
|
-
| API | WebFetch |
|
|
87
|
-
| CLI | Bash |
|
|
88
|
-
| Visual | Read (screenshot files) |
|
|
89
|
-
| Browser | Chrome DevTools MCP |
|
|
90
|
-
|
|
91
|
-
Steps: identify what proves the fix → execute → confirm behavior → document evidence.
|
|
92
|
-
|
|
93
|
-
Examples:
|
|
94
|
-
- Web feature: navigate to page, take snapshot, verify element exists
|
|
95
|
-
- API fix: fetch endpoint, check response status and body
|
|
96
|
-
- CLI change: run command, verify output format
|
|
97
|
-
- UI bug: navigate, interact, confirm no error
|
|
98
|
-
|
|
99
|
-
If verification fails: return to Phase 1.
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## Phase 3: SHIP
|
|
104
|
-
|
|
105
|
-
### 3.1 Build & Test
|
|
106
|
-
|
|
107
|
-
Run project's build/test commands. If fail: fix → return to Phase 2.
|
|
108
|
-
|
|
109
|
-
### 3.2 Rebase
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
git fetch origin main && git rebase origin/main
|
|
113
|
-
# On conflict: resolve -> git add -> git rebase --continue
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
### 3.3 Commit & Push
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
BRANCH=$(git branch --show-current)
|
|
120
|
-
git add -A
|
|
121
|
-
|
|
122
|
-
# Sync mode: "Closes #NUM" | Default: "Resolves: viban-ID"
|
|
123
|
-
if [ "$SYNC_ACTIVE" = true ]; then
|
|
124
|
-
git commit -m "fix: issue title summary
|
|
125
|
-
|
|
126
|
-
- Root cause: ...
|
|
127
|
-
- Solution: ...
|
|
128
|
-
|
|
129
|
-
Closes #$EXTERNAL_NUM"
|
|
130
|
-
else
|
|
131
|
-
git commit -m "fix: issue title summary
|
|
132
|
-
|
|
133
|
-
- Root cause: ...
|
|
134
|
-
- Solution: ...
|
|
135
|
-
|
|
136
|
-
Resolves: #$ISSUE_ID"
|
|
137
|
-
fi
|
|
138
|
-
|
|
139
|
-
git push -u origin "$BRANCH"
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### 3.4 Create PR
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
EXISTING_PR=$(gh pr list --head "$BRANCH" --json number -q '.[0].number')
|
|
146
|
-
|
|
147
|
-
if [ -z "$EXISTING_PR" ]; then
|
|
148
|
-
if [ "$SYNC_ACTIVE" = true ]; then
|
|
149
|
-
gh pr create --title "fix: title" \
|
|
150
|
-
--body "## Changes
|
|
151
|
-
- ...
|
|
152
|
-
|
|
153
|
-
Closes #$EXTERNAL_NUM
|
|
154
|
-
|
|
155
|
-
## Verification
|
|
156
|
-
- [ ] Manual verification completed
|
|
157
|
-
- [ ] Build passing
|
|
158
|
-
- [ ] Tests passing (if applicable)" --base main
|
|
159
|
-
else
|
|
160
|
-
gh pr create --title "fix: title" \
|
|
161
|
-
--body "## Changes
|
|
162
|
-
- ...
|
|
163
|
-
|
|
164
|
-
## Verification
|
|
165
|
-
- [ ] Manual verification completed
|
|
166
|
-
- [ ] Build passing
|
|
167
|
-
- [ ] Tests passing (if applicable)" --base main
|
|
168
|
-
fi
|
|
169
|
-
fi
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### 3.5 Move to Review
|
|
173
|
-
|
|
174
|
-
```bash
|
|
175
|
-
viban review $ISSUE_ID
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
---
|
|
179
|
-
|
|
180
|
-
## Phase 4: HANDOFF
|
|
181
|
-
|
|
182
|
-
```
|
|
183
|
-
Issue #$ISSUE_ID → review | PR: gh pr view --web
|
|
184
|
-
Verification: manual + build + workflow followed
|
|
185
|
-
After approval: delete issue from viban TUI
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## Checklist
|
|
191
|
-
|
|
192
|
-
```
|
|
193
|
-
[ ] Read .viban/workflow.md (or CLAUDE.md fallback) for project workflow
|
|
194
|
-
[ ] Working on issue-$ISSUE_ID branch
|
|
195
|
-
[ ] Implementation complete
|
|
196
|
-
[ ] Manual verification passed (using appropriate tools)
|
|
197
|
-
[ ] Build & tests passing
|
|
198
|
-
[ ] Rebase complete
|
|
199
|
-
[ ] PR created
|
|
200
|
-
[ ] viban review executed
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
## CRITICAL: Status Transition Rule
|
|
206
|
-
|
|
207
|
-
> **NEVER exit with issue still in `in_progress`.** Always run `viban review $ISSUE_ID` before exiting — whether completed or stopped early.
|
|
208
|
-
|
|
209
|
-
## CLI Reference
|
|
210
|
-
|
|
211
|
-
| Command | Description |
|
|
212
|
-
|---------|-------------|
|
|
213
|
-
| `viban` | Open TUI |
|
|
214
|
-
| `viban list` | Print board |
|
|
215
|
-
| `viban assign [session]` | Assign issue |
|
|
216
|
-
| `viban get <id>` | View issue |
|
|
217
|
-
| `viban review <id>` | Move to review |
|
|
14
|
+
This command is for **assignment and clarification only**. Use other tools to start working on the assigned issue.
|
package/package.json
CHANGED
package/skills/add/SKILL.md
CHANGED
|
@@ -65,12 +65,20 @@ Issue #{id} registered
|
|
|
65
65
|
|
|
66
66
|
## Step 6: Suggest Plan Mode
|
|
67
67
|
|
|
68
|
-
**Skip**
|
|
69
|
-
**Recommend** for everything else. Use AskUserQuestion:
|
|
68
|
+
**Skip** unless the issue clearly needs upfront design. Most issues don't.
|
|
70
69
|
|
|
71
|
-
|
|
70
|
+
Only suggest plan mode when:
|
|
71
|
+
- The issue spans multiple subsystems or requires architectural decisions
|
|
72
|
+
- The description is too vague to act on without investigation
|
|
73
|
+
- P0 issues where a wrong fix could make things worse
|
|
74
|
+
|
|
75
|
+
**Do NOT suggest** for: single-file fixes, straightforward bugs, feature additions with clear scope, chores, refactors with obvious targets.
|
|
76
|
+
|
|
77
|
+
When suggesting, use AskUserQuestion:
|
|
78
|
+
|
|
79
|
+
- header: "Next step", question: "This looks complex — want to plan before working on it?"
|
|
72
80
|
- options:
|
|
73
|
-
- "Plan now
|
|
81
|
+
- "Plan now" — Enter plan mode to analyze and design a solution
|
|
74
82
|
- "Later" — Just register, work on it later
|
|
75
83
|
|
|
76
84
|
**"Plan now"**: `EnterPlanMode` → after approval, save to `.viban/plans/{issue-id}.md`:
|
|
@@ -90,11 +98,14 @@ Report: `Plan saved to .viban/plans/{issue-id}.md — /viban:assign will auto-lo
|
|
|
90
98
|
|
|
91
99
|
**"Later"**: end skill.
|
|
92
100
|
|
|
93
|
-
> **Bias towards
|
|
101
|
+
> **Bias towards skipping.** When in doubt, just register and finish.
|
|
94
102
|
|
|
95
103
|
## Rules
|
|
96
104
|
|
|
105
|
+
- **NEVER edit, create, or modify any source code files** — this skill registers issues only
|
|
106
|
+
- **NEVER start implementation** — even after plan mode, just save the plan and stop
|
|
97
107
|
- No codebase exploration — assignee does that in `/viban:assign`
|
|
98
|
-
- No solution proposals — symptoms only
|
|
108
|
+
- No solution proposals in the issue — symptoms only
|
|
99
109
|
- Check duplicates first: `viban list`
|
|
100
110
|
- P0 is system-down only
|
|
111
|
+
- After Step 6 completes (plan saved or skipped), the skill is **done**. Do not continue.
|
package/skills/assign/SKILL.md
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: assign
|
|
3
|
-
description: "Assign
|
|
3
|
+
description: "Assign first backlog issue — clarify if unclear, then finish"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /assign
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Assign the first backlog issue. If the description is unclear or lacks context, interview the user and enrich the issue. **Do NOT start implementation.**
|
|
9
9
|
|
|
10
|
-
> **CLI only** (no direct viban.json access)
|
|
10
|
+
> **CLI only** (no direct viban.json access)
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Step 0: Read Workflow (CRITICAL)
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Check in priority order — first match wins, follow it exactly:
|
|
16
|
+
Check in priority order — first match wins:
|
|
19
17
|
|
|
20
18
|
1. `.viban/workflow.md` → `[ -f ".viban/workflow.md" ] && cat ".viban/workflow.md"`
|
|
21
19
|
2. CLAUDE.md (legacy, only if no workflow.md):
|
|
@@ -25,193 +23,91 @@ for path in "./CLAUDE.md" "./.claude/CLAUDE.md" "../CLAUDE.md"; do
|
|
|
25
23
|
done
|
|
26
24
|
```
|
|
27
25
|
Look for `Issue Resolution Workflow` or `Workflow` section.
|
|
28
|
-
3. Default workflow (Phase 1 below)
|
|
29
26
|
|
|
30
|
-
|
|
27
|
+
If a workflow exists, follow its conventions for issue handling.
|
|
31
28
|
|
|
32
|
-
|
|
33
|
-
# Check uncommitted changes → AskUserQuestion if dirty
|
|
34
|
-
[ -n "$(git status --porcelain)" ] && echo "Warning: Uncommitted changes"
|
|
29
|
+
---
|
|
35
30
|
|
|
36
|
-
|
|
31
|
+
## Step 1: Assign
|
|
37
32
|
|
|
33
|
+
```bash
|
|
38
34
|
ISSUE_ID=$(viban assign 2>&1 | tail -1)
|
|
39
35
|
[[ -z "$ISSUE_ID" || "$ISSUE_ID" == "No backlog" ]] && echo "No issues in backlog" && exit 0
|
|
40
36
|
```
|
|
41
37
|
|
|
42
|
-
|
|
38
|
+
If backlog is empty: notify user and exit.
|
|
43
39
|
|
|
44
|
-
|
|
45
|
-
ISSUE_JSON=$(viban get $ISSUE_ID)
|
|
46
|
-
EXT_ID=$(echo "$ISSUE_JSON" | jq -r '.external_id // ""')
|
|
47
|
-
SYNC_ACTIVE=false; EXTERNAL_NUM=""
|
|
48
|
-
|
|
49
|
-
if [ -n "$EXT_ID" ] && [ "$EXT_ID" != "null" ]; then
|
|
50
|
-
SYNC_ACTIVE=true
|
|
51
|
-
EXTERNAL_NUM="${EXT_ID##*:}" # "github:42" -> "42"
|
|
52
|
-
git checkout -b "issue-${EXTERNAL_NUM}"
|
|
53
|
-
else
|
|
54
|
-
git checkout -b issue-$ISSUE_ID
|
|
55
|
-
fi
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
### 0.4 Load Plan (if available)
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
[ -f ".viban/plans/${ISSUE_ID}.md" ] && cat ".viban/plans/${ISSUE_ID}.md"
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
If plan exists: use as primary guide for Phase 1, skip redundant analysis, but verify plan is still current.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Phase 1: ANALYZE & IMPLEMENT
|
|
40
|
+
## Step 2: Read Issue
|
|
69
41
|
|
|
70
42
|
```bash
|
|
71
43
|
viban get $ISSUE_ID
|
|
72
44
|
```
|
|
73
45
|
|
|
74
|
-
|
|
75
|
-
**Default** (no workflow): Understand → Locate → Analyze root cause → Implement minimal changes.
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## Phase 2: VERIFY
|
|
80
|
-
|
|
81
|
-
Manual verification — do NOT run build/test here (Phase 3).
|
|
82
|
-
|
|
83
|
-
| Type | Tool |
|
|
84
|
-
|------|------|
|
|
85
|
-
| Web UI | Playwright MCP (`browser_navigate`, `browser_snapshot`, `browser_click`) |
|
|
86
|
-
| API | WebFetch |
|
|
87
|
-
| CLI | Bash |
|
|
88
|
-
| Visual | Read (screenshot files) |
|
|
89
|
-
| Browser | Chrome DevTools MCP |
|
|
46
|
+
Display the issue title, description, priority, and type to the user.
|
|
90
47
|
|
|
91
|
-
|
|
48
|
+
## Step 3: Evaluate Clarity
|
|
92
49
|
|
|
93
|
-
|
|
94
|
-
- Web feature: navigate to page, take snapshot, verify element exists
|
|
95
|
-
- API fix: fetch endpoint, check response status and body
|
|
96
|
-
- CLI change: run command, verify output format
|
|
97
|
-
- UI bug: navigate, interact, confirm no error
|
|
50
|
+
Assess whether the issue description provides enough context for someone to start working on it:
|
|
98
51
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
---
|
|
52
|
+
- **Clear**: the symptom, affected area, and expected behavior are all understandable
|
|
53
|
+
- **Unclear**: vague description, missing context, ambiguous scope, or multiple possible interpretations
|
|
102
54
|
|
|
103
|
-
|
|
55
|
+
### If Clear
|
|
104
56
|
|
|
105
|
-
|
|
57
|
+
Report the assignment and finish:
|
|
106
58
|
|
|
107
|
-
Run project's build/test commands. If fail: fix → return to Phase 2.
|
|
108
|
-
|
|
109
|
-
### 3.2 Rebase
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
git fetch origin main && git rebase origin/main
|
|
113
|
-
# On conflict: resolve -> git add -> git rebase --continue
|
|
114
59
|
```
|
|
60
|
+
Issue #{id} assigned
|
|
61
|
+
Title: {title}
|
|
62
|
+
Priority: {priority} | Type: {type}
|
|
63
|
+
Status: in_progress
|
|
115
64
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
BRANCH=$(git branch --show-current)
|
|
120
|
-
git add -A
|
|
121
|
-
|
|
122
|
-
# Sync mode: "Closes #NUM" | Default: "Resolves: viban-ID"
|
|
123
|
-
if [ "$SYNC_ACTIVE" = true ]; then
|
|
124
|
-
git commit -m "fix: issue title summary
|
|
125
|
-
|
|
126
|
-
- Root cause: ...
|
|
127
|
-
- Solution: ...
|
|
128
|
-
|
|
129
|
-
Closes #$EXTERNAL_NUM"
|
|
130
|
-
else
|
|
131
|
-
git commit -m "fix: issue title summary
|
|
132
|
-
|
|
133
|
-
- Root cause: ...
|
|
134
|
-
- Solution: ...
|
|
135
|
-
|
|
136
|
-
Resolves: #$ISSUE_ID"
|
|
137
|
-
fi
|
|
138
|
-
|
|
139
|
-
git push -u origin "$BRANCH"
|
|
65
|
+
Ready for work.
|
|
140
66
|
```
|
|
141
67
|
|
|
142
|
-
###
|
|
68
|
+
### If Unclear
|
|
143
69
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
gh pr create --title "fix: title" \
|
|
150
|
-
--body "## Changes
|
|
151
|
-
- ...
|
|
152
|
-
|
|
153
|
-
Closes #$EXTERNAL_NUM
|
|
154
|
-
|
|
155
|
-
## Verification
|
|
156
|
-
- [ ] Manual verification completed
|
|
157
|
-
- [ ] Build passing
|
|
158
|
-
- [ ] Tests passing (if applicable)" --base main
|
|
159
|
-
else
|
|
160
|
-
gh pr create --title "fix: title" \
|
|
161
|
-
--body "## Changes
|
|
162
|
-
- ...
|
|
163
|
-
|
|
164
|
-
## Verification
|
|
165
|
-
- [ ] Manual verification completed
|
|
166
|
-
- [ ] Build passing
|
|
167
|
-
- [ ] Tests passing (if applicable)" --base main
|
|
168
|
-
fi
|
|
169
|
-
fi
|
|
170
|
-
```
|
|
70
|
+
Interview the user with AskUserQuestion to gather missing context. Ask about:
|
|
71
|
+
- What specifically is the problem? (symptom)
|
|
72
|
+
- Where does it happen? (location/trigger)
|
|
73
|
+
- What is the expected behavior?
|
|
74
|
+
- Any additional constraints or context?
|
|
171
75
|
|
|
172
|
-
|
|
76
|
+
After gathering answers, update the issue description:
|
|
173
77
|
|
|
174
78
|
```bash
|
|
175
|
-
viban
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
---
|
|
79
|
+
cat > /tmp/viban-desc-update.md <<'VIBAN_EOF'
|
|
80
|
+
{original description}
|
|
179
81
|
|
|
180
|
-
##
|
|
82
|
+
## Clarification
|
|
83
|
+
{gathered context from interview}
|
|
84
|
+
VIBAN_EOF
|
|
181
85
|
|
|
182
|
-
|
|
183
|
-
Issue #$ISSUE_ID → review | PR: gh pr view --web
|
|
184
|
-
Verification: manual + build + workflow followed
|
|
185
|
-
After approval: delete issue from viban TUI
|
|
86
|
+
# Re-add the issue with enriched description (edit via TUI or recreate)
|
|
186
87
|
```
|
|
187
88
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
## Checklist
|
|
89
|
+
Then report:
|
|
191
90
|
|
|
192
91
|
```
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
[ ] PR created
|
|
200
|
-
[ ] viban review executed
|
|
92
|
+
Issue #{id} assigned and clarified
|
|
93
|
+
Title: {title}
|
|
94
|
+
Priority: {priority} | Type: {type}
|
|
95
|
+
Status: in_progress
|
|
96
|
+
|
|
97
|
+
Clarification added to issue description.
|
|
201
98
|
```
|
|
202
99
|
|
|
203
100
|
---
|
|
204
101
|
|
|
205
|
-
## CRITICAL
|
|
102
|
+
## CRITICAL
|
|
206
103
|
|
|
207
|
-
>
|
|
104
|
+
> - This command **assigns only**. Do NOT create branches, write code, or start implementation.
|
|
105
|
+
> - Do NOT run `viban review` — the issue stays in `in_progress` for the next work session.
|
|
106
|
+
> - If the issue is clear, just report and finish immediately.
|
|
208
107
|
|
|
209
108
|
## CLI Reference
|
|
210
109
|
|
|
211
110
|
| Command | Description |
|
|
212
111
|
|---------|-------------|
|
|
213
|
-
| `viban` | Open TUI |
|
|
214
|
-
| `viban list` | Print board |
|
|
215
112
|
| `viban assign [session]` | Assign issue |
|
|
216
113
|
| `viban get <id>` | View issue |
|
|
217
|
-
| `viban review <id>` | Move to review |
|
|
@@ -104,8 +104,9 @@ You are resolving viban issue #{ID} in an isolated git worktree.
|
|
|
104
104
|
- Main repo: {REPO_ROOT}
|
|
105
105
|
- ALL file operations must happen inside the worktree path
|
|
106
106
|
|
|
107
|
-
## Workflow
|
|
108
|
-
{paste workflow.md
|
|
107
|
+
## Workflow (Analyze + Implement + Verify only)
|
|
108
|
+
{paste workflow.md Phase 1 (Analyze), Phase 2 (Implement), and Phase 3 (Verify) sections ONLY}
|
|
109
|
+
{DO NOT include: Pipeline summary, GitHub Sync, Phase 4 (Build and Test), Phase 5 (Ship), Issue Management, Post-merge, or Additional Rules}
|
|
109
110
|
|
|
110
111
|
## Issue Details
|
|
111
112
|
{paste viban get output}
|
|
@@ -152,6 +153,7 @@ You are one of {N} parallel agents working in isolated git worktrees.
|
|
|
152
153
|
|
|
153
154
|
CRITICAL:
|
|
154
155
|
- Always run `viban review {ID}` before finishing, even on errors.
|
|
156
|
+
- Do NOT run `viban done` — the coordinator handles post-merge cleanup.
|
|
155
157
|
- Do NOT run the full test suite — the coordinator handles that.
|
|
156
158
|
- Do NOT remove the worktree — the coordinator handles cleanup.
|
|
157
159
|
```
|
package/commands/sync.md
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Sync viban board with external issue tracker (GitHub, Jira, etc.)"
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /sync - External Issue Tracker Sync
|
|
6
|
-
|
|
7
|
-
Sync the viban board with an external issue tracker. Currently supports GitHub Issues via `gh` CLI.
|
|
8
|
-
|
|
9
|
-
> **Principle**: Show what will happen before doing it. Never sync without user confirmation.
|
|
10
|
-
|
|
11
|
-
## Input
|
|
12
|
-
|
|
13
|
-
**User Input**: `$ARGUMENTS`
|
|
14
|
-
|
|
15
|
-
## Step 1: Check Sync Configuration
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# Check if sync is already configured
|
|
19
|
-
if [ -f ".viban/sync.json" ]; then
|
|
20
|
-
echo "Sync configured"
|
|
21
|
-
viban sync --status
|
|
22
|
-
else
|
|
23
|
-
echo "Sync not configured"
|
|
24
|
-
fi
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
- If **not configured**, proceed to Step 2
|
|
28
|
-
- If **configured**, skip to Step 3
|
|
29
|
-
|
|
30
|
-
## Step 2: Initialize Sync
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
viban sync --init
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
This will:
|
|
37
|
-
- Auto-detect the provider from git remote (defaults to GitHub)
|
|
38
|
-
- Check that `gh` CLI is installed and authenticated
|
|
39
|
-
- Create required labels on the remote repo
|
|
40
|
-
- Initialize `sync.json` metadata
|
|
41
|
-
|
|
42
|
-
If initialization fails, report the error and suggest fixes (install `gh`, run `gh auth login`, etc.).
|
|
43
|
-
|
|
44
|
-
## Step 3: Preview Changes (Dry Run)
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
viban sync --dry-run
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Show the user what will happen:
|
|
51
|
-
- `<-` Issues to pull from remote
|
|
52
|
-
- `->` Cards to push to remote
|
|
53
|
-
- `==` Unchanged items
|
|
54
|
-
- `!!` Conflicts (and resolution strategy)
|
|
55
|
-
|
|
56
|
-
## Step 4: Confirm and Sync
|
|
57
|
-
|
|
58
|
-
Ask the user for confirmation using AskUserQuestion:
|
|
59
|
-
|
|
60
|
-
- header: "Sync"
|
|
61
|
-
- question: "Apply these sync changes?"
|
|
62
|
-
- options:
|
|
63
|
-
- "Yes, sync now"
|
|
64
|
-
- "Sync and push new local cards too (--push-new)"
|
|
65
|
-
- "Pull only (remote -> local)"
|
|
66
|
-
- "Cancel"
|
|
67
|
-
- multiSelect: false
|
|
68
|
-
|
|
69
|
-
Based on the answer:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
# Yes, sync now
|
|
73
|
-
viban sync
|
|
74
|
-
|
|
75
|
-
# With push-new
|
|
76
|
-
viban sync --push-new
|
|
77
|
-
|
|
78
|
-
# Pull only
|
|
79
|
-
viban sync --pull-only
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Step 5: Report Results
|
|
83
|
-
|
|
84
|
-
Show the sync summary:
|
|
85
|
-
```
|
|
86
|
-
Sync complete:
|
|
87
|
-
Pulled: N new/updated cards from remote
|
|
88
|
-
Pushed: N cards to remote
|
|
89
|
-
Conflicts: N (resolved by: remote wins)
|
|
90
|
-
Unchanged: N
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Notes
|
|
94
|
-
|
|
95
|
-
- **First sync imports all open issues** as backlog cards with `github:N` external IDs
|
|
96
|
-
- **Conflicts**: when both sides changed, remote wins by default (with warning)
|
|
97
|
-
- **Closed issues**: remote closed issues move viban card to `review` status
|
|
98
|
-
- **Done cards**: `viban done` then sync closes the remote issue
|
|
99
|
-
- **New local cards** are NOT pushed unless `--push-new` is specified (local-first default)
|
package/skills/sync/SKILL.md
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sync
|
|
3
|
-
description: "Sync viban board with external issue tracker (GitHub, Jira, etc.)"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# /sync - External Issue Tracker Sync
|
|
7
|
-
|
|
8
|
-
Sync the viban board with an external issue tracker. Currently supports GitHub Issues via `gh` CLI.
|
|
9
|
-
|
|
10
|
-
> **Principle**: Show what will happen before doing it. Never sync without user confirmation.
|
|
11
|
-
|
|
12
|
-
## Input
|
|
13
|
-
|
|
14
|
-
**User Input**: `$ARGUMENTS`
|
|
15
|
-
|
|
16
|
-
## Step 1: Check Sync Configuration
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Check if sync is already configured
|
|
20
|
-
if [ -f ".viban/sync.json" ]; then
|
|
21
|
-
echo "Sync configured"
|
|
22
|
-
viban sync --status
|
|
23
|
-
else
|
|
24
|
-
echo "Sync not configured"
|
|
25
|
-
fi
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
- If **not configured**, proceed to Step 2
|
|
29
|
-
- If **configured**, skip to Step 3
|
|
30
|
-
|
|
31
|
-
## Step 2: Initialize Sync
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
viban sync --init
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
This will:
|
|
38
|
-
- Auto-detect the provider from git remote (defaults to GitHub)
|
|
39
|
-
- Check that `gh` CLI is installed and authenticated
|
|
40
|
-
- Create required labels on the remote repo
|
|
41
|
-
- Initialize `sync.json` metadata
|
|
42
|
-
|
|
43
|
-
If initialization fails, report the error and suggest fixes (install `gh`, run `gh auth login`, etc.).
|
|
44
|
-
|
|
45
|
-
## Step 3: Preview Changes (Dry Run)
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
viban sync --dry-run
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Show the user what will happen:
|
|
52
|
-
- `<-` Issues to pull from remote
|
|
53
|
-
- `->` Cards to push to remote
|
|
54
|
-
- `==` Unchanged items
|
|
55
|
-
- `!!` Conflicts (and resolution strategy)
|
|
56
|
-
|
|
57
|
-
## Step 4: Confirm and Sync
|
|
58
|
-
|
|
59
|
-
Ask the user for confirmation using AskUserQuestion:
|
|
60
|
-
|
|
61
|
-
- header: "Sync"
|
|
62
|
-
- question: "Apply these sync changes?"
|
|
63
|
-
- options:
|
|
64
|
-
- "Yes, sync now"
|
|
65
|
-
- "Sync and push new local cards too (--push-new)"
|
|
66
|
-
- "Pull only (remote -> local)"
|
|
67
|
-
- "Cancel"
|
|
68
|
-
- multiSelect: false
|
|
69
|
-
|
|
70
|
-
Based on the answer:
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
# Yes, sync now
|
|
74
|
-
viban sync
|
|
75
|
-
|
|
76
|
-
# With push-new
|
|
77
|
-
viban sync --push-new
|
|
78
|
-
|
|
79
|
-
# Pull only
|
|
80
|
-
viban sync --pull-only
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## Step 5: Report Results
|
|
84
|
-
|
|
85
|
-
Show the sync summary:
|
|
86
|
-
```
|
|
87
|
-
Sync complete:
|
|
88
|
-
Pulled: N new/updated cards from remote
|
|
89
|
-
Pushed: N cards to remote
|
|
90
|
-
Conflicts: N (resolved by: remote wins)
|
|
91
|
-
Unchanged: N
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Notes
|
|
95
|
-
|
|
96
|
-
- **First sync imports all open issues** as backlog cards with `github:N` external IDs
|
|
97
|
-
- **Conflicts**: when both sides changed, remote wins by default (with warning)
|
|
98
|
-
- **Closed issues**: remote closed issues move viban card to `review` status
|
|
99
|
-
- **Done cards**: `viban done` then sync closes the remote issue
|
|
100
|
-
- **New local cards** are NOT pushed unless `--push-new` is specified (local-first default)
|