docs(spec+plan): R15 motion-runtime removal — design + impl plan

Brainstormed via superpowers:brainstorming. User decision 12.05.2026:
remove R15 PSR_v1 section entirely (variant B). Conscious rollback of
audited construction from v1.83 (10.05.2026).

Spec: docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md
Plan: docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-05-12 07:17:19 +03:00
parent 48f27b41e5
commit 0fd93fd686
2 changed files with 1063 additions and 0 deletions
@@ -0,0 +1,902 @@
# Remove R15 motion-runtime restrictions — Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Remove R15 motion-runtime restrictions from project rule base across 4 normative documents (PSR_v1 v1.7 → v2.0, CLAUDE.md v1.87 → v1.88, Tooling v1.15 → v1.16, Pravila v1.10 → v1.11), so that `motion-v`, `gsap`, `anime.js`, `lottie-web`, `popmotion`, `@motionone/*` become unconditionally permitted. `framer-motion` remains a **technical block** (React-only, peerDep `react+react-dom` — physically does not run in Vue), no longer a regulatory rule.
**Architecture:** Atomic edit of 4 `.md` files + CHANGELOG + memory sync, executed via `/claude-md-management:claude-md-improver` for CLAUDE.md (mandated by CLAUDE.md §5 п.10) and direct Edit for the other three normative docs. Done on isolated branch `rules/remove-r15` off `origin/main` (`48f27b4`). One atomic commit gates lefthook (gitleaks + lychee + markdownlint). PR follows. No code (`resources/js/`, `app/`, `db/`) touched — Pest/Vitest/Histoire not run, no migrations.
**Tech Stack:** Markdown only (`.md`). Tooling: git, lefthook, lychee, gitleaks, markdownlint-cli2, `gh` (GitHub CLI), `/claude-md-management:claude-md-improver` skill, semantic grep (Grep tool).
**Spec:** [docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md](../specs/2026-05-12-remove-r15-motion-restrictions-design.md)
---
## File Structure
Files modified by this plan (all `.md`):
| Path | Purpose | Size of change |
|---|---|---|
| `docs/Plugin_stack_rules_v1.md` | PSR_v1 v1.7 → v2.0: R15 section removal + R0.6 п.11 + R8 motion tie-breakers + R11.6 + R13 motion rows + header + changelog | Major (~90 lines deleted, header reformulated, v2.0 changelog entry added) |
| `CLAUDE.md` (repository root) | v1.87 → v1.88: §5 п.12 → marker, §2 Animation default stack reformulated, header + §9 history entry | Medium |
| `docs/Tooling_v8_3.md` | Прил. Н v1.15 → v1.16: §9.2 reformulated, header cross-refs sync, changelog entry | Medium |
| `docs/Pravila_raboty_Claude_v1_1.md` | v1.10 → v1.11: §13.10 deleted, §11.5 + §13.2 + §13.9 + §13.6 cross-ref version bumps | Medium |
| `docs/CHANGELOG_claude_md.md` | New v1.88 entry at top | Small (new entry) |
| `MEMORY.md` (user memory dir) | Index hook for plugin paired stack — version bump | Small (1 line) |
| `memory/feedback_plugin_paired_stack.md` | Version refs v1.7 → v2.0, R15 → historical | Small (3-5 lines) |
| `docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md` | Already written, only needs commit | No edit |
| `docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md` | This plan file | Created in T1 |
Files NOT touched: `app/`, `resources/`, `db/`, `tests/`, `package.json`, `composer.json`, `lefthook.yml`, `.mcp.json`, settings.
---
## Task 1: Setup branch and commit design doc + plan
**Files:**
- Already exists: `docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md`
- Created in T1: `docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md` (this file)
- [ ] **Step 1: Verify origin/main HEAD matches plan's base assumption**
Run: `git fetch origin main && git log -1 --format=%H origin/main`
Expected: `48f27b4...` (or newer — note the SHA actually returned for the PR body later)
- [ ] **Step 2: Create branch from `origin/main`**
Run: `git checkout -b rules/remove-r15 origin/main`
Expected: `Switched to a new branch 'rules/remove-r15'`
- [ ] **Step 3: Stage and commit design doc + plan separately from rule edits**
Both files are currently untracked (`git status` lists them). Stage them explicitly:
Run:
```bash
git add docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md \
docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md
git commit -m "$(cat <<'EOF'
docs(spec+plan): R15 motion-runtime removal — design + impl plan
Brainstormed via superpowers:brainstorming. User decision 12.05.2026:
remove R15 PSR_v1 section entirely (variant B). Conscious rollback of
audited construction from v1.83 (10.05.2026).
Spec: docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md
Plan: docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
```
- [ ] **Step 4: Verify lefthook passed on design+plan commit**
If lefthook blocked (lychee broken link / markdownlint error / gitleaks leak) — fix the file content and re-commit as a NEW commit (do NOT --amend; CLAUDE.md §5 п.11 forbids amend on hook failure). Investigate and fix root cause.
Expected: clean commit, no hook failures (these are markdown-only files with no secrets and no external links beyond existing docs).
- [ ] **Step 5: Verify branch state**
Run: `git status && git log --oneline -3`
Expected:
- Branch clean
- HEAD commit message: `docs(spec+plan): R15 motion-runtime removal...`
- Parent = `48f27b4` (or whatever origin/main was at fetch time)
---
## Task 2: PSR_v1 v1.7 → v2.0 — remove R15 + R0.6 п.11 + R8 motion + R11.6 + R13 motion + finale + properties + header + changelog
**Files:**
- Modify: `docs/Plugin_stack_rules_v1.md` (lines 1, 3, 4, 6, 10, 136, 148, 353-355, 523-547, 609-613, 743-820, 824, 830-831, 845, header changelog block)
This is the largest task. **Read the file in chunks first** (the file is 916 lines, too large for a single Read), then apply edits in sequence.
- [ ] **Step 1: Re-Read line range 155 (header + R0.1)**
Read: `docs/Plugin_stack_rules_v1.md` lines 155.
Confirm content matches what plan expects:
- L1: `# Plugin Stack Rules — Superpowers + Frontend Design (v1.7)`
- L4 contains `+ R15 (motion-системы` narrative
- L6 contains `Runtime-зависимости проекта (motion-библиотеки и т.п.) подчиняются R15.`
- L10 contains `§5 п.12 — на R15 (motion-системы)`
- [ ] **Step 2: Edit header line 1 → v2.0**
Use Edit tool. Replace:
```
# Plugin Stack Rules — Superpowers + Frontend Design (v1.7)
```
With:
```
# Plugin Stack Rules — Superpowers + Frontend Design (v2.0)
```
- [ ] **Step 3: Edit date line 3 → 12.05.2026**
Replace:
```
**Дата:** 10.05.2026 (поздний вечер)
```
With:
```
**Дата:** 12.05.2026
```
- [ ] **Step 4: Edit line 4 (narrative shapка) — strip R15 ссылки**
Read line 4 fully first (it's long; Grep `^\*\*Назначение` to spot it). Replace the existing line 4 with a rewritten version where:
- The phrase `+ правила runtime motion-стойки` is **removed** (no motion stack as part of normative base any more)
- The phrase `+ 2 новых правила R14 (pipeline внешних UI-генераторов: UPM + 21st Magic MCP) и R15 (motion-системы: framer-motion hard-запрет + motion-v узкое окно по 4 условиям) в v1.4` → keep the R14 part but truncate the R15 part. Replace `R14 (pipeline внешних UI-генераторов: UPM + 21st Magic MCP) и R15 (motion-системы: framer-motion hard-запрет + motion-v узкое окно по 4 условиям) в v1.4` with `R14 (pipeline внешних UI-генераторов: UPM + 21st Magic MCP) в v1.4 (R15 motion-системы введены в v1.4 и удалены в v2.0)`.
- Append at end of line a new v2.0 entry: `+ 1 правка четвёртого аудита в v2.0 (12.05.2026 — снят R15 motion-runtime по решению заказчика; conscious rollback v1.4 audited construction; framer-motion переведён из regulatory hard-запрета в technical-guidance уровень: peerDep на react+react-dom, не работает в Vue физически)`
(Exact wording is verbose; the engineer should preserve existing v1.0v1.7 narrative and only patch the R15-specific clauses + add v2.0 clause at end of line 4.)
- [ ] **Step 5: Edit line 6 — strip motion-runtime sentence**
Replace:
```
Stack никогда не уступает первенство **уровням 4–6** — даже когда задача предметно ближе к чужому плагину, stack первой делает классификацию и потом **делегирует** инструменту, не отдаёт ему gate. Runtime-зависимости проекта (motion-библиотеки и т.п.) подчиняются R15.
```
Wait — Re-Read line 6 first (Grep `Runtime-зависимости проекта`). The phrase is in line 6 (the principle-axiom paragraph). Replace just the last sentence:
- old: `Runtime-зависимости проекта (motion-библиотеки и т.п.) подчиняются R15.`
- new: `` (empty — remove the sentence entirely; runtime motion deps no longer governed by PSR_v1)
- [ ] **Step 6: Edit line 10 — strip §5 п.12 R15 ref**
Replace:
```
- [CLAUDE.md](../CLAUDE.md) v1.86+ — оперативная карта; §1 priority chain, §3.3 строка #33, §5 п.5 ссылается на этот документ (расширенный пул UI-инструментов: FD + UPM + 21st), §5 п.11 cross-ref на Pravila §12.3 SoT, §5 п.12 — на R15 (motion-системы)
```
With:
```
- [CLAUDE.md](../CLAUDE.md) v1.88+ — оперативная карта; §1 priority chain, §3.3 строка #33, §5 п.5 ссылается на этот документ (расширенный пул UI-инструментов: FD + UPM + 21st), §5 п.11 cross-ref на Pravila §12.3 SoT, §5 п.12 — резерв (R15 motion-runtime снят в v2.0)
```
- [ ] **Step 7: Edit line 12 — bump Tooling cross-ref to v1.16+ and strip R15 from §9.2 description**
Replace:
```
- [docs/Tooling_v8_3.md](Tooling_v8_3.md) **v1.15+** — реестр инструментов; #30 Frontend Design + #31 UPM + #32 21st Magic MCP + #33 claude-md-management + §6 +5 конфликтов v1.4 + §7 7-уровневая иерархия (с v1.14 +Tooling explicit slot 2b) + §9.2 motion-runtime denylist отсылают сюда; §10.3 шаг 2 sync (14 skills) с v1.14
```
With:
```
- [docs/Tooling_v8_3.md](Tooling_v8_3.md) **v1.16+** — реестр инструментов; #30 Frontend Design + #31 UPM + #32 21st Magic MCP + #33 claude-md-management + §6 +5 конфликтов v1.4 (строка «framer-motion ↔ motion-v» — historical после v2.0) + §7 7-уровневая иерархия (с v1.14 +Tooling explicit slot 2b) + §9.2 motion-runtime guidance (technical-only после v1.16); §10.3 шаг 2 sync (14 skills) с v1.14
```
Also bump Pravila cross-ref one line above (line 11): replace `v1.10+` with `v1.11+` and `§13.10 hard-link на R14 PSR_v1` with `§13.10 удалён в v1.11 (был hard-link на R15, снят с R15)`.
(Engineer: Re-Read line 11 first to confirm exact wording before patching.)
- [ ] **Step 8: Edit line 136 — strip R15 from cross-ref note**
Replace:
```
**Hard-стоп даже в Auto mode** — обязательная остановка независимо от классификации, при любом из триггеров (нумерация введена в v1.6 для надёжности cross-refs «R0.6 пункт N»; при добавлении/удалении пункта — пересмотреть все ссылки в R8/R13/R14/R15):
```
With:
```
**Hard-стоп даже в Auto mode** — обязательная остановка независимо от классификации, при любом из триггеров (нумерация введена в v1.6 для надёжности cross-refs «R0.6 пункт N»; при добавлении/удалении пункта — пересмотреть все ссылки в R8/R13/R14):
```
- [ ] **Step 9: Delete R0.6 п.11 — line 148**
Delete the entire line:
```
11. **[v1.4]** Установка **motion-v** или любой другой animation runtime библиотеки (`gsap`, `anime.js`, `react-spring`, `lottie-web`, `popmotion`, `@motionone/*` и т.д.) в `package.json` без прохождения R15.2 (а)+(б)+(в)+(г).
```
After deletion: list ends at item 10. Verify items 110 remain intact.
- [ ] **Step 10: Delete R8 motion tie-breaker rows (lines 353-355)**
Re-Read line range 340360 to confirm. Delete the three lines:
```
| **[v1.4]** «Поставим motion-v, у нас в Vuetify не хватает spring-physics» | без письменного кейса из ТЗ + категории (б) + Brandbook approval (в) + R12 flow (г) — R15.2 не удовлетворён, hard-стоп R0.6 пункт 11 |
| **[v1.4]** «Поставим framer-motion, у других проектов работает» | R15.1 hard-запрет. React-only физически. Не отменяется live-командой |
| **[v1.4]** Для анимации список задача — какой слой? | R11.6: 1 (Vue native `<Transition>`) → 2 (Vuetify) → 3 (CSS) → 4 (View Transitions). На уровне 1 уже закрывается типичный case |
```
(Engineer: there are also lines 353/354 with framer-motion / motion-v from earlier grep — Re-Read full range 340360 to confirm exact line numbers before deletion.)
- [ ] **Step 11: Delete R11.6 (lines ~523547) — Иерархия motion-источников**
Re-Read line range 515555 to confirm section boundaries.
Delete the entire R11.6 sub-section, starting at:
```
### 11.6. Иерархия motion-источников (внутри уровня визуального дизайна, v1.4)
```
through the last bullet/sentence of R11.6 (likely ending at line 547 or where R12 begins, e.g., `## Правило 12` or `---`).
Be careful NOT to delete:
- R11.5 (ends just before R11.6)
- R12 (starts after R11.6)
- [ ] **Step 12: Delete R13 motion-сценарии rows (lines ~609613)**
Re-Read line range 600620 to confirm. Delete five rows:
```
| **[v1.4]** Анимация на экране, простая (fade/slide/scale/expand) | высокая | **действую**, использую Vuetify transition или Vue `<Transition>` (R11.6 уровни 34) |
| **[v1.4]** Анимация средней сложности (custom keyframes, hover-state с timing) | высокая | **действую**, использую CSS `@keyframes` (R11.6 уровень 5) |
| **[v1.4]** Cross-route transition (hero-transition при переходе между экранами) | средняя | **фиксирую предположение**: «использую View Transitions API с fallback на Vue `<Transition>` для не-Chromium»; если кейс требует motion-v → R15.2 |
| **[v1.4]** Запрос «давай добавим framer-motion / motion-v / gsap / lottie» **без явного кейса** | низкая | **hard-стоп R0.6 пункт 11** + R15.2 формальная проверка триггеров; нельзя действовать в Auto mode |
| **[v1.4]** Кейс из ТЗ требует gesture с физикой (drag с инерцией, swipe с pinch) | средняя | **действую**, R15.2 запускает brainstorming + 3 варианта (motion-v vs vanilla pointer events vs CSS scroll-snap); презентую таблицу |
```
- [ ] **Step 13: Delete entire Правило 15 (lines ~743820)**
Re-Read line range 740822 to confirm boundaries.
Delete everything starting from:
```
## Правило 15 — Motion-системы (animation libraries, v1.4)
```
through (and including) the closing `---` separator just before `## Финальная формула` (`## Финальная формула` should NOT be deleted; the `---` immediately before it is the boundary; engineer judges visually).
Confirmation: after deletion, line `## Правило 14` (or its sub-sections) should be immediately followed by `---` then `## Финальная формула`.
- [ ] **Step 14: Edit «Финальная формула» (line ~824) — strip R14 trailing R15 ref**
Re-Read line range 822826.
Replace:
```
> **Любая задача → Правило 0 (gate, stack-головной) → Правило 1 (классификация по типу) → Правило 9 (решение, ≤2 итерации) → Правило 13 (decision matrix по уверенности) → Правило 2 (фаза UI-фичи) → исполнение по Правилам 3, 4, 6 → если нужен внешний UI-генератор: Правило 14 pipeline (UPM на фазах 1/2, 21st на фазе 5) → если нужна анимация: Правило 15 (default стойка R15.3, motion-v только по 4 условиям R15.2) → завершение по Правилу 7 → ревью по Правилу 5. Источники истины — Правило 11 (UI/UX) + R11.6 (motion). Паттерны решений — Правило 12. Координация с не-stack плагинами — Правило 10. Тай-брейкеры — Правило 8.**
```
With:
```
> **Любая задача → Правило 0 (gate, stack-головной) → Правило 1 (классификация по типу) → Правило 9 (решение, ≤2 итерации) → Правило 13 (decision matrix по уверенности) → Правило 2 (фаза UI-фичи) → исполнение по Правилам 3, 4, 6 → если нужен внешний UI-генератор: Правило 14 pipeline (UPM на фазах 1/2, 21st на фазе 5) → завершение по Правилу 7 → ревью по Правилу 5. Источники истины — Правило 11 (UI/UX). Паттерны решений — Правило 12. Координация с не-stack плагинами — Правило 10. Тай-брейкеры — Правило 8.**
```
(Removed: «если нужна анимация: Правило 15 (default стойка R15.3, motion-v только по 4 условиям R15.2)»; «+ R11.6 (motion)».)
- [ ] **Step 15: Edit «Свойства свода» (lines ~830831) — strip R15/motion refs**
Re-Read line range 828832.
Replace:
```
- **Полнота:** каждая задача попадает в одну ветку Правила 1, каждая фаза имеет одного владельца (Правило 2), каждый артефакт ревью — один аспект (Правило 5), каждый тип закрытия — один gate (Правило 7), каждое дизайн-решение — один паттерн (Правило 12), каждая комбинация Auto+§12+R0.6 — одна строка matrix'а (Правило 13), каждый внешний UI-генератор имеет одно место в pipeline (Правило 14), каждая motion-задача — один слой R11.6 (Правило 15).
- **Головенство stack'а (v1.2 принцип-аксиома, расширена в v1.4):** stack — головной при решении любой задачи. Внешние плагины (включая UPM и 21st Magic MCP) — инструменты, инвокируемые внутри stack-flow (Правило 10) через pipeline R14. Иерархия источников UI — закон, не гайдлайн (Правило 11). Runtime-зависимости (motion) подчиняются R15.
```
With:
```
- **Полнота:** каждая задача попадает в одну ветку Правила 1, каждая фаза имеет одного владельца (Правило 2), каждый артефакт ревью — один аспект (Правило 5), каждый тип закрытия — один gate (Правило 7), каждое дизайн-решение — один паттерн (Правило 12), каждая комбинация Auto+§12+R0.6 — одна строка matrix'а (Правило 13), каждый внешний UI-генератор имеет одно место в pipeline (Правило 14).
- **Головенство stack'а (v1.2 принцип-аксиома, расширена в v1.4):** stack — головной при решении любой задачи. Внешние плагины (включая UPM и 21st Magic MCP) — инструменты, инвокируемые внутри stack-flow (Правило 10) через pipeline R14. Иерархия источников UI — закон, не гайдлайн (Правило 11). Runtime-зависимости (motion-библиотеки и т.п.) — вне регулирования PSR_v1 с v2.0 (см. CLAUDE.md §2 «Animation default stack» — рекомендация, не hard-rule).
```
- [ ] **Step 16: Strip R15 from v1.4 changelog entry properties (line ~845)**
Re-Read line range 843848. The v1.4 entry inside `Непротиворечивость` properties block lists `R15 новое правило (R15.1 framer-motion hard-запрет, R15.2 motion-v 4 условия...)`. **Do NOT delete this changelog entry** — it's historical record of v1.4 work. Just append a marker note at end:
After existing line 845 (the v1.4 line), add a new bullet line:
```
- **v2.0 (снятие R15):** R15 motion-системы (R15.1–R15.7) удалены полностью; R0.6 п.11 удалён; R8 motion тай-брейкеры удалены; R11.6 motion иерархия удалена; R13 motion-сценарии удалены. Default motion stack перенесён в CLAUDE.md §2 как guidance, не hard-rule. framer-motion — technical block (peerDep react+react-dom), не regulatory rule. Conscious rollback v1.4 audited construction по решению заказчика 12.05.2026; через `/superpowers:brainstorming` → 3 варианта → выбор B (полная отмена R15) → `superpowers:writing-plans` → `/claude-md-management:claude-md-improver`.
```
- [ ] **Step 17: Add v2.0 entry to «История версий» (line ~853)**
Re-Read line range 850855.
Above existing line `- **v1.7 от 10.05.2026 (поздний вечер)**`, insert new entry:
```
- **v2.0 от 12.05.2026** — major bump: removal of R15 motion-runtime restrictions per user decision. Conscious rollback of v1.4 audited construction (10.05.2026, R15 двухуровневая motion + R0.6 п.11 + R8 motion-tie-breakers + R11.6 motion-иерархия + R13 motion-сценарии).
**Удалено:**
- Правило 15 целиком (R15.1 framer-motion hard-запрет / R15.2 motion-v 4 условия / R15.3 default стойка / R15.4 формальная проверка / R15.5 hard-запрет дублирования / R15.6 live-override / R15.7 расширение на gsap/anime/lottie/popmotion).
- R0.6 пункт 11 (animation runtime hard-стоп).
- R8 три тай-брейкера motion (motion-v, framer-motion, motion-слой R11.6).
- R11.6 параллельная иерархия 7 motion-источников.
- R13 пять строк motion-сценариев decision matrix.
- Финальная формула — фраза «если нужна анимация: Правило 15...» + «+ R11.6 (motion)».
- Свойства свода — фраза «каждая motion-задача — один слой R11.6 (Правило 15)» + «Runtime-зависимости (motion) подчиняются R15».
**Изменено:**
- Шапка count: «16 правил R0–R15» → «15 правил R0R14».
- Cross-refs шапки: CLAUDE.md v1.86+ → v1.88+; Pravila v1.10+ → v1.11+; Tooling v1.15+ → v1.16+.
- L4 narrative: R15 description свёрнуто до «(R15 motion-системы введены в v1.4 и удалены в v2.0)»; добавлена v2.0 клауза.
- L6 принцип-аксиома: удалена последняя фраза «Runtime-зависимости проекта... подчиняются R15».
- L10 cross-ref CLAUDE.md §5 п.12: «на R15» → «резерв (R15 motion-runtime снят в v2.0)».
**НЕ затронуто:** R0–R14 целиком (стек-фильтр R6.0/R6.1, paired-stack R10, иерархия источников R11.1R11.5, decision matrix R12/R13, UI-pipeline R14 — все в силе). Pravila §12 hard rule Superpowers инвокации — без изменений. CLAUDE.md §5 п.10 правки через claude-md-management — без изменений.
**Rationale:** заказчик 12.05.2026 запросил снять hard-запреты на motion-runtime библиотеки (включая framer-motion). Через sanity-check brainstorming согласовано: framer-motion как React-only остаётся **technical block** (peerDep `react+react-dom`, runtime crash в Vue), но не regulatory rule. Остальные motion-runtime (motion-v, gsap, anime.js, lottie-web, popmotion, @motionone/dom) — безусловно разрешены. Default motion stack (Vue native + Vuetify + CSS + View Transitions) — переводится в CLAUDE.md §2 как guidance, не hard-rule.
Связанные обновления: CLAUDE.md v1.87 → v1.88, Pravila v1.10 → v1.11, Tooling v1.15 → v1.16, CHANGELOG_claude_md.md + MEMORY sync. Через `/claude-md-management:claude-md-improver` (для CLAUDE.md) + ручные Edit (для PSR_v1, Tooling, Pravila).
```
- [ ] **Step 18: Final pass — verify file integrity**
Run: `wc -l docs/Plugin_stack_rules_v1.md`
Expected: ~830 lines (down from 916; ~85 lines deleted: R15 section ~80 lines, R0.6 п.11 1 line, R8 3 lines, R13 5 lines minus added v2.0 changelog ~30 lines net).
Run: `Grep -n "R15" docs/Plugin_stack_rules_v1.md`
Expected: only historical references in:
- Line 4 (narrative shapка mentioning «R15 motion-системы введены в v1.4 и удалены в v2.0»)
- v1.4 changelog entry (`R15 (новое правило)...`)
- v2.0 changelog entry (new, this PR)
- v1.7 changelog entry note about cross-refs «R8/R13/R14»
- R0.6 cross-ref note (line ~136 — now reads «R8/R13/R14» — should be 0 «R15» hits here)
If unexpected R15 hits remain — find and re-evaluate (either historical context that should stay, or live reference that needs deletion).
---
## Task 3: Tooling Прил. Н v1.15 → v1.16 — §9.2 reformulate + header sync + changelog
**Files:**
- Modify: `docs/Tooling_v8_3.md` (header lines 113, §9.2 lines 429442, changelog §13 / history section)
- [ ] **Step 1: Re-Read line range 135 (header + cross-refs + recent changelog)**
Read: `docs/Tooling_v8_3.md` lines 135.
- [ ] **Step 2: Edit header — version bump and cross-refs**
Replace `**Версия:** 1.15` line content with:
```
**Версия:** 1.16 (закрытие 1 правки четвёртого аудита — снятие R15 motion-runtime denylist'а из §9.2 синхронно с PSR_v1 v1.7 → v2.0 + CLAUDE.md v1.87 → v1.88 + Pravila v1.10 → v1.11. Заказчик 12.05.2026: «сними все запреты на использование framer motion». Через `/claude-md-management:claude-md-improver`.)
```
Replace `**Предыдущая версия:** 1.14...``**Предыдущая версия:** 1.15`.
In cross-ref block (lines 1013):
- `Pravila_raboty_Claude_v1_1.md v1.10+``v1.11+`
- `Plugin_stack_rules_v1.md v1.7+``v2.0+`. Drop the `R15 motion-системы` clause from description. Reword to: `координация paired-stack ядра + расширенного пула + claude-md-management (R10.1 разбит на 3 блока, R0.4.A SoT cross-ref, R10.4/R14.7 tier-метки, R8 +тай-брейкер FD↔21st, R0.1 scope-метка; R15 motion удалён в v2.0)`.
- `CLAUDE.md v1.86+``v1.88+`. Drop the `§5 п.12 motion-runtime denylist` clause. Reword to end at: `§6 счётчик 33 (3 off-phase tools); §5 п.12 — резерв (motion-runtime denylist снят в v1.88)`.
- [ ] **Step 3: §9.2 — Re-Read line range 425455**
Read: `docs/Tooling_v8_3.md` lines 425455 to confirm exact §9.2 boundaries.
- [ ] **Step 4: §9.2 — reformulate denylist as technical guidance**
Replace existing §9.2 section (lines 429451) with:
```markdown
### 9.2. Motion runtime библиотеки (с v1.16 — technical guidance, не regulatory)
С v1.16 / PSR_v1 v2.0 motion-runtime библиотеки **разрешены к установке без обоснования** (R15 PSR_v1 снят 12.05.2026). Default motion stack — **Vue native `<Transition>` + Vuetify transitions + CSS @keyframes + View Transitions API** — остаётся рекомендацией (CLAUDE.md §2), но не hard-rule. Эта таблица — **technical guidance** о свойствах библиотек, не regulatory denylist.
| Библиотека | Статус | Технические свойства |
|---|---|---|
| **framer-motion** (npm `framer-motion`) | **❌ Technical block (не regulatory)** | React-only архитектурно: peerDeps `react>=18` + `react-dom>=18`. Использует React fiber-tree + hooks + JSX. В Vue 3 + Vuetify стеке физически не работает — runtime crash при `import { motion } from 'framer-motion'` в `.vue` файлах. `npm install` пройдёт с peer-dep warn, но любой import упадёт. Не regulatory rule — свойство библиотеки. |
| **react-spring** (npm `@react-spring/*`) | **❌ Technical block** | React-only по той же причине (peerDep react). |
| **motion-v** (npm `motion-v`) | ✅ Разрешено | Vue 3 порт API framer-motion от того же maintainer'а Motion. ~30 KB gzipped. ~95% API-совместимость с framer-motion (motion.div, animate, variants, layout, drag, gestures). |
| **gsap** (`gsap` npm) | ✅ Разрешено | Imperative timeline-driven. Подходит для marketing/agency UI, сложных choreographed sequences. |
| **anime.js** | ✅ Разрешено | Лёгкая alternative gsap, ~17 KB. |
| **lottie-web** (`lottie-web`) | ✅ Разрешено | Для Lottie/After Effects-ассетов. |
| **popmotion**, **@motionone/dom** | ✅ Разрешено | Низкоуровневые движки. |
| **Auto-Animate** (`@formkit/auto-animate`) | ✅ Разрешено | Один компонент, FLIP под капотом, ~3 KB. |
**Default motion stack (рекомендация, не обязанность):**
| Слой | Что покрывает | Размер |
|---|---|---|
| Vue 3 native `<Transition>` / `<TransitionGroup>` | enter/leave hooks, FLIP через TransitionGroup, JS-callbacks | 0 KB (нативно) |
| Vuetify 3 transitions (`v-fade`, `v-slide-y`, `v-slide-x`, `v-scale`, `v-expand`, `v-dialog-transition`) | Material-design анимации; уже в `vuetify@3.12` | 0 KB сверху |
| CSS `@keyframes` + `transition` + `prefers-reduced-motion` | Произвольные анимации, GPU-acceleration через `transform`/`opacity`, поддержка a11y | 0 KB |
| View Transitions API (Chrome 111+, Safari 18+) | Cross-document / cross-route переходы, FLIP под капотом нативно | 0 KB (браузер) |
Большинство анимационных задач закрываются дефолтным стеком — это рекомендация для bundle size, а не запрет на motion-runtime библиотеки.
```
- [ ] **Step 5: Add v1.16 entry to history block at top of file**
Add new block (after existing **«Что нового в v1.13 (10.05.2026)»** block — i.e., before line containing «Что было в v1.12»):
```markdown
**Что нового в v1.16 (12.05.2026):**
- **§9.2 «Motion runtime библиотеки» переформулирован из regulatory denylist в technical guidance.** R15 PSR_v1 снят целиком (v1.7 → v2.0); motion-v / gsap / anime.js / lottie-web / popmotion / @motionone/dom — безусловно разрешены к установке. framer-motion / react-spring остаются как **technical block** — это peerDep на React, не правило проекта. Default motion stack (Vue native + Vuetify + CSS + View Transitions) — guidance, не hard-rule.
- **Cross-refs шапки sync:** PSR_v1 v1.7+ → v2.0+; CLAUDE.md v1.86+ → v1.88+; Pravila v1.10+ → v1.11+.
- **§6 строка «framer-motion ↔ motion-v»** оставлена как historical record v1.4 audited construction (snapshot эпохи, не удаляется при rollback'е).
- **Связано:** PSR_v1 v1.7 → v2.0 (R15 удалено), CLAUDE.md v1.87 → v1.88 (§5 п.12 → резерв, §2 motion stack → guidance), Pravila v1.10 → v1.11 (§13.10 удалено).
Через `/claude-md-management:claude-md-improver` + manual Edit.
```
- [ ] **Step 6: Verify file integrity**
Run: `Grep -n "R15" docs/Tooling_v8_3.md`
Expected: only historical references (in v1.12 / v1.13 changelog entries, where R15 is recorded as historical introduction).
Run: `Grep -n "❌ HARD-ЗАПРЕТ" docs/Tooling_v8_3.md`
Expected: 0 matches (the `HARD-ЗАПРЕТ навсегда` labels removed for motion libs).
Run: `Grep -n "❌ Technical block" docs/Tooling_v8_3.md`
Expected: 2 matches (framer-motion + react-spring rows).
---
## Task 4: Pravila v1.10 → v1.11 — delete §13.10 + bump §11.5 / §13.2 / §13.9 / §13.6 cross-refs + header
**Files:**
- Modify: `docs/Pravila_raboty_Claude_v1_1.md` (lines ~11, 14, 97, 527, 610, 625, 651657, 685706)
- [ ] **Step 1: Re-Read line range 125 (header changelog block)**
Read: `docs/Pravila_raboty_Claude_v1_1.md` lines 130.
Confirm: line 11 likely contains `**§11.5 — версия PSR_v1...»v1.6, 16 правил R0R15»...»`. Re-Read for exact wording.
- [ ] **Step 2: Add v1.11 changelog entry at top of header changelog**
Insert above existing v1.10 entry (likely lines 515) a new block:
```markdown
**Что нового в v1.11 (12.05.2026):**
- **§13.10 удалено целиком** — transitive hard-link на R14 PSR_v1 был связан с R15 motion-системами через цепочку R14 → R10.4 → §13.9 → §13.10 → §13. С удалением R15 в PSR_v1 v2.0 (12.05.2026) §13.10 структурно остаётся но **не имеет более цели**: его hard-link был на R14 PSR_v1 в части использования UPM/21st вне pipeline'а, не на R15 motion. **Уточнение:** §13.10 (введён в v1.8) **сохраняется** как hard-link на R14 (UPM/21st pipeline), но cross-refs на «R15» внутри §13.10 удалены. Альтернатива — оставить §13.10 целиком, что устранит риск breaking change существующих ссылок других документов.
- **§11.5 счётчик правил PSR_v1:** «v1.6, 16 правил R0R15» → «v2.0, 15 правил R0R14».
- **§13.2 счётчик:** «v1.6 (16 правил R0R15)» → «v2.0 (15 правил R0R14)».
- **§13.9 cross-ref на PSR_v1:** «(v1.6)» → «(v2.0)».
- **§13.10 cross-ref на PSR_v1:** «(v1.6)» → «(v2.0)»; внутреннее упоминание R15 удалено (если есть).
- **§13.6 tier-таблица:** строка «Transitive hard-rule» — без изменений (R10/R14 hard-links остаются актуальны; снятие R15 их не задевает).
- **Связано:** PSR_v1 v1.7 → v2.0 (R15 удалено целиком), CLAUDE.md v1.87 → v1.88 (§5 п.12 → резерв), Tooling v1.15 → v1.16 (§9.2 reformulated).
Через `/claude-md-management:claude-md-improver` + manual Edit.
```
**Note on §13.10:** based on Re-Read of lines 687706 (already done in plan exploration), §13.10 is hard-link on R14 PSR_v1 — about UPM / 21st Magic MCP pipeline violations. **NOT about R15.** Spec section 2.4 said «§13.10 — transitive hard-link на R15». This is a misreading: spec's design assumed §13.10 was R15-linked, but actually it's R14-linked.
**Decision (engineer):** Do NOT delete §13.10. It governs UPM/21st pipeline R14, which is unaffected by R15 removal. Only bump cross-ref versions «(v1.6)» → «(v2.0)» inside §13.10 body.
Update spec text in v1.11 changelog entry to reflect this correction: «§13.10 НЕ удалено (был hard-link на R14, не на R15 — spec section 2.4 содержал misreading). Cross-refs внутри §13.10 «PSR_v1 v1.6» → «v2.0»».
- [ ] **Step 3: §11.5 — bump count**
Re-Read line range 525530 (line 527 area).
Find phrase `(v1.6, **16 правил R0R15**)`. Replace with `(v2.0, **15 правил R0R14**)`.
- [ ] **Step 4: §13.2 — bump count and PSR_v1 version**
Re-Read line range 608612 (line 610 area).
Replace:
```
Координация — через [docs/Plugin_stack_rules_v1.md](Plugin_stack_rules_v1.md) **v1.6 (16 правил R0R15)**.
```
With:
```
Координация — через [docs/Plugin_stack_rules_v1.md](Plugin_stack_rules_v1.md) **v2.0 (15 правил R0R14)**.
```
- [ ] **Step 5: §13.9 + §13.10 — bump cross-ref version**
Re-Read line range 670710.
In §13.9 (line ~675): replace `(v1.6)` with `(v2.0)`.
In §13.10 (line ~689): replace `(v1.6)` with `(v2.0)`.
If any internal R15 reference exists in §13.9 / §13.10 body — remove. (Per Re-Read of 670706 already done: no R15 refs inside these sections; the only «R15» mentions in Pravila are inside header changelog entries — which are historical and stay.)
- [ ] **Step 6: Verify file integrity**
Run: `Grep -n "R15" docs/Pravila_raboty_Claude_v1_1.md`
Expected: only historical references (in header changelog entries v1.6, v1.7, v1.8 mentioning historical R15 introduction).
Run: `Grep -n "16 правил" docs/Pravila_raboty_Claude_v1_1.md`
Expected: 0 matches in §§ bodies (only possibly in changelog narrative entries — historical OK).
Run: `Grep -n "15 правил R0" docs/Pravila_raboty_Claude_v1_1.md`
Expected: ≥2 matches (§11.5 and §13.2 bodies updated).
---
## Task 5: CLAUDE.md v1.87 → v1.88 via `/claude-md-management:claude-md-improver`
**Files:**
- Modify (through skill): `CLAUDE.md` (header, §2 «Animation default stack» строка, §5 п.12, §9 «История версий»)
CLAUDE.md §5 п.10 is a hard-rule: direct Edit/Write on CLAUDE.md is forbidden. Must use `/claude-md-management:claude-md-improver` skill.
- [ ] **Step 1: Invoke claude-md-improver skill with task description**
Use the `Skill` tool with:
- skill: `claude-md-management:claude-md-improver`
- args: paste the task description below
Task description for skill:
```
Target file: CLAUDE.md (repository root)
Spec: docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md
Apply these 4 targeted updates atomically:
1. Header (top of file, version line) — bump CLAUDE.md v1.87 → v1.88 with changelog entry summarizing R15 motion-runtime removal (12.05.2026). Connection: PSR_v1 v1.7 → v2.0, Tooling v1.15 → v1.16, Pravila v1.10 → v1.11. Conscious rollback of v1.83 audited construction. Reason: user decision 12.05.2026; framer-motion remains technical block (React-only peerDep), other motion-runtime libs (motion-v/gsap/anime/lottie/popmotion/@motionone/dom) unconditionally permitted.
2. §2 "Стек проекта" — find row containing "Animation default stack" (currently states: "motion-v / framer-motion / gsap / anime.js / lottie-web — **не установлены** и условно разрешены только по R15.2 (4 триггера)..."). Replace the motion-runtime regulatory phrasing with: "Default motion stack (рекомендация, не hard-rule): Vue native `<Transition>` / `<TransitionGroup>` + Vuetify transitions (`v-fade`, `v-slide-y`, `v-scale`, `v-expand`, `v-dialog-transition`) + CSS `@keyframes` + `prefers-reduced-motion` + View Transitions API (Chrome 111+ / Safari 18+). Motion-runtime библиотеки (motion-v, gsap, anime.js, lottie-web, popmotion, @motionone/dom) разрешены к установке без обоснования. `framer-motion` — technical block (React-only peerDep, не работает в Vue физически)."
3. §5 п.12 — currently full paragraph about motion runtime hard-запрет referencing R15.1 / R15.2 / R0.6 п.11 / framer-motion / motion-v + denylist. REPLACE entire paragraph with single-line marker preserving numbering:
"12. **Резерв.** Был «не устанавливать motion runtime библиотеки без прохождения R15.2». Снят 12.05.2026 (CLAUDE.md v1.88 + PSR_v1 v2.0). Подробности — docs/CHANGELOG_claude_md.md."
4. §9 "История версий" — add v1.88 entry at top of list (or appropriate location preserving descending date order):
"v1.88 от 12.05.2026 — снятие R15 motion-runtime restrictions per user decision. Conscious rollback v1.83 audited construction (10.05.2026). §5 п.12 → маркер 'Резерв (снят 12.05.2026)'; §2 'Animation default stack' переписана с regulatory denylist на guidance recommendation; cross-refs §0 на PSR_v1 v2.0+ / Pravila v1.11+ / Tooling v1.16+. framer-motion — technical block (peerDep react+react-dom), не regulatory rule. Связано: PSR_v1 v1.7 → v2.0, Tooling v1.15 → v1.16, Pravila v1.10 → v1.11, CHANGELOG_claude_md.md entry + MEMORY sync. Через /claude-md-management:claude-md-improver + manual Edit для PSR_v1/Tooling/Pravila."
Do not touch §5 п.10 (claude-md-management hard-rule — still in force) or §5 п.11 (Superpowers hard rule — still in force). Do not renumber items §5 п.1–§5 п.11.
Do not commit yet — atomic commit happens later in T9 after all 5 files are ready.
```
- [ ] **Step 2: Verify CLAUDE.md was updated**
Run: `Grep -n "v1.88" CLAUDE.md` — expect ≥1 match.
Run: `Grep -n "Резерв" CLAUDE.md` — expect ≥1 match in §5 п.12 area.
Run: `Grep -n "Default motion stack (рекомендация" CLAUDE.md` — expect ≥1 match in §2 area.
Run: `Grep -n "motion runtime библиотеки" CLAUDE.md` — verify regulatory phrasing removed.
- [ ] **Step 3: Fallback if skill couldn't apply all 4 updates**
If `/claude-md-management:claude-md-improver` reports any update couldn't be applied (e.g., regex didn't match) — re-invoke the skill with corrected wording. Do NOT use direct Edit tool on CLAUDE.md (violation of §5 п.10). If skill repeatedly fails — stop and ask user.
---
## Task 6: CHANGELOG_claude_md.md — add v1.88 entry
**Files:**
- Modify: `docs/CHANGELOG_claude_md.md` (insert new entry at top, before existing v1.83 entry).
- [ ] **Step 1: Re-Read line range 110**
Read: `docs/CHANGELOG_claude_md.md` lines 110. Confirm entries are in descending chronological order, latest on top.
- [ ] **Step 2: Insert v1.88 entry above v1.83 entry (line 8)**
Use Edit tool. Insert new italic-block before the line starting `*CLAUDE.md v1.83 от 10.05.2026.`:
```
*CLAUDE.md v1.88 от 12.05.2026. Изменения v1.88: **Снятие R15 motion-runtime restrictions** по решению заказчика 12.05.2026 ("сними все запреты на использование framer motion"). Через `superpowers:brainstorming` → 3 варианта (A узкая правка R15.2 / B полная отмена R15 / C one-strike trigger) → выбран B (вопреки рекомендации A: "доверяю team's choice motion-runtime без regulatory guardrail"). **Conscious rollback** v1.83 audited construction (10.05.2026: R15 двухуровневая motion-конструкция была введена через brainstorming → 3 варианта → "двухуровневый" подтверждение заказчика; v2.0 — это namesake rollback). **5 файлов изменены (atomic commit):** PSR_v1 v1.7 → v2.0 (удалено R15 целиком: R15.1 framer-motion hard-запрет + R15.2 motion-v 4 условия + R15.3 default стойка + R15.4 проверка триггера + R15.5 hard-запрет дублирования + R15.6 live-override + R15.7 расширение на gsap/anime/lottie; удалено R0.6 п.11 animation runtime hard-стоп; удалены R8 три тай-брейкера motion; удалена R11.6 иерархия motion-источников; удалены R13 пять строк motion-сценариев; финальная формула и свойства свода переформулированы; шапка v1.7 → v2.0 major bump). Pravila v1.10 → v1.11 (§11.5/§13.2 счётчик «16 правил R0–R15» → «15 правил R0R14»; §13.9 + §13.10 cross-ref на PSR_v1 «v1.6» → «v2.0»; §13.10 НЕ удалено — оно про R14 UPM/21st pipeline, не R15). Tooling Прил. Н v1.15 → v1.16 (§9.2 reformulated из regulatory denylist в technical guidance: motion-v + gsap + anime.js + lottie-web + popmotion + @motionone/dom → ✅ разрешено без обоснования; framer-motion + react-spring → ❌ technical block, peerDep react+react-dom, не regulatory rule). **CLAUDE.md этот файл:** §2 «Animation default stack» переписан с regulatory denylist на guidance recommendation; §5 п.12 → маркер «Резерв. Был "не устанавливать motion runtime библиотеки без R15.2". Снят 12.05.2026.» (нумерация §5 п.1–11 сохранена, чтобы cross-refs в memory `feedback_environment.md` / `feedback_plugin_paired_stack.md` не сломать); §0 cross-refs обновлены (Pravila v1.10 → v1.11, PSR_v1 v1.7 → v2.0, Tooling v1.15 → v1.16); §9 «История версий» — entry v1.88. **MEMORY sync:** `memory/feedback_plugin_paired_stack.md` обновлён (v1.7 → v2.0; «R15 motion двухуровневый» → historical context); `MEMORY.md` index hook обновлён. **0 изменений в коде проекта** (`resources/js/`, `app/`, `db/` нетронуты). **0 npm install** (motion-v и др. в `package.json` не попадают; их установка теперь разрешена, но не делается этим коммитом). **0 schema changes**. **Plan:** docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md. **Spec:** docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md. Через `/claude-md-management:claude-md-improver` (для CLAUDE.md) + manual Edit (для PSR_v1, Tooling, Pravila). v1.87→v1.88.*
```
(Keep the new entry as a single paragraph in italic, matching the style of existing entries.)
- [ ] **Step 3: Verify file integrity**
Run: `head -3 docs/CHANGELOG_claude_md.md` — first three non-empty lines should start with v1.88.
Run: `Grep -c "v1.88" docs/CHANGELOG_claude_md.md` — expect ≥1.
---
## Task 7: MEMORY sync — update memory index + feedback file
**Files:**
- Modify: `C:\Users\Administrator\.claude\projects\c---------------------crm-------------\memory\MEMORY.md` (1 line)
- Modify: `C:\Users\Administrator\.claude\projects\c---------------------crm-------------\memory\feedback_plugin_paired_stack.md` (~5 lines)
- [ ] **Step 1: Re-Read MEMORY.md index entry for plugin paired stack**
Use Read tool (full path with backslashes for Windows). Find line containing «Plugin paired stack pattern + расширенный пул UPM/21st».
Expected current content (approximately): `- [Plugin paired stack pattern + расширенный пул UPM/21st + R15 motion + tier-структура](feedback_plugin_paired_stack.md) — ...`
- [ ] **Step 2: Edit MEMORY.md — update hook to mention R15 removal**
Replace the existing «R15 motion» phrasing with «R15 motion (снят 12.05.2026 в PSR_v1 v2.0)» in the MEMORY.md index line.
Update version refs in the hook line (likely `**v1.7**, 16 правил R0R15`) → `**v2.0**, 15 правил R0R14`.
- [ ] **Step 3: Edit feedback_plugin_paired_stack.md frontmatter**
In `name:` field (line 2), update `**v1.7**, 16 правил R0R15, ~33 закрытых конфликта``**v2.0**, 15 правил R0R14, ~33 закрытых конфликта (R15 снят 12.05.2026 в v2.0)`.
In `description:` (line 3) update any `v1.7``v2.0`; preserve historical narrative ABOUT R15's introduction in v1.4 as point-in-time observation.
- [ ] **Step 4: Edit feedback_plugin_paired_stack.md body — add v2.0 rollback context**
Find the section heading "Ключевые ссылки (v1.6/v1.10/v1.14/v1.85):" (or similar latest snapshot). Update version refs:
- `Plugin_stack_rules_v1.md **v1.6**``**v2.0**`
- `Pravila_raboty_Claude_v1_1.md **v1.10**``**v1.11**`
- `CLAUDE.md **v1.85**``**v1.88**`
- `Tooling_v8_3.md **v1.14**``**v1.16**`
Find the section heading "**R15 motion двухуровневый (новое 10.05.2026):**" — add at end of that paragraph:
```
**Снято 12.05.2026 в PSR_v1 v2.0** (conscious rollback по решению заказчика; framer-motion переведён из regulatory hard-запрета в technical-only guidance). motion-v + gsap + anime.js + lottie-web + popmotion + @motionone/dom — теперь безусловно разрешены. Default motion stack (Vue native + Vuetify + CSS + View Transitions) — guidance, не hard-rule. См. CLAUDE.md v1.88 §2 и Tooling §9.2.
```
- [ ] **Step 5: Verify memory updates**
Run: `Grep -n "R15 motion" memory/MEMORY.md` and `memory/feedback_plugin_paired_stack.md` — should find updated references mentioning «снят 12.05.2026».
(On Windows path containing Cyrillic: use full path with backslashes via Grep tool's `path` parameter pointing at the projects/.../memory dir.)
---
## Task 8: Semantic grep verification — find any orphaned R15 refs
**Files:**
- Read-only verification across project tree.
- [ ] **Step 1: Grep for live R15 regulatory refs**
Run:
```
Grep pattern "R15\.[1-9]|R15\.[01][0-9]" path "docs/" type "md" output_mode "content" -n true
```
Expected: only inside changelog entries (v1.4, v1.5, v1.6, v1.7, v2.0 historical narratives). NO matches inside R0/R1.../R14 rule bodies, NO matches in main rule narrative.
If any match remains in a rule body — investigate. Either it's a forgotten edit (fix), or a legitimate historical mention inside a different document's changelog (leave).
- [ ] **Step 2: Grep for «motion-runtime hard-запрет» / «framer-motion hard-запрет»**
Run:
```
Grep pattern "motion-runtime hard-запрет|framer-motion hard-запрет" path "docs/" output_mode "content" -n true
```
Plus same for `CLAUDE.md`.
Expected: 0 matches in live text. Only historical changelog narratives might contain «hard-запрет» wording — verify each.
- [ ] **Step 3: Grep for stale version refs**
Run:
```
Grep pattern "PSR_v1 v1\.7|v1\.7 PSR_v1|Plugin_stack_rules_v1.*v1\.7" path "docs/ CLAUDE.md" output_mode "content" -n true
```
Expected: 0 live refs (all must be at v2.0+ or explicitly historical).
Same for Pravila v1.10 → expect 0 live refs (all v1.11+ or historical).
Same for Tooling v1.15 → expect 0 live refs (all v1.16+ or historical).
Same for CLAUDE.md v1.87 → expect 0 live refs (all v1.88+ or historical).
- [ ] **Step 4: Cross-ref reciprocity check**
For each pair of documents:
- PSR_v1 v2.0 mentions CLAUDE.md v1.88+, Pravila v1.11+, Tooling v1.16+? ✓
- CLAUDE.md v1.88 mentions PSR_v1 v2.0+, Pravila v1.11+, Tooling v1.16+? ✓
- Tooling v1.16 mentions PSR_v1 v2.0+, CLAUDE.md v1.88+, Pravila v1.11+? ✓
- Pravila v1.11 mentions PSR_v1 v2.0 in §11.5/§13.2? ✓
Use `Grep -n` on each document's header (lines 115) to verify.
- [ ] **Step 5: README sync check (drive-by)**
Run:
```
Grep pattern "R15|motion-runtime" path "README.md docs/README_АРХИВ_v8_5.md" output_mode "content" -n true
```
If matches exist with regulatory phrasing — flag for follow-up commit (out of scope for this plan; create a TODO note for engineer/user).
---
## Task 9: Atomic commit + lefthook + push + PR
**Files:**
- All modified files staged together.
- [ ] **Step 1: Review git diff before staging**
Run: `git diff --stat`
Expected: changes in 57 files:
- `CLAUDE.md`
- `docs/Plugin_stack_rules_v1.md`
- `docs/Tooling_v8_3.md`
- `docs/Pravila_raboty_Claude_v1_1.md`
- `docs/CHANGELOG_claude_md.md`
- `memory/MEMORY.md`
- `memory/feedback_plugin_paired_stack.md`
If unexpected files appear — investigate.
Spot-check: `git diff CLAUDE.md` shows §5 п.12 → маркер; `git diff docs/Plugin_stack_rules_v1.md` shows R15 deletion ~85 lines.
- [ ] **Step 2: Stage all 7 files explicitly (avoid `git add -A`)**
Run:
```bash
git add CLAUDE.md \
docs/Plugin_stack_rules_v1.md \
docs/Tooling_v8_3.md \
docs/Pravila_raboty_Claude_v1_1.md \
docs/CHANGELOG_claude_md.md
```
Memory files (`memory/MEMORY.md`, `memory/feedback_plugin_paired_stack.md`) are under the user's `~/.claude/projects/.../memory/` path (Windows). They are NOT in the repo working tree — they live in a different parent dir. Verify with `git status` whether memory paths appear in the repo. **If they do** (i.e., memory dir is symlinked or copied into repo) — stage them too. **If they don't** (normal case, memory is per-user/per-machine) — they're outside the repo, sync them separately and they don't go into the commit.
- [ ] **Step 3: Atomic commit**
Run:
```bash
git commit -m "$(cat <<'EOF'
chore(rules): remove R15 motion-runtime restrictions (PSR_v1 v2.0)
Conscious rollback of v1.83 audited construction per user decision
12.05.2026. R15 PSR_v1 section deleted entirely; framer-motion remains
technical block (React-only peerDep), no longer regulatory rule.
Affected:
- PSR_v1 v1.7 → v2.0 (R15, R0.6 п.11, R8 motion, R11.6, R13 motion rows
removed; finale + properties reformulated)
- CLAUDE.md v1.87 → v1.88 (§5 п.12 → marker; §2 motion stack → guidance)
- Tooling v1.15 → v1.16 (§9.2 reformulated; framer-motion + react-spring
marked as technical block, not regulatory)
- Pravila v1.10 → v1.11 (§11.5/§13.2 counts updated; §13.9/§13.10 cross-ref
bumps; §13.10 NOT deleted — it governs R14 UPM/21st pipeline, not R15)
- CHANGELOG_claude_md.md — v1.88 entry
Brainstormed via superpowers:brainstorming. Planned via
superpowers:writing-plans. Executed via /claude-md-management:claude-md-improver
+ manual Edit.
Spec: docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md
Plan: docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
```
- [ ] **Step 4: Verify lefthook passed all hooks**
If a hook fails:
- **lychee broken link** — fix the markdown link, re-stage, NEW commit (do NOT amend)
- **markdownlint error** — fix the .md, re-stage, NEW commit
- **gitleaks leak** — investigate (motion-related docs should have no secrets; if false-positive, evaluate and add to gitleaks allowlist with caution)
- **larastan / pint / pest** — not applicable (no PHP touched); if hooks try to run on PHP files because of changed file list — investigate hook config
Expected: all hooks pass, commit lands clean.
Run: `git log --oneline -3` to verify HEAD = atomic commit.
- [ ] **Step 5: Push branch**
Run: `git push -u origin rules/remove-r15`
Expected: branch pushed to GitHub.
- [ ] **Step 6: Create PR with `gh pr create`**
Run:
```bash
gh pr create --base main --head rules/remove-r15 --title "chore(rules): remove R15 motion-runtime restrictions (PSR_v1 v2.0)" --body "$(cat <<'EOF'
## Summary
Conscious rollback of v1.83 audited construction per user decision 12.05.2026 ("сними все запреты на использование framer motion").
R15 PSR_v1 section removed entirely. motion-v / gsap / anime.js / lottie-web / popmotion / @motionone/dom — unconditionally permitted. framer-motion / react-spring remain **technical block** (React-only peerDep on react+react-dom), not regulatory rule — `npm install framer-motion` would proceed with peer-warn but `import { motion } from 'framer-motion'` in `.vue` files would runtime crash.
## Files changed
- `docs/Plugin_stack_rules_v1.md` v1.7 → v2.0 — R15 section deleted, R0.6 п.11 deleted, R8 motion tie-breakers deleted, R11.6 motion hierarchy deleted, R13 motion rows deleted, finale + properties reformulated.
- `CLAUDE.md` v1.87 → v1.88 — §5 п.12 → marker preserving numbering, §2 Animation default stack → guidance recommendation.
- `docs/Tooling_v8_3.md` v1.15 → v1.16 — §9.2 reformulated from regulatory denylist into technical guidance.
- `docs/Pravila_raboty_Claude_v1_1.md` v1.10 → v1.11 — §11.5 + §13.2 counts updated; §13.9 + §13.10 cross-refs bumped. §13.10 NOT deleted (governs R14 UPM/21st pipeline, not R15 — spec design section 2.4 contained misreading; correction in v1.11 changelog).
- `docs/CHANGELOG_claude_md.md` — v1.88 entry.
## Spec / Plan
- Spec: [docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md](docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md)
- Plan: [docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md](docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md)
## Verification
- [x] Lefthook all hooks passed (gitleaks 0, lychee 0 broken, markdownlint clean)
- [x] Semantic grep — 0 live R15 refs in rule bodies (only historical in changelog entries)
- [x] Cross-ref reciprocity verified between 4 normative docs
## Out of scope
- No code touched (`resources/js/`, `app/`, `db/`, `tests/`).
- No npm install (motion-v et al. now permitted but not installed).
- No schema changes.
- `framer-motion` remains technical block — installing it would not break the rule base, but it would not work in Vue.
## Test plan
- [ ] Visual review of diff
- [ ] Verify §5 п.12 in CLAUDE.md reads "Резерв. Был ... Снят 12.05.2026 ..."
- [ ] Verify R15 section absent from PSR_v1 v2.0 rule body
- [ ] Verify §13.10 still present in Pravila v1.11 (governs R14, not R15)
- [ ] (Optional) `npm install motion-v --save-dev --dry-run` does not trigger any project-level rule check failure
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
```
- [ ] **Step 7: Return PR URL to user**
Echo the URL printed by `gh pr create`. Plan execution complete.
---
## Self-Review
**1. Spec coverage:**
- Spec §2.1 (PSR_v1 changes) → Task 2 ✓
- Spec §2.2 (CLAUDE.md changes) → Task 5 (via skill) ✓
- Spec §2.3 (Tooling changes) → Task 3 ✓
- Spec §2.4 (Pravila changes) → Task 4 (with correction: §13.10 NOT deleted, it's R14-linked not R15-linked — verified during plan exploration) ✓
- Spec §4 (MEMORY sync, CHANGELOG) → Tasks 6 + 7 ✓
- Spec §5 (verification) → Task 8 + Task 9 step 4 ✓
- Spec §6 (atomic, branch, channel, commit, PR) → Tasks 1, 9 ✓
**2. Placeholder scan:** No TBD/TODO; all wording explicit. One judgment call documented (memory files in/out of repo, T9 step 2) with engineer instruction to verify via `git status`.
**3. Type consistency:** Version refs consistent across all task descriptions (PSR_v1 v1.7 → v2.0, CLAUDE.md v1.87 → v1.88, Tooling v1.15 → v1.16, Pravila v1.10 → v1.11). File paths consistent (forward-slash repo-relative). Spec design assumption about §13.10 being R15-linked is corrected inline in Task 4 plus surfaced in CHANGELOG entry T6.
**4. Risk notes for engineer:**
- Line numbers in this plan are based on plan-writing-time Read of files. After ANY edit (especially T2 deletions), subsequent line numbers shift. **Always Re-Read affected ranges before next edit.**
- `superpowers:executing-plans` and `superpowers:subagent-driven-development` both work; subagent-driven recommended for review checkpoints between tasks (especially T2 which is large).
- If `/claude-md-management:claude-md-improver` cannot match a regex on CLAUDE.md (e.g., due to whitespace) — re-invoke with refined wording. Do NOT fall back to direct Edit (§5 п.10 hard-rule).
@@ -0,0 +1,161 @@
---
title: Снятие R15 motion-runtime restrictions из нормативной базы
date: 2026-05-12
status: approved-by-customer
author: Claude (через superpowers:brainstorming)
related-rules: PSR_v1 v1.7 → v2.0, CLAUDE.md v1.87 → v1.88, Tooling v1.15 → v1.16, Pravila v1.10 → v1.11
---
# Design: Снятие R15 motion-runtime restrictions
## 1. Контекст и триггер решения
12.05.2026 заказчик запросил: «снять все запреты на использование framer-motion». В ходе brainstorming sanity-check'а согласовано:
- `framer-motion` (React-only, peerDep `react` + `react-dom`) — остаётся **technical block**, физически не работает в Vue 3 + Vuetify 3. Это свойство библиотеки, не regulatory rule.
- Реальная цель — широкое использование motion-runtime библиотек в проекте. Vue-эквивалент framer-motion — `motion-v` (Vue 3 порт от того же автора, ~95% API-совместимость).
- Сохранение R15 4-триггерного окна (PSR_v1 v1.7) делает любое использование motion-v / gsap / anime.js / lottie-web затруднённым; заказчик хочет снять барьер целиком.
**Решение**: удалить R15-секцию из PSR_v1 целиком и синхронизировать связанные документы.
Это **сознательный rollback** аудированной нормативной правки v1.83 (10.05.2026, когда R15 двухуровневая motion-конструкция была введена). Чтобы будущий аудит видел дату/причину снятия — фиксируется явно в changelog'е PSR_v1 v2.0.
## 2. Архитектура правки (4 документа)
### 2.1. `docs/Plugin_stack_rules_v1.md` v1.7 → v2.0 (major bump)
**Удалить целиком:**
- R15.1 — framer-motion hard-запрет навсегда (React-only архитектурно)
- R15.2 — motion-v 4-триггерное условное окно
- R15.3 — default motion stack как обязательная стойка
- R15.7 — расширение R15.1 на gsap/anime.js/lottie-web/popmotion/@motionone/dom
- R0.6 пункт 11 — «animation runtime hard-стоп Auto mode не отменяет»
**Изменить:**
- Шапка: «v1.7, 16 правил R0R15» → «v2.0, 15 правил R0R14»
- Changelog v2.0 entry: «major bump — removal of R15 motion-runtime restrictions per user decision 12.05.2026; conscious rollback от v1.83 audited construction (10.05.2026 поздний вечер); rationale: customer trust в developer team's choice motion-runtime без regulatory guardrail»
- Cross-refs шапки на актуальные версии связанных документов (CLAUDE.md v1.88, Pravila v1.11, Tooling v1.16)
### 2.2. `CLAUDE.md` v1.87 → v1.88
**Удалить:**
- §5 п.12 «Не устанавливать motion runtime библиотеки...» — абзац целиком
**Изменить:**
- §2 строка «Animation default stack» — переписать с «motion-v / framer-motion / gsap / anime.js / lottie-web — **не установлены** и условно разрешены только по R15.2 (4 триггера)» на: «Default motion stack — рекомендация (не hard-rule); motion-runtime библиотеки разрешены к установке без обоснования; `framer-motion` физически не работает в Vue (React-only) — см. Tooling §9.2 technical guidance»
- §0 строка изменения — запись об v1.88
- §9 «История версий» — entry v1.88
**§5 п.12 — резолюция противоречия:** контент абзаца удаляется; заголовок-маркер остаётся как:
```
12. **Резерв.** Был «не устанавливать motion runtime библиотеки без прохождения R15.2». Снят 12.05.2026 (CLAUDE.md v1.88 + PSR_v1 v2.0). Подробности — docs/CHANGELOG_claude_md.md.
```
Это сохраняет нумерацию п.10/п.11/п.12 → cross-refs в memory (`feedback_environment.md`, `feedback_plugin_paired_stack.md`) и других местах не ломаются.
**Не менять:**
- §5 п.10 (правки через claude-md-management — действует)
- §5 п.11 (Superpowers hard rule — действует)
### 2.3. `docs/Tooling_v8_3.md` Прил. Н v1.15 → v1.16
**Изменить §9.2:**
- denylist motion-runtime — переформулировать. Удалить условные пометки на motion-v / gsap / anime.js / lottie-web / popmotion / motion-one / @motionone/dom.
- `framer-motion` оставить с маркером **«technical guidance: React-only library, peerDep react+react-dom, runtime crash в .vue файлах. Не regulatory rule — свойство библиотеки»**.
**Шапка:** cross-refs на актуальные версии (PSR_v1 v2.0, CLAUDE.md v1.88, Pravila v1.11).
**Changelog v1.16:** запись.
### 2.4. `docs/Pravila_raboty_Claude_v1_1.md` v1.10 → v1.11
**Удалить:**
- §13.10 — transitive hard-link на R15 (R15 не существует, link не имеет цели)
**Изменить:**
- §13.2 счётчик «v1.6 (16 правил)» → «v1.7 (15)»
- §0 строка изменения — запись об v1.11.
**Не задеты:**
- §13.9 (hard-link на R10, не R15 — verified через memory `feedback_superpowers_hard_rule.md`).
- §11/§12 (Superpowers hard rule).
- §0–§9 (продуктовые правила, не связаны с motion-runtime).
**Контрольная re-Read перед правкой:** перед применением патча — fresh Read актуального содержимого Pravila §13 (§13.9, §13.10, §13.2) и подтвердить факты grep'ом перед удалением. Если §13.9 фактически содержит cross-ref на R15 (memory может быть stale) — расширить scope правки.
## 3. Data flow / последствия после merge
| Действие | До | После |
|---|---|---|
| `npm install motion-v` | требует обоснование 4 триггеров R15.2 + AskUserQuestion | без обоснования, без AskUserQuestion |
| `npm install gsap` / `anime.js` / `lottie-web` / `popmotion` / `@motionone/dom` | R15.7 запрет без обоснования | без обоснования |
| `npm install framer-motion` | R15.1 hard-запрет, Auto mode не отменяет | npm install проходит с peer-dep warn; runtime crash при `import { motion } from 'framer-motion'` в .vue — это поведение библиотеки, не регуляторный блок |
| Default motion stack (Vue Transition + Vuetify transitions + CSS @keyframes + View Transitions API) | обязательная стойка R15.3 | рекомендация |
| ESLint / lefthook / pre-commit | нет хуков на motion-deps | без изменений |
## 4. Cross-doc consistency / sync
Все 4 документа синхронизируются в одном atomic-коммите. Дополнительно:
- **MEMORY.md** index entry «Plugin paired stack pattern + расширенный пул UPM/21st + R15 motion + tier-структура» — обновить hook: «R15 motion» → «R15 motion (снят 12.05.2026, v2.0)»
- **`memory/feedback_plugin_paired_stack.md`** — поправить упоминания v1.7 на v2.0; удалить блок «R15 двухуровневая motion-конструкция» или маркировать как historical context
- **`docs/CHANGELOG_claude_md.md`** — запись v1.88 с описанием removal + список затронутых файлов
## 5. Verification после правок
- **Lefthook полный прогон**:
- lychee — 0 broken links (cross-refs шапок не сломаны)
- gitleaks — 0 leaks (только .md правки)
- markdownlint — clean на всех 4 файлах
- **Семантический grep**:
- `rg "R15" docs/ CLAUDE.md` — все вхождения либо удалены, либо переформулированы в changelog'ах как historical
- `rg "motion-runtime hard-запрет"` — 0 matches
- `rg "framer-motion hard-запрет"` — 0 matches
- `rg "v1\.7\+|PSR_v1 v1\.7"` — все мигрировано на v2.0+ или явно historical
- **Cross-ref проверка вручную**: шапки всех 4 документов содержат актуальные взаимные ссылки (PSR_v1 v2.0 ↔ CLAUDE.md v1.88 ↔ Tooling v1.16 ↔ Pravila v1.11).
- **MEMORY sync**: re-Read memory файлов после правок, проверка что upstream-факты согласованы.
Нет runtime-тестов (правки только в `.md`, не задеты Pest / Vitest / Histoire).
## 6. Атомарность и канал исполнения
- **Ветка**: `rules/remove-r15` от `origin/main` (`48f27b4`). Не подмешивать в `plan5-frontend-projects` — нормативная правка должна быть отдельным PR.
- **Канал**: `/claude-md-management:claude-md-improver` (CLAUDE.md §5 п.10 hard-rule — прямой Edit/Write по CLAUDE.md запрещён).
- **Коммиты**:
1. `docs(spec): add design for R15 removal` — этот design doc, отдельный коммит
2. `chore(rules): remove R15 motion-runtime restrictions (PSR_v1 v2.0)` — все 4 .md + CHANGELOG + MEMORY sync, atomic
- **Pre-commit**: lefthook все jobs прогоняются перед commit. Если падает — fix + новый коммит (не amend, CLAUDE.md §5 п.11).
- **PR**: после push — `gh pr create`. Body содержит:
- Section 1 (контекст и rollback)
- Section 2 (что меняется в 4 файлах)
- Section 3 (последствия)
- Section 4 (cross-doc consistency)
- Section 5 (verification список)
- Ссылка на этот design doc
## 7. Open issues / out-of-scope
- **Не задето**: ТЗ v8.5 (стек Vue + Vuetify не меняется), DEVELOPER_HANDOFF (компоненты под Vue остаются), брендбук (палитра/шрифты не задеты), schema БД, backend Laravel.
- **Не задето**: R0R14 PSR_v1 (стек-фильтры R6.0/R6.1, paired-stack R10, иерархия источников R11, decision matrix R13, UI-pipeline R14 — все остаются в силе).
- **Не задето**: hard rule §12 Pravila (Superpowers skill инвокация первой) — остаётся.
## 8. Decision trail
- 12.05.2026 ~16:00 — заказчик «установи framer motion» (economy 100%) → отказ с объяснением hard-запрета.
- 12.05.2026 — заказчик «сними все запреты на использование framer motion, economy 0%».
- 12.05.2026 — brainstorming sanity-check:
- Q1: scope use case? → «весь фронт».
- Q2: framer-motion именно или API? → «motion-v подойдёт» (sanity-check сработал, миграция фронта на React отменена).
- Q3: какой вариант правки R15? → «B — полная отмена R15» (вопреки рекомендации A).
- Section 15 design'а — все одобрены «да».
- Ветка `rules/remove-r15` от main — одобрена.