Skip to content
This repository was archived by the owner on Sep 11, 2026. It is now read-only.

feat(storybook): хвиля 1.1+1.2 — CI Playwright-кеш + фікси канону за пілотом на components - #177

Merged
vitaliytv merged 7 commits into
mainfrom
claude/adr-implementation-plan-44411e
Jul 21, 2026
Merged

vitaliytv merged 7 commits into
mainfrom
claude/adr-implementation-plan-44411e

Conversation

@vitaliytv

Copy link
Copy Markdown
Member

Що змінено

Продовження #176 — CI-частина Кластера 5 і перша ітерація зворотного зв'язку з реального пілота.

CI-concern storybook/ci (Playwright-кеш)

  • Дослідження: ci-shared — не хаб спільних actions (звичайний консюмер @7n/rules); канонічний механізм — вендоринг composite actions з npm-tarball. Крос-плагінний імпорт скоуп-детекції в ci-github нелегальний → concern живе в правилі storybook з requires.capability: ci:github (перше реальне використання capability-гейтингу).
  • setup-playwright-chromium action (кеш ms-playwright за версією з bun.lock, лише chromium) + lint-storybook.yml (матриця по пакетах у скоупі → vitest run --project=storybook).

Фікси канону за пілотом --adopt на nitra/components

Пілот (read-only діагностика на одному з двох ручних впроваджень-джерел ADR): adopt-модуль без крашів, скоуп-детекція точна, але знайдено 2 баги + 3 прогалини — усі виправлені:

  1. viteFinal-фільтр тепер стійкий до VueMacros-стека (resolve/flatten Promise/масивів, фільтр vue-трансформерів за сімейством) + vite-plugin-vue-layouts-next/unplugin-vue-router у несумісних — інакше канон відтворював би конфлікт подвійної SFC-трансформації, від якого ручні реалізації тікали.
  2. vitest v4 API: provider: playwright() factory з @vitest/browser-playwright замість застарілого рядка; пакет доданий у governance-allowlist.
  3. Flat-root layout (.vue у корені пакета — реальний layout components/npm) у detectStoriesGlob — без цього згенерований glob знайшов би 0 історій.
  4. mocking.mdc: рецепт точкового alias-мока одного модуля (реальний .storybook/mocks/apollo.js) з явним критерієм вибору проти MSW.
  5. storybookTest({ configDir }) без явного include — легітимний патерн, більше не хибний позитив.

Рев'юеру

  • 75/75 vitest, 21/21 rego (conftest), дельта-лінт чистий.
  • Пілотні правки в components (гілка pilot/storybook-adopt) не закомічені — після релізу цього PR adopt можна ганяти там начисто.
  • Відкрите спостереження пілота: у multi-workspace топології vitest-peers живуть у npm/package.json, не в корені — кореневий rego-allowlist це не блокує, але якщо повториться в інших пілотах, варта ADR-нотатка.

🤖 Generated with Claude Code

vitaliytv and others added 7 commits July 21, 2026 11:13
… + скіл n-storybook)

Реалізація ADR «Канон Storybook для Vue-компонентних бібліотек» (#167, #169):
- scope: детекція за isVueComponentLibraryPkg + поріг ≥3 .vue, opt-out через
  .n-rules.json, app-детектор хвилі 2 за прапорцем (інертний)
- scaffold: канонічні template .storybook/main.js (фіксований порядок плагінів,
  viteFinal-фільтр pages/layouts), preview.js (Quasar full install +
  iconSet/iconMapFn, MSW init), mocks/gql-sse.js (sseSubscription), T0-автофікс
- vitest-config: projects [unit, storybook] поверх наявного test-блоку (AST,
  insert-only, fail-closed) + ізольований vitest.stryker.config
- hygiene: undeclared third-party imports у .vue, sassVariables auto-detect
- mocking: docs-only рецепти router/tfm/MSW/Pinia/pageDecorator
- adopt: посекційна діагностика для ручних впроваджень без сліпого перезапису,
  circuit breaker на пакет; скіл npm/skills/storybook + дзеркало .cursor/skills
- підключення concern-ів до lint-рушія (check:true без lint-блоку був мертвим),
  наскрізно верифіковано на синтетичному консюмер-репо

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…l version pin

Кластер 7 ADR канону Storybook:
- npm-module/npm_package_json: allowlist Storybook-devDeps у npm/package.json
  (обґрунтування — isStorybookRoot() у @7n/test читає саме цей файл) +
  version pin static map у Rego (НЕ template — T0 deep-merge інжектив би
  канонічні devDeps у кожен пакет)
- bun/package_json: @vitest/browser, playwright, @storybook/addon-vitest у
  allowed_root_test_deps (test-tooling для vitest-проєкту storybook);
  Storybook-identity пакети в корінь свідомо не пущені, межа задокументована

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ollo subscription + Pinia) (#169)

* docs(adr): brainstorm session — розширення канону Storybook на сторінки (route.params + Apollo subscription + Pinia)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* docs(adr): прототип-верифікація розширення Storybook для сторінок на gt

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…ий PR-прогін (Кластер 5)

Дослідження: ci-shared — не хаб actions (звичайний консюмер); канонічний
механізм — вендоринг composite actions з npm-tarball @7n/rules. Крос-плагінний
імпорт скоуп-детекції в ci-github нелегальний, тому concern живе в правилі
storybook з requires.capability: ci:github (перше реальне використання
capability-гейтингу — спить без плагіна @7n/rules-ci-github).

- .github/actions/setup-playwright-chromium: кеш ms-playwright за версією
  playwright з bun.lock, install лише chromium --with-deps при cache miss
- .github/workflows/lint-storybook.yml: матриця по пакетах у скоупі →
  vitest run --project=storybook
- nightly mutation coverage свідомо поза concern-ом (test/stryker_config)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…a/components

Пілот на одному з двох ручних впроваджень-джерел ADR знайшов 2 баги і 3 прогалини:

- viteFinal-фільтр стійкий до VueMacros-стека: resolve/flatten Promise/масивів
  плагінів, фільтр vue-трансформерів за сімейством (vite:vue*, vue-macros),
  + vite-plugin-vue-layouts-next / unplugin-vue-router у несумісних
- vitest v4 API: provider: playwright() factory з @vitest/browser-playwright
  замість рядка 'playwright' (templates, маркери, fix, тести);
  @vitest/browser-playwright доданий у кореневий governance-allowlist
- flat-root layout у detectStoriesGlob: .vue у корені пакета →
  '../*.stories.@(js|ts)' (реальний layout components/npm)
- mocking.mdc: рецепт точкового alias-мока одного модуля з критерієм вибору
  проти MSW (розмежування скоупів, без суперечності рішенню розширення ADR)
- hasStoriesMarker: storybookTest({ configDir }) без явного include —
  легітимний патерн, не порушення

75/75 vitest, 21/21 rego, дельта-лінт чистий.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vitaliytv
vitaliytv merged commit cb23ede into main Jul 21, 2026
4 of 7 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant