claude-harness/tests/test-feature-plugin.sh
Andrey Epifancev 3aa34db5f0 test(plugins): тесты мода /feature в наборе обвязки, plugins/ — каталог кода (#7)
Агент, который правит обвязку, должен видеть мод частью проекта:
- tests/test-feature-plugin.sh — манифест, README и `claude plugin test`
  /`validate` мода в составе bash tests/run.sh; без claude в PATH — пропуск
  с пометкой. Правка формата ledger/Findings/Decisions без правки мода
  теперь роняет набор (проверено: испорченное ожидание → FAIL).
- .claude/code-paths: plugins/ — правки мода под require-plan, как hooks/
  и skills/.
- CLAUDE.md: команды тестов мода и запуск из worktree (--plugin-dir),
  правило «меняешь формат — правь мод в том же PR».

bash tests/run.sh — 162/162.

Refs #7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 11:56:20 +04:00

21 lines
1.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Мод /feature (plugins/feature): его тесты и проверка манифеста — часть набора обвязки.
# Мод читает форматы обвязки (ledger, ## Findings, Decisions в design.md, планы): правка формата
# без правки мода должна ронять этот набор. Нужен `claude` в PATH; без него — пропуск с пометкой.
P="$ROOT/plugins/feature"
assert_file "мод: манифест" "$P/.claude-plugin/plugin.json"
assert_grep "мод: имя feature" '"name": "feature"' "$P/.claude-plugin/plugin.json"
assert_file "мод: README с контрактом" "$P/README.md"
if command -v claude >/dev/null 2>&1; then
# claude читает свою конфигурацию из настоящего HOME, не из временного
out=$(HOME="$REAL_HOME" claude plugin test "$P" 2>&1); code=$?
if [ "$code" = 0 ] && printf '%s' "$out" | grep -qE '(^| )0 fail'; then
ok "мод: claude plugin test ($(printf '%s' "$out" | grep -oE '[0-9]+ pass' | head -1))"
else
fail "мод: claude plugin test" "exit $code; $(printf '%s' "$out" | grep -E 'fail|Error' | head -3 | tr '\n' ' ')"
fi
out=$(HOME="$REAL_HOME" claude plugin validate "$P" 2>&1); code=$?
[ "$code" = 0 ] && ok "мод: claude plugin validate" || fail "мод: claude plugin validate" "exit $code; $(printf '%s' "$out" | tail -3 | tr '\n' ' ')"
else
printf ' skip мод: claude не найден в PATH — тесты мода не запускались\n'
fi