diff --git a/AGENTS.md b/AGENTS.md index a1485df..601620b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ ## Project Structure & Module Organization -This is a Bash CLI project. The active runtime is the root `devloop` executable. `install.sh` links it into a local bin directory, `tests/devloop_test.sh` covers the shell runtime, `skills/spec/SKILL.md` is the spec-generation prompt asset, and `templates/spec.md` is the starter spec. Generated runtime output belongs under `.codex/` in target repositories and should not be committed here. +This is a Bash CLI project. The active runtime is the root `devloop` executable. `install.sh` links it into a local bin directory, `tests/devloop_test.sh` covers the shell runtime, `skills/devloop-spec/SKILL.md` is the spec-generation prompt asset, `skills/devloop-review/SKILL.md` is the review prompt asset, and `templates/spec.md` is the starter spec. Generated runtime output belongs under `.codex/` in target repositories and should not be committed here. ## Build, Test, and Development Commands diff --git a/devloop b/devloop index 1866fca..d2e94df 100755 --- a/devloop +++ b/devloop @@ -1081,7 +1081,7 @@ review_prompt() { local criteria priors review_skill strict_rule criteria="$(criteria_block "$criteria_file")" priors="$(list_reviews "$slug" "$pass" "$max")" - review_skill="$(cat "$ROOT_DIR/skills/review/SKILL.md")" + review_skill="$(cat "$ROOT_DIR/skills/devloop-review/SKILL.md")" strict_rule="" if [ "$strict" = true ]; then strict_rule=" @@ -1635,7 +1635,7 @@ spec_command() { esac done - local skill="$ROOT_DIR/skills/spec/SKILL.md" + local skill="$ROOT_DIR/skills/devloop-spec/SKILL.md" case "$action" in print-skill) cat "$skill"; return ;; skill-path) printf '%s\n' "$skill"; return ;; diff --git a/skills/review/SKILL.md b/skills/devloop-review/SKILL.md similarity index 94% rename from skills/review/SKILL.md rename to skills/devloop-review/SKILL.md index 95bb312..7a80241 100644 --- a/skills/review/SKILL.md +++ b/skills/devloop-review/SKILL.md @@ -1,6 +1,6 @@ --- name: devloop-review -description: Review devloop implementation passes with separate spec and engineering gates. +description: Use this skill when reviewing a devloop implementation pass against a spec, track, diff, prior reviews, acceptance criteria, or engineering quality gates. Decide ACCEPT, REJECT, or UNCLEAR with concrete evidence and fix instructions. --- # Devloop Review diff --git a/skills/spec/SKILL.md b/skills/devloop-spec/SKILL.md similarity index 93% rename from skills/spec/SKILL.md rename to skills/devloop-spec/SKILL.md index 17a4dc5..8b11a58 100644 --- a/skills/spec/SKILL.md +++ b/skills/devloop-spec/SKILL.md @@ -1,6 +1,6 @@ --- name: devloop-spec -description: Interview from a cold start or distill existing material into one devloop-compatible implementation spec. Use when the user wants a concrete spec for devloop, whether they provide notes, a file, a URL, research, conversation context, or only a rough idea. +description: Use this skill when the user wants a devloop-ready implementation spec from a rough idea, notes, file, URL, issue, research, or conversation context. Interview from a cold start when source material is too thin; otherwise distill the provided material into one concrete spec. --- # Devloop Spec diff --git a/tests/devloop_test.sh b/tests/devloop_test.sh index e7af398..72947c5 100755 --- a/tests/devloop_test.sh +++ b/tests/devloop_test.sh @@ -39,10 +39,21 @@ contains "$help" "--create-pr" "help" ok "help output" skill_path="$("$ROOT/devloop" spec --skill-path)" -[[ "$skill_path" == "$ROOT/skills/spec/SKILL.md" ]] || fail "unexpected skill path: $skill_path" +[[ "$skill_path" == "$ROOT/skills/devloop-spec/SKILL.md" ]] || fail "unexpected skill path: $skill_path" contains "$("$ROOT/devloop" spec --print-skill)" "name: devloop-spec" "spec skill" ok "spec skill path" +for skill in "$ROOT"/skills/*/SKILL.md; do + name="$(sed -n 's/^name: *//p' "$skill" | head -n 1)" + description="$(sed -n 's/^description: *//p' "$skill" | head -n 1)" + dirname="$(basename "$(dirname "$skill")")" + [[ "$name" == "$dirname" ]] || fail "skill name mismatch: $skill declares $name" + [[ "$name" =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]] || fail "invalid skill name: $name" + [[ -n "$description" ]] || fail "missing skill description: $skill" + [[ "${#description}" -le 1024 ]] || fail "skill description too long: $skill" +done +ok "skill metadata" + work=$(mktemp -d "${TMPDIR:-/tmp}/devloop-test.XXXXXX") trap 'rm -rf "$work"' EXIT