Мод /feature: перенос в обвязку (plugins/feature) (#7) #8

Open
aep wants to merge 3 commits from feat/7-feature-pane into main
Owner

Closes #7

Мод Claude Code /feature переносится из временной папки сессии obsidian-voice-note (~/.claude/dev-mods/<session>/plan-progress/) в обвязку, plugins/feature/. Поведение не менялось; это bounded-задача — без OpenSpec change и плана.

Что в PR

  • plugins/feature/ — мод как есть: hooks/parse.ts (чистый разбор плана, ledger, ## Findings, решений из design.md, этапа), hooks/register.tsx (команда, панель, вкладки, открытие документов в glow), tests/feature.test.ts (22 теста).
  • Плагин переименован plan-progress → feature; id панели — feature.
  • plugins/feature/README.md — что показывает, контракт с форматами обвязки, как разрабатывать (claude --plugin-dir).
  • .gitignore — plugins/*/.claude-plugin/types/ (типы пишет движок при загрузке мода).
  • Строка о моде в CLAUDE.md (Архитектура) и README.md (Файлы).
  • Мод — часть проекта для агента, который правит обвязку (коммит 3aa34db):
    • tests/test-feature-plugin.sh: манифест, README, claude plugin test и validate мода в составе bash tests/run.sh (без claude в PATH — пропуск с пометкой);
    • .claude/code-paths: plugins/ — правки мода под require-plan, как hooks/ и skills/;
    • CLAUDE.md: команды тестов мода, запуск из worktree, правило «меняешь формат ledger/Findings/Decisions/плана — правь мод в том же PR».

Проверки

  • claude plugin test plugins/feature — 22 pass, 0 fail.
  • claude plugin validate plugins/feature — passed (одно предупреждение: нет author в plugin.json).
  • npx -p typescript tsc -p plugins/feature --noEmit — чисто (типы скопированы из загруженной копии мода).
  • bash tests/run.sh — passed 162, failed 0 (157 прежних + 5 новых про мод).
  • Тест ловит поломку: испорченное ожидание в тестах мода → FAIL мод: claude plugin test; после восстановления — зелёный.

Rulings I made

  • Запасные имена команды: /feature → /progress → /feature-pane (было /plan-progress, по старому имени плагина).
  • Тестовый файл переименован progress.test.ts → feature.test.ts.
  • README мода содержит таблицу «что читает»: формат любого из этих источников меняется — мод меняется в том же PR.
  • install.sh мод не ставит — отдельная задача (ниже), чтобы этот PR не менял установку. Тесты мода в tests/run.sh включены сразу: иначе правка формата обвязки на другой машине не заметила бы мод.
  • В test-feature-plugin.sh claude запускается с настоящим HOME, а не с временным из run.sh: CLI читает свою конфигурацию оттуда.

Не входит (следующие issue)

  • Установка из marketplace (.claude-plugin/marketplace.json), проверка в install.sh --check.
  • Правило про таблицу ## Findings в roles/dev.md (сейчас оно есть только в локальном ~/.claude/CLAUDE.md одной машины).
  • Workspace из нескольких репозиториев (.wt/<фича>/<репо>, как в awp-ca): вариант А — элемент карусели = репозиторий внутри фичи.

Ручная проверка

claude --plugin-dir <worktree>/plugins/feature в любом проекте с обвязкой → /feature: панель открывается, вкладки 1–4, ветки 9/0, Enter на документе открывает glow справа.

🤖 Generated with Claude Code

Closes #7 Мод Claude Code `/feature` переносится из временной папки сессии obsidian-voice-note (`~/.claude/dev-mods/<session>/plan-progress/`) в обвязку, `plugins/feature/`. Поведение не менялось; это bounded-задача — без OpenSpec change и плана. ## Что в PR - `plugins/feature/` — мод как есть: `hooks/parse.ts` (чистый разбор плана, ledger, `## Findings`, решений из design.md, этапа), `hooks/register.tsx` (команда, панель, вкладки, открытие документов в glow), `tests/feature.test.ts` (22 теста). - Плагин переименован `plan-progress` → `feature`; id панели — `feature`. - `plugins/feature/README.md` — что показывает, контракт с форматами обвязки, как разрабатывать (`claude --plugin-dir`). - `.gitignore` — `plugins/*/.claude-plugin/types/` (типы пишет движок при загрузке мода). - Строка о моде в `CLAUDE.md` (Архитектура) и `README.md` (Файлы). - Мод — часть проекта для агента, который правит обвязку (коммит `3aa34db`): - `tests/test-feature-plugin.sh`: манифест, README, `claude plugin test` и `validate` мода в составе `bash tests/run.sh` (без `claude` в PATH — пропуск с пометкой); - `.claude/code-paths`: `plugins/` — правки мода под require-plan, как `hooks/` и `skills/`; - `CLAUDE.md`: команды тестов мода, запуск из worktree, правило «меняешь формат ledger/Findings/Decisions/плана — правь мод в том же PR». ## Проверки - `claude plugin test plugins/feature` — 22 pass, 0 fail. - `claude plugin validate plugins/feature` — passed (одно предупреждение: нет `author` в plugin.json). - `npx -p typescript tsc -p plugins/feature --noEmit` — чисто (типы скопированы из загруженной копии мода). - `bash tests/run.sh` — passed 162, failed 0 (157 прежних + 5 новых про мод). - Тест ловит поломку: испорченное ожидание в тестах мода → `FAIL мод: claude plugin test`; после восстановления — зелёный. ## Rulings I made - Запасные имена команды: `/feature` → `/progress` → `/feature-pane` (было `/plan-progress`, по старому имени плагина). - Тестовый файл переименован `progress.test.ts` → `feature.test.ts`. - README мода содержит таблицу «что читает»: формат любого из этих источников меняется — мод меняется в том же PR. - `install.sh` мод не ставит — отдельная задача (ниже), чтобы этот PR не менял установку. Тесты мода в `tests/run.sh` включены сразу: иначе правка формата обвязки на другой машине не заметила бы мод. - В `test-feature-plugin.sh` `claude` запускается с настоящим `HOME`, а не с временным из `run.sh`: CLI читает свою конфигурацию оттуда. ## Не входит (следующие issue) - Установка из marketplace (`.claude-plugin/marketplace.json`), проверка в `install.sh --check`. - Правило про таблицу `## Findings` в `roles/dev.md` (сейчас оно есть только в локальном `~/.claude/CLAUDE.md` одной машины). - Workspace из нескольких репозиториев (`.wt/<фича>/<репо>`, как в awp-ca): вариант А — элемент карусели = репозиторий внутри фичи. ## Ручная проверка `claude --plugin-dir <worktree>/plugins/feature` в любом проекте с обвязкой → `/feature`: панель открывается, вкладки `1`–`4`, ветки `9`/`0`, Enter на документе открывает glow справа. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
aep added 1 commit 2026-10-15 10:38:05 +03:00
Мод Claude Code жил во временной папке сессии obsidian-voice-note и в
новых сессиях не загружался. Перенесён как есть в plugins/feature/,
плагин переименован plan-progress → feature (команда /feature, запасные
/progress и /feature-pane). Поведение не менялось.

- README мода: что показывает, контракт с форматами обвязки (ledger,
  ## Findings, Decisions в design.md, планы, .bounded), разработка.
- Сгенерированные движком типы (.claude-plugin/types/) — в .gitignore.
- Строки о моде в CLAUDE.md и README обвязки; install.sh его пока не ставит.

Проверено: claude plugin test plugins/feature — 22/22, claude plugin
validate — без ошибок, tsc — чисто, bash tests/run.sh — 157/157.

Refs #7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
aep added 1 commit 2026-10-15 10:56:24 +03:00
Агент, который правит обвязку, должен видеть мод частью проекта:
- 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>
aep added 1 commit 2026-10-15 10:57:19 +03:00
Refs #7

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This pull request has changes conflicting with the target branch.
  • .claude/code-paths
  • CLAUDE.md
  • README.md

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/7-feature-pane:feat/7-feature-pane
git checkout feat/7-feature-pane
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/claude-harness#8
No description provided.