Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
{
"name": "ddaro",
"source": "./",
"description": "Worktree-based parallel workflow for Claude Code sessions. 6-tier worktree classification (main / owned / adopted / protected / unmanaged / external), /ddaro:adopt to bring existing worktrees under management, cwd-safe destructive commands (clear/abandon from main only), size-based merge review, crash-recoverable context logs, and plugin-native protective hooks (0.5.0: registered in hooks/hooks.json, active when ddaro is enabled, modes set via /ddaro:config - never written to .claude/settings.json). New in 0.6.0: a lifecycle conductor (/ddaro:spec design-doc scaffold + decision capture, /ddaro:review prism-all + triad fan-out with collated findings, /ddaro:check pre-merge prism + ship-checklist gate) that orchestrates the doc-template/prism-all/triad skills around the worktree cycle. /ddaro:start uses a 6-step setup. /ddaro:abandon accepts adopted via --force. Korean triggers: 따로, 병렬로, 분리해서.",
"version": "0.6.0",
"description": "Worktree-based parallel workflow for Claude Code sessions. 6-tier worktree classification (main / owned / adopted / protected / unmanaged / external), /ddaro:adopt to bring existing worktrees under management, cwd-safe destructive commands (clear/abandon from main only), size-based merge review, crash-recoverable context logs, and plugin-native protective hooks (0.5.0: registered in hooks/hooks.json, active when ddaro is enabled, modes set via /ddaro:config - never written to .claude/settings.json). New in 0.6.0: a lifecycle conductor (/ddaro:spec design-doc scaffold + decision capture, /ddaro:review prism-all + triad fan-out with collated findings, /ddaro:check pre-merge prism + ship-checklist gate) that orchestrates the doc-template/prism-all/triad skills around the worktree cycle. New in 0.6.1: /ddaro:go - one conductor command that reads the worktree's lifecycle stage and auto-runs the next step (spec/review/check remain as manual gears), confirming before the heavy review/check stages. /ddaro:start uses a 6-step setup. /ddaro:abandon accepts adopted via --force. Korean triggers: 따로, 병렬로, 분리해서.",
"version": "0.6.1",
"homepage": "https://github.com/minwoo-data/ddaro",
"license": "MIT",
"author": {
Expand Down
4 changes: 2 additions & 2 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "ddaro",
"version": "0.6.0",
"description": "Worktree-based parallel workflow for Claude Code sessions with a lifecycle conductor (new in 0.6.0: /ddaro:spec scaffolds a design doc + captures decisions, /ddaro:review fires prism-all + triad and collates findings, /ddaro:check is a pre-merge prism + ship-checklist gate - pure orchestration over the doc-template/prism-all/triad skills, filling the design->review front half before the existing commit->CI-merge back half), plugin-native protective hooks (new in 0.5.0) and dev-cycle orchestration (0.4.0). The seven hooks (main_protection, branch_naming, cross_worktree_check, branch_worktree_match, evidence_check + the two SessionStart reporters) ship in hooks/hooks.json and activate automatically when ddaro is enabled - config-gated and fail-open, so non-ddaro projects see zero noise and nothing is written to .claude/settings.json (run /ddaro:config migrate once to clean up pre-0.5.0 installs). 6-tier classification (main / owned / adopted / protected / unmanaged / external), /ddaro:adopt, cwd-safe destructive commands (clear/abandon from main only). /ddaro:commit opt-in --verify flag (verify.json + CLAUDE.md fallback discovery). /ddaro:merge drives the PR path through CI: state machine, polling, hard-capped fix loop (default 3, configurable), CI_STUCK detection, idempotency guard, confirm gate, sync-main content-diff preview, --force-with-lease invariant. Korean triggers: /ddaro, 따로, 병렬로. English: /ddaro, parallel, isolated.",
"version": "0.6.1",
"description": "Worktree-based parallel workflow for Claude Code sessions with a lifecycle conductor (new in 0.6.0: /ddaro:spec scaffolds a design doc + captures decisions, /ddaro:review fires prism-all + triad and collates findings, /ddaro:check is a pre-merge prism + ship-checklist gate - pure orchestration over the doc-template/prism-all/triad skills, filling the design->review front half before the existing commit->CI-merge back half; 0.6.1 adds /ddaro:go, a single conductor that reads the worktree's lifecycle stage and runs the next step - spec/review/check stay as the manual gears), plugin-native protective hooks (new in 0.5.0) and dev-cycle orchestration (0.4.0). The seven hooks (main_protection, branch_naming, cross_worktree_check, branch_worktree_match, evidence_check + the two SessionStart reporters) ship in hooks/hooks.json and activate automatically when ddaro is enabled - config-gated and fail-open, so non-ddaro projects see zero noise and nothing is written to .claude/settings.json (run /ddaro:config migrate once to clean up pre-0.5.0 installs). 6-tier classification (main / owned / adopted / protected / unmanaged / external), /ddaro:adopt, cwd-safe destructive commands (clear/abandon from main only). /ddaro:commit opt-in --verify flag (verify.json + CLAUDE.md fallback discovery). /ddaro:merge drives the PR path through CI: state machine, polling, hard-capped fix loop (default 3, configurable), CI_STUCK detection, idempotency guard, confirm gate, sync-main content-diff preview, --force-with-lease invariant. Korean triggers: /ddaro, 따로, 병렬로. English: /ddaro, parallel, isolated.",
"author": {
"name": "haroom",
"url": "https://github.com/minwoo-data"
Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,24 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),

## [Unreleased]

## [0.6.1] - 2026-06-05

### Added

- **Conductor entry point (`/ddaro:go`).** One command that reads the worktree's lifecycle
stage and runs the next step, so you no longer have to remember which of
spec/review/check to call. It detects the stage from `.ddaro/lifecycle.json` (or infers
it: design doc present? has a `## Review findings` section? are there code changes beyond
the doc?), shows the detected stage + its evidence, confirms before the heavy stages
(review = 8 agents, check = prism-all), then delegates to the existing `/ddaro:spec` /
`/ddaro:review` / `/ddaro:check` section - it adds no review logic of its own. After a
stage it advances `.ddaro/lifecycle.json` and points at the next step; at the
review -> implement boundary it stops (the human writes the feature, then re-runs
`/ddaro:go`). The three named subcommands remain as the manual gears - pass
`/ddaro:go spec|review|check` to force/re-run a specific stage. Pure orchestration over
the 0.6.0 trio; touches no git history. New conductor state file
`<worktree>/.ddaro/lifecycle.json` lives in the git-ignored `.ddaro/` dir.

## [0.6.0] - 2026-06-05

### Added
Expand Down
9 changes: 7 additions & 2 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ Session A에서 `/ddaro:start billing`, Session B에서 `/ddaro:start auth`. 세

```
/ddaro:start # 새 격리 worktree 생성 (첫 실행 시 설정 프롬프트)
/ddaro:go # 컨덕터: 라이프사이클 다음 단계 자동 실행 (0.6.1 new)
/ddaro:spec <name> # 설계문서 스캐폴드 + 결정 캡처 (0.6.0 new)
/ddaro:review <file> # prism-all + triad 병렬 리뷰, findings 문서에 합치기 (0.6.0 new)
/ddaro:commit # 안전 검증 + commit + push + context 스냅샷
Expand All @@ -74,14 +75,17 @@ Session A에서 `/ddaro:start billing`, Session B에서 `/ddaro:start auth`. 세

설치/업데이트 후 Claude Code 재시작.

### 라이프사이클 컨덕터 (0.6.0 new)
### 라이프사이클 컨덕터 (spec/review/check 0.6.0, `/ddaro:go` 0.6.1)

3개 오케스트레이션 서브커맨드가 dev 사이클의 설계->리뷰 앞부분을 채웁니다 (기존 commit->CI-merge 뒷부분 앞):
오케스트레이션 서브커맨드가 dev 사이클의 설계->리뷰 앞부분을 채웁니다 (기존 commit->CI-merge 뒷부분 앞):

```
/ddaro:start -> /ddaro:spec -> /ddaro:review -> [구현] -> /ddaro:check -> /ddaro:commit -> /ddaro:merge
\______________ /ddaro:go 가 이 구간을 운전 ______________/
```

`/ddaro:go` (0.6.1) 는 자동 운전자입니다. spec/review/check 중 뭘 부를지 외울 필요 없이 `/ddaro:go` 만 치면, worktree 의 라이프사이클 단계를 읽고 다음 단계를 실행하며, 무거운 review/check 단계 전에는 물어봅니다. 3개 이름 있는 서브커맨드는 수동 기어로 남습니다 - `/ddaro:go spec|review|check` 로 특정 단계를 강제할 수 있습니다. `[구현]` 경계에서는 멈춥니다 (사람이 코드를 쓴 뒤 `/ddaro:go` 재실행).

자매 스킬(`doc-template`, `prism`, `triad`)을 순수 지휘만 하며, 없으면 inline으로 폴백합니다. 프로젝트 관리 프레임워크가 아니라, 한 ddaro 세션에 매핑되는 가벼운 "문서 하나 -> 리뷰 -> 구현 -> 리뷰" cadence입니다.

---
Expand All @@ -91,6 +95,7 @@ Session A에서 `/ddaro:start billing`, Session B에서 `/ddaro:start auth`. 세
| 명령 | 역할 |
|---|---|
| `/ddaro:start [name]` | 새 worktree + branch + lock 생성 |
| `/ddaro:go [spec\|review\|check]` | 컨덕터 (0.6.1): 라이프사이클 다음 단계 자동 실행 (spec -> review -> 구현 -> check), 인자 주면 해당 단계 강제. spec/review/check 에 위임하며 무거운 단계 전엔 확인. |
| `/ddaro:commit [--verify] [msg]` | 전체 stage, 삭제 검증, 확인, *0.4.0:* `--verify` 플래그 시 프로젝트 verify 명령 실행, commit, push, context MD 기록 |
| `/ddaro:merge` | 충돌 사전 확인 + 규모별 리뷰 + *0.4.0:* CI 오케스트레이션 (state machine, `gh pr view` 폴링, CI_FAIL 시 hard cap 3회 fix 루프 + `--force-with-lease`, CI_STUCK 별도 처리, idempotency guard, confirm gate, sync-main content-diff preview) |
| `/ddaro:status` | worktree 안에선 로컬 상태, main 에선 `/ddaro:list` 로 자동 위임 |
Expand Down
13 changes: 11 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ You fire up Session A to fix billing and Session B to refactor auth. Both edit `

```
/ddaro:start # creates a new isolated worktree (first run prompts for setup)
/ddaro:go # conductor: auto-run the next lifecycle stage (new in 0.6.1)
/ddaro:spec <name> # scaffold a design doc + capture decisions (new in 0.6.0)
/ddaro:review <file> # prism-all + triad fan-out, findings collated back in (new in 0.6.0)
/ddaro:commit # safe commit + push + context snapshot
Expand All @@ -74,15 +75,22 @@ You fire up Session A to fix billing and Session B to refactor auth. Both edit `

Restart Claude Code after install/update.

### Lifecycle conductor (new in 0.6.0)
### Lifecycle conductor (spec/review/check in 0.6.0, `/ddaro:go` in 0.6.1)

Three orchestration subcommands fill the design->review front half of the dev cycle before
Orchestration subcommands fill the design->review front half of the dev cycle before
the existing commit->CI-merge back half:

```
/ddaro:start -> /ddaro:spec -> /ddaro:review -> [implement] -> /ddaro:check -> /ddaro:commit -> /ddaro:merge
\_______________ /ddaro:go drives this row _______________/
```

`/ddaro:go` (0.6.1) is the auto-driver: instead of remembering which of spec/review/check
to call, run `/ddaro:go` and it reads the worktree's lifecycle stage, runs the next step,
and asks before the heavy review/check stages. The three named subcommands remain as the
manual gears - `/ddaro:go spec|review|check` forces a specific stage. It stops at the
`[implement]` boundary (the human writes the code, then re-runs `/ddaro:go`).

They are pure orchestration over the sibling skills (`doc-template`, `prism`, `triad`) and
degrade to inline steps if those are absent. Not a project-management framework - just the
lightweight "one doc -> review -> implement -> review" cadence that maps to one ddaro session.
Expand All @@ -94,6 +102,7 @@ lightweight "one doc -> review -> implement -> review" cadence that maps to one
| Command | What it does |
|---|---|
| `/ddaro:start [name]` | Create a new worktree + branch + lock |
| `/ddaro:go [spec\|review\|check]` | Conductor (0.6.1): auto-run the next lifecycle stage (spec -> review -> implement -> check); an arg forces a stage. Delegates to spec/review/check; confirms before heavy stages. |
| `/ddaro:commit [--verify] [msg]` | Stage all, classify deletions, confirm flagged, optionally run the project's verify command(s) (new in 0.4.0), commit, push, write context MD |
| `/ddaro:merge` | Pre-flight conflict check + size-based review + CI orchestration (new in 0.4.0): polls `gh pr view --json statusCheckRollup`, handles CI_FAIL via a 3-attempt fix loop with `--force-with-lease`, escalates CI_STUCK ("no checks in 60s") separately, idempotency-guarded squash with confirm gate, then sync-main with content-diff preview. |
| `/ddaro:status` | In-worktree: local state. In main: auto-delegates to `/ddaro:list`. |
Expand Down
17 changes: 17 additions & 0 deletions commands/ddaro-go.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: ddaro:go
description: "Conductor entry point - read the worktree's lifecycle stage and run the next step (spec -> review -> implement -> check) automatically, instead of remembering which subcommand to call. Detects state, confirms before heavy stages (review/check), executes the matching spec/review/check section, advances the stage, and points at the next step. The manual /ddaro:spec | review | check stay available for forcing a specific stage."
argument-hint: "[spec|review|check] - no arg = auto-detect + run the next stage; an arg forces that stage"
allowed-tools: [Agent, Bash, Read, Write, Edit, Glob, Grep]
---

Read `${CLAUDE_PLUGIN_ROOT}/skills/ddaro/SKILL.md` section "## /ddaro:go [stage]" and execute with `$ARGUMENTS`.

- Precondition: must be inside a ddaro worktree (reuse the `/ddaro status` cwd detection). In main -> tell the user which worktree to `cd` into; not under ddaro -> suggest `/ddaro:start` or `/ddaro:adopt`.
- Determine the current stage from `.ddaro/lifecycle.json` if present, else infer it (design doc exists? has a `## Review findings` section? are there code changes beyond the doc?).
- If `$1` is `spec` / `review` / `check`, force that stage (manual override / re-run); otherwise run the auto-detected next stage.
- Before a heavy stage (review = 8 agents, check = prism-all), state what it will fire and confirm. The spec stage's `[DECIDE]` items are still asked interactively.
- Execute the corresponding `## /ddaro:spec` / `## /ddaro:review` / `## /ddaro:check` section - do NOT reimplement them. The conductor only sequences them.
- After the stage completes, advance `.ddaro/lifecycle.json` and tell the user the next step (re-run `/ddaro:go`). At the review -> implement boundary, STOP - the human implements, then runs `/ddaro:go` again to reach check.

This is the auto-transmission over the manual spec/review/check gears. It never touches git history; only `/ddaro:commit` / `/ddaro:merge` do.
6 changes: 3 additions & 3 deletions commands/ddaro.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
---
name: ddaro
description: "ddaro - worktree-based parallel workflow + lifecycle conductor. Use subcommands via /ddaro:start, /ddaro:adopt, /ddaro:resume, /ddaro:commit, /ddaro:merge, /ddaro:status, /ddaro:list, /ddaro:clear, /ddaro:abandon, /ddaro:config, and the 0.6.0 lifecycle trio /ddaro:spec, /ddaro:review, /ddaro:check. Or /ddaro <subcommand> [args]. Korean triggers: 따로, 병렬로, 분리해서, main 건드리지 마."
argument-hint: "<subcommand> [args] - start | adopt | resume | commit | merge | status | list | clear | abandon | config | spec | review | check"
description: "ddaro - worktree-based parallel workflow + lifecycle conductor. Use subcommands via /ddaro:start, /ddaro:adopt, /ddaro:resume, /ddaro:commit, /ddaro:merge, /ddaro:status, /ddaro:list, /ddaro:clear, /ddaro:abandon, /ddaro:config, the 0.6.0 lifecycle trio /ddaro:spec, /ddaro:review, /ddaro:check, and the 0.6.1 conductor /ddaro:go (auto-runs the next lifecycle stage). Or /ddaro <subcommand> [args]. Korean triggers: 따로, 병렬로, 분리해서, main 건드리지 마."
argument-hint: "<subcommand> [args] - start | adopt | resume | commit | merge | status | list | clear | abandon | config | go | spec | review | check"
allowed-tools: [Bash, Read, Write, Edit, Glob, Grep]
---

Read `${CLAUDE_PLUGIN_ROOT}/skills/ddaro/SKILL.md` fully, then:

- If `$ARGUMENTS` is empty, show a brief overview of all subcommands and recommend `/ddaro:start` for first-time users (or `/ddaro:adopt <path>` if they already have an existing worktree they want under ddaro).
- If `$ARGUMENTS[0]` matches one of: `start`, `adopt`, `resume`, `commit`, `merge`, `clear`, `status`, `list`, `abandon`, `config`, `spec`, `review`, `check` - execute the matching section in the skill document using the remaining arguments.
- If `$ARGUMENTS[0]` matches one of: `start`, `adopt`, `resume`, `commit`, `merge`, `clear`, `status`, `list`, `abandon`, `config`, `go`, `spec`, `review`, `check` - execute the matching section in the skill document using the remaining arguments.
- Legacy aliases: `summary` → `/ddaro:resume --recap-only` (with remaining args passed through). `setting` → `/ddaro:config` (no args, opens menu). Print a one-line "note: renamed in v0.3 — use <new-form> directly" then execute.
- Otherwise, report "unknown subcommand" and list valid ones.

Expand Down
Loading
Loading