feat(tooling): dev-orchestrator — OpenSpec + OpenCode dev→QA loop #5
@@ -71,8 +71,27 @@ cmd_spec() {
|
|||||||
(cd "$wt" && [ -d .venv ] || python3 -m venv .venv && . .venv/bin/activate && pip install -e . -q 2>&1 | tail -1) || true
|
(cd "$wt" && [ -d .venv ] || python3 -m venv .venv && . .venv/bin/activate && pip install -e . -q 2>&1 | tail -1) || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── orchestrator fills the spec ──
|
echo ""
|
||||||
echo "── Orchestrator filling spec ──"
|
_ok "Spec '$name' scaffolded at openspec/changes/$name/"
|
||||||
|
echo " Worktree: $wt"
|
||||||
|
echo ""
|
||||||
|
echo " ── Next: explore in OpenCode ──"
|
||||||
|
echo " opencode"
|
||||||
|
echo " Then use OpenSpec native commands:"
|
||||||
|
echo " /opsx:explore — discuss the feature, refine requirements"
|
||||||
|
echo " /opsx:continue — fill spec artifacts one by one"
|
||||||
|
echo ""
|
||||||
|
echo " After specs are filled → dev-orchestrator build $name"
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd_fill() {
|
||||||
|
local name="$1"
|
||||||
|
_guard
|
||||||
|
|
||||||
|
local wt="$(_wt_path "$name")"
|
||||||
|
[ -d "openspec/changes/$name" ] || _die "spec not found: openspec/changes/$name. Run: dev-orchestrator spec $name"
|
||||||
|
|
||||||
|
echo "── AI filling spec from conversation context ──"
|
||||||
opencode run \
|
opencode run \
|
||||||
"You are filling an OpenSpec change for feature: $name.
|
"You are filling an OpenSpec change for feature: $name.
|
||||||
|
|
||||||
@@ -91,8 +110,7 @@ cmd_spec() {
|
|||||||
--workdir "$REPO"
|
--workdir "$REPO"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
_ok "Spec '$name' ready at openspec/changes/$name/"
|
_ok "Spec '$name' filled at openspec/changes/$name/"
|
||||||
echo " Worktree: $wt"
|
|
||||||
echo " Review the spec, then: dev-orchestrator build $name"
|
echo " Review the spec, then: dev-orchestrator build $name"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,6 +265,10 @@ case "${1:-}" in
|
|||||||
[ $# -ge 2 ] || _die "usage: dev-orchestrator spec <feature-name>"
|
[ $# -ge 2 ] || _die "usage: dev-orchestrator spec <feature-name>"
|
||||||
cmd_spec "$2"
|
cmd_spec "$2"
|
||||||
;;
|
;;
|
||||||
|
fill)
|
||||||
|
[ $# -ge 2 ] || _die "usage: dev-orchestrator fill <feature-name>"
|
||||||
|
cmd_fill "$2"
|
||||||
|
;;
|
||||||
build)
|
build)
|
||||||
[ $# -ge 2 ] || _die "usage: dev-orchestrator build <feature-name>"
|
[ $# -ge 2 ] || _die "usage: dev-orchestrator build <feature-name>"
|
||||||
cmd_build "$2"
|
cmd_build "$2"
|
||||||
@@ -263,12 +285,13 @@ case "${1:-}" in
|
|||||||
echo ""
|
echo ""
|
||||||
echo "commands:"
|
echo "commands:"
|
||||||
echo " init Set up repo (run once per project)"
|
echo " init Set up repo (run once per project)"
|
||||||
echo " spec <feature-name> Create OpenSpec + worktree + fill spec"
|
echo " spec <feature-name> Scaffold OpenSpec + worktree (no fill)"
|
||||||
|
echo " fill <feature-name> AI fills spec after exploration"
|
||||||
echo " build <feature-name> Dev→QA loop in isolated worktree"
|
echo " build <feature-name> Dev→QA loop in isolated worktree"
|
||||||
echo " status Kanban view of features in flight"
|
echo " status Kanban view of features in flight"
|
||||||
echo " clean <feature-name> Remove worktree + branch"
|
echo " clean <feature-name> Remove worktree + branch"
|
||||||
echo ""
|
echo ""
|
||||||
echo "flow: init → spec → [review] → build → [loop until QA passes]"
|
echo "flow: init → spec → [explore in OpenCode] → fill → build → [QA loop]"
|
||||||
echo ""
|
echo ""
|
||||||
echo "worktrees live at: ../.worktrees/<feature>/"
|
echo "worktrees live at: ../.worktrees/<feature>/"
|
||||||
echo "branches named: dev-flow/<feature>"
|
echo "branches named: dev-flow/<feature>"
|
||||||
|
|||||||
Reference in New Issue
Block a user