diff --git a/docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md b/docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md new file mode 100644 index 00000000..45a578cc --- /dev/null +++ b/docs/superpowers/plans/2026-05-12-remove-r15-motion-restrictions.md @@ -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) +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 1–55 (header + R0.1)** + +Read: `docs/Plugin_stack_rules_v1.md` lines 1–55. +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.0–v1.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 1–10 remain intact. + +- [ ] **Step 10: Delete R8 motion tie-breaker rows (lines 353-355)** + +Re-Read line range 340–360 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 ``) → 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 340–360 to confirm exact line numbers before deletion.) + +- [ ] **Step 11: Delete R11.6 (lines ~523–547) — Иерархия motion-источников** + +Re-Read line range 515–555 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 ~609–613)** + +Re-Read line range 600–620 to confirm. Delete five rows: + +``` +| **[v1.4]** Анимация на экране, простая (fade/slide/scale/expand) | высокая | **действую**, использую Vuetify transition или Vue `` (R11.6 уровни 3–4) | +| **[v1.4]** Анимация средней сложности (custom keyframes, hover-state с timing) | высокая | **действую**, использую CSS `@keyframes` (R11.6 уровень 5) | +| **[v1.4]** Cross-route transition (hero-transition при переходе между экранами) | средняя | **фиксирую предположение**: «использую View Transitions API с fallback на Vue `` для не-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 ~743–820)** + +Re-Read line range 740–822 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 822–826. + +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 ~830–831) — strip R15/motion refs** + +Re-Read line range 828–832. + +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 843–848. 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 850–855. + +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 правил R0–R14». + - 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.1–R11.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 1–13, §9.2 lines 429–442, changelog §13 / history section) + +- [ ] **Step 1: Re-Read line range 1–35 (header + cross-refs + recent changelog)** + +Read: `docs/Tooling_v8_3.md` lines 1–35. + +- [ ] **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 10–13): + +- `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 425–455** + +Read: `docs/Tooling_v8_3.md` lines 425–455 to confirm exact §9.2 boundaries. + +- [ ] **Step 4: §9.2 — reformulate denylist as technical guidance** + +Replace existing §9.2 section (lines 429–451) 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 `` + 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 `` / `` | 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, 651–657, 685–706) + +- [ ] **Step 1: Re-Read line range 1–25 (header changelog block)** + +Read: `docs/Pravila_raboty_Claude_v1_1.md` lines 1–30. +Confirm: line 11 likely contains `**§11.5 — версия PSR_v1...»v1.6, 16 правил R0–R15»...»`. 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 5–15) 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 правил R0–R15» → «v2.0, 15 правил R0–R14». +- **§13.2 счётчик:** «v1.6 (16 правил R0–R15)» → «v2.0 (15 правил R0–R14)». +- **§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 687–706 (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 525–530 (line 527 area). + +Find phrase `(v1.6, **16 правил R0–R15**)`. Replace with `(v2.0, **15 правил R0–R14**)`. + +- [ ] **Step 4: §13.2 — bump count and PSR_v1 version** + +Re-Read line range 608–612 (line 610 area). + +Replace: + +``` +Координация — через [docs/Plugin_stack_rules_v1.md](Plugin_stack_rules_v1.md) **v1.6 (16 правил R0–R15)**. +``` + +With: + +``` +Координация — через [docs/Plugin_stack_rules_v1.md](Plugin_stack_rules_v1.md) **v2.0 (15 правил R0–R14)**. +``` + +- [ ] **Step 5: §13.9 + §13.10 — bump cross-ref version** + +Re-Read line range 670–710. + +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 670–706 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 `` / `` + 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 1–10** + +Read: `docs/CHANGELOG_claude_md.md` lines 1–10. 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 правил R0–R14»; §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 правил R0–R15`) → `**v2.0**, 15 правил R0–R14`. + +- [ ] **Step 3: Edit feedback_plugin_paired_stack.md frontmatter** + +In `name:` field (line 2), update `**v1.7**, 16 правил R0–R15, ~33 закрытых конфликта` → `**v2.0**, 15 правил R0–R14, ~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 1–15) 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 5–7 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) +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). diff --git a/docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md b/docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md new file mode 100644 index 00000000..5b88e155 --- /dev/null +++ b/docs/superpowers/specs/2026-05-12-remove-r15-motion-restrictions-design.md @@ -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 правил 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 — одобрена.