---
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 правил R0–R15» → «v2.0, 15 правил R0–R14»
- 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.
- **Не задето**: R0–R14 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 1–5 design'а — все одобрены «да».
  - Ветка `rules/remove-r15` от main — одобрена.
