phase1(boost): laravel/boost v2.4.6 + Vuetify guideline (Прил. Н #10)
Установка Laravel Boost вручную (без `php artisan boost:install`):
wizard падает в обоих режимах из-за двух багов окружения:
- интерактив: PHP fatal на кириллице-пути при рендере laravel/prompts
multiselect (нет UTF-8 codepage в Windows PowerShell)
- --no-interaction: ConfiguresPrompts::multiselectFallback возвращает
null → array_map() crash в L13 framework
Manual setup вместо wizard'а:
- app/composer.json: laravel/boost ^2.4 + транзитивы (laravel/mcp v0.7,
laravel/roster v0.5.1, symfony/yaml v7.4)
- app/boost.json: agents=[claude_code], guidelines=true, mcp=true
- .mcp.json (корень): добавлен блок laravel-boost — command=php,
args=[app/artisan, boost:mcp]. Заменяет PostgreSQL MCP из фазы 0
(был убран в _comment_postgres ещё ранее).
- app/.ai/guidelines/vuetify.md: кастомный Vuetify 3 guideline по
Tooling §10.2 + Forest-палитра + 14 slug'ов воронки берутся из
schema.sql:2076 (НЕ из BRANDBOOK_v2 §3.6).
Smoke-test (boost:mcp via JSON-RPC):
- protocolVersion 2024-11-05, serverInfo "Laravel Boost"
- 9 tools: application-info, browser-logs, database-(connections|query|
schema), get-absolute-url, last-error, read-log-entries, search-docs
Уточнение к CLAUDE.md §7: «отключать guidelines Inertia/Livewire/Tailwind/
Filament/Sail/PHPUnit» — избыточно. Boost через laravel/roster детектит
установленные пакеты из composer.lock; то, что не установлено, не серверит.
Pest 4 будет detected, PHPUnit guideline не активируется (PHPUnit убран
из direct deps в коммите 30f0335). Тех-уточнение к §10.1 шаг 4 — отдельно.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,10 @@
|
||||
},
|
||||
"comment": "Фаза 0 #3 — официальный hosted GitHub MCP (https://github.com/github/github-mcp-server). Требует env GITHUB_TOKEN с PAT (scopes: repo, read:org, не давать admin/delete). Раньше использовали deprecated @modelcontextprotocol/server-github — заменён 06.05.2026."
|
||||
},
|
||||
"_comment_postgres": "PostgreSQL MCP временно убран. Когда поднимется локальная dev-БД — добавить блок 'postgres' с command='npx', args=['-y', '@modelcontextprotocol/server-postgres', 'postgresql://localhost:5432/liderra_dev']. В фазе 1 — заменяется Laravel Boost (см. Tooling §3.1)."
|
||||
"laravel-boost": {
|
||||
"command": "php",
|
||||
"args": ["app/artisan", "boost:mcp"],
|
||||
"comment": "Фаза 1 #10 — Laravel Boost MCP (laravel/boost v2.4.6). Заменяет PostgreSQL MCP из фазы 0. Через Roster детектит установленные пакеты (Laravel 13, Pest 4, Pint, Larastan, IDE Helper) и серверит соответствующие guidelines + DB query/schema/tinker tools. Кастомный Vuetify 3 guideline — в app/.ai/guidelines/vuetify.md. Конфиг wizard'а — app/boost.json (написан вручную: wizard сломан на кириллице-пути)."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
# Vuetify 3 (Лидерра)
|
||||
|
||||
Проект использует **Vuetify 3** как единственную UI-библиотеку (CTO-11 в реестре открытых вопросов).
|
||||
|
||||
## НЕ использовать (CLAUDE.md §5 п.2)
|
||||
|
||||
- Tailwind CSS / shadcn-vue / Element UI / Naive UI / Quasar / PrimeVue / Bootstrap / Vuestic
|
||||
- Inertia.js / Livewire / Filament / Flux UI / Nova / Folio / Volt / Wayfinder
|
||||
- jQuery / Vue 2
|
||||
|
||||
## Палитра — v8 Forest
|
||||
|
||||
Источник: `liderra_v8_handoff/docs/BRANDBOOK_v2.md` §3 + DEVELOPER_HANDOFF.md §3.
|
||||
|
||||
| Токен | Значение | Назначение |
|
||||
|---|---|---|
|
||||
| primary | `#0F6E56` (Teal 600) | Кнопки, акценты, активные состояния — неоспариваемый |
|
||||
| primary-dark | `#012019` | Sidebar (теало-нуар) |
|
||||
| background | `#F6F3EC` (warm ivory) | Page background |
|
||||
| surface | `#FFFFFF` | Карточки, диалоги |
|
||||
| on-surface | OKLCH-токены см. BRANDBOOK_v2 §3.5 | Текст, иконки |
|
||||
|
||||
Vuetify-тема `liderraLight` (и опционально `liderraDark`) — определена в `resources/js/plugins/vuetify.ts` (создаётся в фазе 2).
|
||||
|
||||
**14 статусов воронки** имеют свои OKLCH-цвета — но **slug'и брать ТОЛЬКО из `db/schema.sql:2076`** (источник истины — schema/ТЗ §6.4, не handoff). Палитру маппить на slug'и при реализации.
|
||||
|
||||
## Шрифты
|
||||
|
||||
- **UI:** Inter (variable, axis `opsz` 14..32). Подключение — Google Fonts с `subset cyrillic`.
|
||||
- **Numerics + код:** JetBrains Mono с `font-feature-settings: "tnum"` (табличные цифры).
|
||||
|
||||
Шрифты задаются на `:root` через CSS-переменные, Vuetify темы подхватывают через `defaultTheme.variables`.
|
||||
|
||||
## Иконки
|
||||
|
||||
- **Lucide** (через `lucide-vue-next`). НЕ Material Icons, НЕ Font Awesome.
|
||||
|
||||
## Компоненты
|
||||
|
||||
Использовать **только** Vuetify 3 компоненты:
|
||||
|
||||
- Формы: `v-text-field`, `v-select`, `v-autocomplete`, `v-checkbox`, `v-radio-group`, `v-switch`, `v-textarea`
|
||||
- Кнопки/действия: `v-btn`, `v-btn-toggle`, `v-fab`
|
||||
- Layout: `v-app`, `v-app-bar`, `v-navigation-drawer`, `v-main`, `v-container`, `v-row`, `v-col`
|
||||
- Данные: `v-data-table`, `v-data-table-server`, `v-data-iterator`
|
||||
- Карточки/диалоги: `v-card`, `v-dialog`, `v-bottom-sheet`, `v-snackbar`
|
||||
- Навигация: `v-tabs`, `v-stepper`, `v-breadcrumbs`, `v-pagination`
|
||||
- Канбан: `v-row` + `v-col` + `v-card` (drag-and-drop через `vuedraggable@next` или `@vueuse/integrations`)
|
||||
|
||||
Дефолтный material-стиль переопределяется через `:root` CSS-переменные из BRANDBOOK_v2 + `defaults` в Vuetify-плагине.
|
||||
|
||||
## A11y (WCAG 2.1 AA)
|
||||
|
||||
- Все компоненты должны проходить **Pa11y 9.x + axe** (см. CLAUDE.md §5 п.3 — Pa11y единственный источник истины, НЕ Lighthouse).
|
||||
- Контраст текста на белом — минимум **4.5:1** для обычного текста, **3:1** для крупного (≥18pt или ≥14pt bold).
|
||||
- Все интерактивные элементы должны иметь `aria-label` или видимый текст.
|
||||
- Focus-стили НЕ удалять — Vuetify 3 рисует ring через `--v-focus-opacity`.
|
||||
|
||||
## Тестирование
|
||||
|
||||
- Vitest для unit-тестов компонентов.
|
||||
- **Histoire** (НЕ Storybook, см. CLAUDE.md §5 п.6 / Tooling Прил. Н #24) для каталога компонентов.
|
||||
- Pa11y-CI на `histoire build` output перед merge'ом.
|
||||
|
||||
## Связанные документы
|
||||
|
||||
- `liderra_v8_handoff/docs/BRANDBOOK_v2.md` — палитра, типографика, spacing, статусы (брендинг)
|
||||
- `liderra_v8_handoff/docs/DEVELOPER_HANDOFF.md` — токены, компоненты, 25 экранов
|
||||
- `db/schema.sql:2076` — 14 slug'ов статусов воронки (источник истины)
|
||||
- `docs/CRM_bp-gr_Инструкция_v8_5.md` — функционал и состав экранов (источник истины)
|
||||
- `web/v8/v8_*.html` — 13 HTML-концептов как референс
|
||||
|
||||
При расхождении handoff vs ТЗ — приоритет **ТЗ + schema** (см. CLAUDE.md §0 + memory `reference_handoff.md`).
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"agents": [
|
||||
"claude_code"
|
||||
],
|
||||
"guidelines": true,
|
||||
"mcp": true
|
||||
}
|
||||
@@ -15,6 +15,7 @@
|
||||
"barryvdh/laravel-ide-helper": "*",
|
||||
"fakerphp/faker": "^1.23",
|
||||
"larastan/larastan": "*",
|
||||
"laravel/boost": "^2.4",
|
||||
"laravel/pail": "^1.2.5",
|
||||
"laravel/pao": "^1.0.6",
|
||||
"laravel/pint": "^1.29",
|
||||
|
||||
Generated
+277
-1
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "65090803eaf67b2bc04be6640c03edac",
|
||||
"content-hash": "1937213c7c2ad08891326a312df854f7",
|
||||
"packages": [
|
||||
{
|
||||
"name": "brick/math",
|
||||
@@ -7168,6 +7168,145 @@
|
||||
},
|
||||
"time": "2026-04-29T18:32:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/boost",
|
||||
"version": "v2.4.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/boost.git",
|
||||
"reference": "c9ea6368c66f7c0e6a9b26706b401de900cdb9ac"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/boost/zipball/c9ea6368c66f7c0e6a9b26706b401de900cdb9ac",
|
||||
"reference": "c9ea6368c66f7c0e6a9b26706b401de900cdb9ac",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"guzzlehttp/guzzle": "^7.9",
|
||||
"illuminate/console": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/contracts": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/routing": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/support": "^11.45.3|^12.41.1|^13.0",
|
||||
"laravel/mcp": "^0.5.1|^0.6.0|^0.7.0",
|
||||
"laravel/prompts": "^0.3.10",
|
||||
"laravel/roster": "^0.5.0",
|
||||
"php": "^8.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"laravel/pint": "^1.27.0",
|
||||
"mockery/mockery": "^1.6.12",
|
||||
"orchestra/testbench": "^9.15.0|^10.6|^11.0",
|
||||
"pestphp/pest": "^2.36.0|^3.8.4|^4.1.5",
|
||||
"phpstan/phpstan": "^2.1.27",
|
||||
"rector/rector": "^2.1"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Laravel\\Boost\\BoostServiceProvider"
|
||||
]
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laravel\\Boost\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Laravel Boost accelerates AI-assisted development by providing the essential context and structure that AI needs to generate high-quality, Laravel-specific code.",
|
||||
"homepage": "https://github.com/laravel/boost",
|
||||
"keywords": [
|
||||
"ai",
|
||||
"dev",
|
||||
"laravel"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/laravel/boost/issues",
|
||||
"source": "https://github.com/laravel/boost"
|
||||
},
|
||||
"time": "2026-04-28T11:52:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/mcp",
|
||||
"version": "v0.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/mcp.git",
|
||||
"reference": "3513b4feca5f1678be4d2261dcfa8e456436d02a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/mcp/zipball/3513b4feca5f1678be4d2261dcfa8e456436d02a",
|
||||
"reference": "3513b4feca5f1678be4d2261dcfa8e456436d02a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"ext-mbstring": "*",
|
||||
"illuminate/console": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/container": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/contracts": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/http": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/json-schema": "^12.41.1|^13.0",
|
||||
"illuminate/routing": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/support": "^11.45.3|^12.41.1|^13.0",
|
||||
"illuminate/validation": "^11.45.3|^12.41.1|^13.0",
|
||||
"php": "^8.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"laravel/pint": "^1.20",
|
||||
"orchestra/testbench": "^9.15|^10.8|^11.0",
|
||||
"pestphp/pest": "^3.8.5|^4.3.2",
|
||||
"phpstan/phpstan": "^2.1.27",
|
||||
"rector/rector": "^2.2.4"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"aliases": {
|
||||
"Mcp": "Laravel\\Mcp\\Server\\Facades\\Mcp"
|
||||
},
|
||||
"providers": [
|
||||
"Laravel\\Mcp\\Server\\McpServiceProvider"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laravel\\Mcp\\": "src/",
|
||||
"Laravel\\Mcp\\Server\\": "src/Server/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Taylor Otwell",
|
||||
"email": "taylor@laravel.com"
|
||||
}
|
||||
],
|
||||
"description": "Rapidly build MCP servers for your Laravel applications.",
|
||||
"homepage": "https://github.com/laravel/mcp",
|
||||
"keywords": [
|
||||
"laravel",
|
||||
"mcp"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/laravel/mcp/issues",
|
||||
"source": "https://github.com/laravel/mcp"
|
||||
},
|
||||
"time": "2026-04-21T10:23:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/pail",
|
||||
"version": "v1.2.6",
|
||||
@@ -7400,6 +7539,67 @@
|
||||
},
|
||||
"time": "2026-04-20T15:26:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/roster",
|
||||
"version": "v0.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/roster.git",
|
||||
"reference": "5089de7615f72f78e831590ff9d0435fed0102bb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/roster/zipball/5089de7615f72f78e831590ff9d0435fed0102bb",
|
||||
"reference": "5089de7615f72f78e831590ff9d0435fed0102bb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"illuminate/console": "^11.0|^12.0|^13.0",
|
||||
"illuminate/contracts": "^11.0|^12.0|^13.0",
|
||||
"illuminate/routing": "^11.0|^12.0|^13.0",
|
||||
"illuminate/support": "^11.0|^12.0|^13.0",
|
||||
"php": "^8.2",
|
||||
"symfony/yaml": "^7.2|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"laravel/pint": "^1.14",
|
||||
"mockery/mockery": "^1.6",
|
||||
"orchestra/testbench": "^9.0|^10.0|^11.0",
|
||||
"pestphp/pest": "^3.0|^4.1",
|
||||
"phpstan/phpstan": "^2.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Laravel\\Roster\\RosterServiceProvider"
|
||||
]
|
||||
},
|
||||
"branch-alias": {
|
||||
"dev-master": "1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laravel\\Roster\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Detect packages & approaches in use within a Laravel project",
|
||||
"homepage": "https://github.com/laravel/roster",
|
||||
"keywords": [
|
||||
"dev",
|
||||
"laravel"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/laravel/roster/issues",
|
||||
"source": "https://github.com/laravel/roster"
|
||||
},
|
||||
"time": "2026-03-05T07:58:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mockery/mockery",
|
||||
"version": "1.6.12",
|
||||
@@ -9882,6 +10082,82 @@
|
||||
],
|
||||
"time": "2024-10-20T05:08:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/yaml",
|
||||
"version": "v7.4.10",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/yaml.git",
|
||||
"reference": "c660d6538545a3e8e65a5621ee3d7a6d352892c7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/yaml/zipball/c660d6538545a3e8e65a5621ee3d7a6d352892c7",
|
||||
"reference": "c660d6538545a3e8e65a5621ee3d7a6d352892c7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=8.2",
|
||||
"symfony/deprecation-contracts": "^2.5|^3",
|
||||
"symfony/polyfill-ctype": "^1.8"
|
||||
},
|
||||
"conflict": {
|
||||
"symfony/console": "<6.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/console": "^6.4|^7.0|^8.0"
|
||||
},
|
||||
"bin": [
|
||||
"Resources/bin/yaml-lint"
|
||||
],
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Symfony\\Component\\Yaml\\": ""
|
||||
},
|
||||
"exclude-from-classmap": [
|
||||
"/Tests/"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Symfony Community",
|
||||
"homepage": "https://symfony.com/contributors"
|
||||
}
|
||||
],
|
||||
"description": "Loads and dumps YAML files",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/yaml/tree/v7.4.10"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://symfony.com/sponsor",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/fabpot",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/nicolas-grekas",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-05-05T08:01:55+00:00"
|
||||
},
|
||||
{
|
||||
"name": "ta-tikoma/phpunit-architecture-test",
|
||||
"version": "0.8.7",
|
||||
|
||||
Reference in New Issue
Block a user