dsh-desktop-kit 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -41
- package/client.js +780 -28
- package/docs/ARCHITECTURE.md +114 -0
- package/docs/COMPATIBILITY.md +61 -0
- package/docs/INSTALL.md +84 -0
- package/docs/PRIVACY.md +50 -0
- package/docs/ROADMAP.md +57 -0
- package/docs/TOKENS.md +118 -0
- package/docs/TROUBLESHOOTING.md +68 -0
- package/docs/images/hero.png +0 -0
- package/index.js +4 -0
- package/package.json +15 -5
- package/plugins/dsh-gkb-ru-ui/lib/client.js +276 -28
- package/plugins/dsh-gkb-ru-ui/lib/index.js +45 -1
- package/plugins/dsh-gkb-ru-ui/lib/skills.js +195 -1
- package/plugins/dsh-gkb-ru-ui/package.json +2 -2
- package/plugins/dsh-gkb-ru-ui/screenshots/01-home-tiles-1440-light.png +0 -0
- package/plugins/dsh-gkb-ru-ui/screenshots/02-skills-1440-light.png +0 -0
- package/plugins/dsh-gkb-ru-ui/screenshots/03-skills-editor-1440-light.png +0 -0
- package/plugins/dsh-gkb-ru-ui/screenshots/04-skills-1440-dark.png +0 -0
- package/plugins/dsh-gkb-ru-ui/screenshots/05-skills-390-light.png +0 -0
- package/plugins/dsh-gkb-ru-ui/screenshots/06-home-tiles-1440-dark.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/01-real-time-peak-start.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/02-real-time-peak-end.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/03-peak-card-1440-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/04-peak-card-1440-dark.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/05-peak-card-390-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/05-peak-card-768-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/06-peak-card-390-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/07-live-preview-check.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/07-pre-peak-1440-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/08-peak-start-1440-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/09-peak-end-1440-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/10-pre-peak-card-1440-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/11-pre-peak-card-1440-dark.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/12-pre-peak-card-390-light.png +0 -0
- package/plugins/dsh-peak-guard/screenshots/qa-report.json +74 -0
- package/plugins/dsh-profile-transfer/screenshots/01-settings-transfer-1440-light.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/02-settings-transfer-preview-1440-light.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/03-settings-transfer-1440-dark.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/04-settings-transfer-390-light.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/05-settings-transfer-768-light.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/06-settings-transfer-390-dark.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/07-settings-transfer-export-result.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/08-settings-transfer-workspaces-1440-light.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/09-settings-transfer-workspaces-1440-dark.png +0 -0
- package/plugins/dsh-profile-transfer/screenshots/10-settings-transfer-workspaces-390-light.png +0 -0
- package/plugins/dsh-session-move/screenshots/01-row-menu-1440-light.png +0 -0
- package/plugins/dsh-session-move/screenshots/02-dialog-1440-light.png +0 -0
- package/plugins/dsh-session-move/screenshots/03-dialog-390-light.png +0 -0
- package/plugins/dsh-session-move/screenshots/04-dialog-1440-dark.png +0 -0
- package/plugins/dsh-session-move/screenshots/05-drag-highlight-1440-light.png +0 -0
- package/plugins/dsh-session-move/screenshots/06-drop-ungrouped-highlight.png +0 -0
- package/plugins/dsh-session-move/screenshots/07-after-drop-ungrouped.png +0 -0
- package/plugins/dsh-session-move/screenshots/08-move-dialog.png +0 -0
- package/plugins/dsh-session-move/screenshots/09-moved-to-second-workspace.png +0 -0
- package/plugins/dsh-session-move/screenshots/qa-report.json +62 -0
- package/plugins/dsh-skill-autopilot/cordis.patch.yml +3 -0
- package/plugins/dsh-skill-autopilot/index.js +444 -0
- package/plugins/dsh-skill-autopilot/package.json +19 -0
- package/plugins/dsh-token-lab/cordis.patch.yml +3 -0
- package/plugins/dsh-token-lab/lib/client.js +504 -0
- package/plugins/dsh-token-lab/lib/index.js +275 -0
- package/plugins/dsh-token-lab/package.json +26 -0
- package/plugins/dsh-token-lab/screenshots/01-token-lab-1440-light.png +0 -0
- package/plugins/dsh-token-lab/screenshots/02-token-lab-1440-dark.png +0 -0
- package/skills/code-review-checklist/SKILL.md +48 -30
- package/skills/content-writing/SKILL.md +64 -327
- package/skills/content-writing/references/process.md +123 -0
- package/skills/content-writing/references/quick-recipes.md +99 -0
- package/skills/content-writing/references/rules.md +85 -0
- package/skills/content-writing/references/sources.md +49 -0
- package/skills/context-economy/SKILL.md +60 -0
- package/skills/context-economy/references/long-session.md +35 -0
- package/skills/context-economy/references/token-math.md +42 -0
- package/skills/context-economy/references/tool-recipes.md +34 -0
- package/skills/database-safety/SKILL.md +40 -24
- package/skills/debugging-playbook/SKILL.md +30 -27
- package/skills/design-critique/SKILL.md +57 -110
- package/skills/design-critique/references/a11y.md +25 -0
- package/skills/design-critique/references/diagnoses.md +33 -0
- package/skills/design-critique/references/quick-tests.md +30 -0
- package/skills/design-critique/references/report-template.md +63 -0
- package/skills/design-critique/references/rubric-fast.md +73 -0
- package/skills/dev-workflow/SKILL.md +41 -34
- package/skills/dev-workflow/references/definition-of-done.md +44 -0
- package/skills/dev-workflow/references/memory-and-boundaries.md +31 -0
- package/skills/dev-workflow/references/stages.md +67 -0
- package/skills/git-and-ci/SKILL.md +46 -26
- package/skills/pg-upgrade-verify/SKILL.md +54 -35
- package/skills/project-deep-dive/SKILL.md +39 -164
- package/skills/project-deep-dive/references/recon-commands.md +12 -0
- package/skills/project-deep-dive/references/section-templates.md +2 -0
- package/skills/project-deep-dive/references/tool-and-process.md +86 -0
- package/skills/project-memory-maintenance/SKILL.md +39 -154
- package/skills/project-memory-maintenance/references/api-and-checklist.md +99 -0
- package/skills/project-memory-maintenance/references/journal-template.md +2 -0
- package/skills/project-memory-maintenance/references/section-rules.md +2 -0
- package/skills/release-and-deploy/SKILL.md +46 -32
- package/skills/requirements-and-planning/SKILL.md +44 -110
- package/skills/requirements-and-planning/references/antipatterns-and-checklist.md +20 -0
- package/skills/requirements-and-planning/references/process-steps.md +52 -0
- package/skills/requirements-and-planning/references/templates-and-estimates.md +29 -0
- package/skills/security-review/SKILL.md +33 -29
- package/skills/seo/SKILL.md +53 -305
- package/skills/seo/references/antipatterns.md +66 -0
- package/skills/seo/references/audit-checklist.md +14 -0
- package/skills/seo/references/content-seo.md +180 -174
- package/skills/seo/references/eeat-medical.md +2 -0
- package/skills/seo/references/measurement.md +28 -1
- package/skills/seo/references/on-page.md +5 -0
- package/skills/seo/references/page-templates.md +56 -0
- package/skills/seo/references/stack-recipes.md +2 -0
- package/skills/seo/references/structured-data.md +2 -0
- package/skills/seo/references/technical-seo.md +2 -0
- package/skills/service-desk-conventions/SKILL.md +40 -28
- package/skills/service-desk-db-safety/SKILL.md +39 -28
- package/skills/service-desk-release/SKILL.md +40 -22
- package/skills/service-desk-testing/SKILL.md +47 -33
- package/skills/service-desk-ui/SKILL.md +43 -24
- package/skills/skills-router/SKILL.md +44 -82
- package/skills/skills-router/references/applying-skills.md +25 -0
- package/skills/skills-router/references/routing-matrix.md +52 -0
- package/skills/testing-strategy/SKILL.md +47 -32
- package/skills/ui-design-system/SKILL.md +43 -38
- package/skills/ui-design-system/references/accessibility-and-responsive.md +50 -0
- package/skills/ui-design-system/references/tokens-and-components.md +67 -0
- package/skills/ui-design-system/references/visual-qa.md +44 -0
- package/skills/web-research/SKILL.md +40 -33
- package/skills/web-research/references/answer-and-citations.md +60 -0
- package/skills/web-research/references/query-recipes.md +44 -0
- package/skills/wow-design/SKILL.md +82 -161
- package/skills/wow-design/references/anti-patterns.md +3 -0
- package/skills/wow-design/references/critique-rubric.md +3 -0
- package/skills/wow-design/references/design-brief-template.md +2 -0
- package/skills/wow-design/references/inspiration.md +3 -0
- package/skills/wow-design/references/presets.md +3 -0
- package/skills/wow-design/references/principles.md +3 -0
- package/skills/wow-design/references/quick-presets.md +50 -0
- package/skills/wow-design/references/report-template.md +21 -0
- package/skills/wow-design/references/stack-recipes.md +3 -0
- package/skills/wow-design/references/visual-qa.md +3 -0
- package/skills/wow-design/references/wow-levers.md +43 -0
- package/tools/skill-cost.mjs +76 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
> Часть навыка seo. ≈2 250 токенов. Читать, когда: пишешь title/description, проектируешь новую страницу или решаешь, что ставить в JSON-LD/robots/sitemap для конкретного типа страницы.
|
|
2
|
+
|
|
3
|
+
# Шаблоны по типам страниц: мета, разметка, индексация
|
|
4
|
+
|
|
5
|
+
> Готовые решения «по умолчанию»: не изобретай title и разметку заново для каждой страницы.
|
|
6
|
+
> Правила самих элементов — `on-page.md`; шаблоны JSON-LD — `structured-data.md`. Проверено 04.11.2026.
|
|
7
|
+
|
|
8
|
+
## 1. Матрица по типу страницы
|
|
9
|
+
|
|
10
|
+
| Тип страницы | `title` (шаблон) | JSON-LD | `robots` | sitemap | priority |
|
|
11
|
+
|---|---|---|---|---|---|
|
|
12
|
+
| Главная | `{Клиника} — официальный сайт | {город}` | Organization+WebSite+MedicalClinic | index,follow | да | 1.0 |
|
|
13
|
+
| Направление | `{Направление} в {Клиника}, {город} — врачи, цены, запись` | MedicalWebPage+BreadcrumbList+Service | index,follow | да | 0.8 |
|
|
14
|
+
| Услуга | `{Услуга} в {Клиника} — цена от {X} ₽, запись онлайн` | MedicalProcedure/Service+FAQ+Breadcrumb | index,follow | да | 0.8 |
|
|
15
|
+
| Врач | `{ФИО} — {специальность}, {Клиника}, {город}` | Physician+Person+Breadcrumb | index,follow | да | 0.7 |
|
|
16
|
+
| Статья/блог | `{Вопрос/тема}: {уточнение} — {Клиника}` | Article/MedicalWebPage+FAQ+Breadcrumb | index,follow | да | 0.6 |
|
|
17
|
+
| Новость | `{Событие} — {дата} | {Клиника}` | NewsArticle/Article | index,follow | да | 0.5 |
|
|
18
|
+
| Цены | `Цены на {раздел} в {Клиника}, {город} — {год}` | MedicalWebPage+Offer (осторожно) | index,follow | да | 0.7 |
|
|
19
|
+
| Контакты | `Контакты {Клиника} — адрес, телефон, схема проезда` | MedicalClinic+Organization | index,follow | да | 0.6 |
|
|
20
|
+
| Документы/лицензии | `Лицензии и документы {Клиника} — {город}` | MedicalOrganization | index,follow | да | 0.4 |
|
|
21
|
+
| Спасибо / личный кабинет | `{...}` | — | `noindex,follow` | нет | — |
|
|
22
|
+
| Поиск / фильтры / мусорные фасеты | — | — | `noindex,follow` или robots+`Clean-param` | нет | — |
|
|
23
|
+
| 404 / 410 | `Страница не найдена` | — | `noindex` | нет | — |
|
|
24
|
+
|
|
25
|
+
Оговорки:
|
|
26
|
+
- **`priority` и `changefreq` — подсказка**, а не рычаг: Google их игнорирует, Яндекс учитывает слабо. Ставь для
|
|
27
|
+
порядка в карте, не «оптимизируй» ими (`technical-seo.md` §4).
|
|
28
|
+
- «Цены» с `Offer` — только если цены публичные, актуальные и совпадают с прайсом на странице.
|
|
29
|
+
- «Документы/лицензии» — страница доверия: номер, дата, орган выдачи, ссылка на реестр Росздравнадзора
|
|
30
|
+
(`eeat-medical.md` §3).
|
|
31
|
+
- Один кластер = одна страница: если под один интент уже есть страница, не создавай вторую (каннибализация).
|
|
32
|
+
- Тип страницы определяет блоки контента: услуга/направление/статья — `content-seo.md` §4–5.
|
|
33
|
+
|
|
34
|
+
## 2. Шаблоны `title` / `description` (RU, медицина)
|
|
35
|
+
|
|
36
|
+
Правило: **что + где + выгода/факт + бренд** (не обязательно все, но первые два — всегда).
|
|
37
|
+
`|` и бренд — не в начало. «Официальный сайт» — только если это действительно официальный сайт организации.
|
|
38
|
+
|
|
39
|
+
| Тип | `title` | `description` |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Главная | `организация, Москва — официальный сайт больницы` | `Многопрофильная больница в Москве: консультации врачей, диагностика, стационар. Запись по телефону и онлайн. Адрес и схема проезда.` |
|
|
42
|
+
| Направление | `Кардиология в организация, Москва — врачи, диагностика, запись` | `Кардиологическое отделение: ЭКГ, ЭхоКГ, холтер, консультации кардиолога. Опытные врачи, современное оборудование. Запись онлайн.` |
|
|
43
|
+
| Услуга | `МРТ головного мозга в Москве — цена от 4 500 ₽, запись в организация` | `МРТ головы на аппарате 1.5 Тл: расшифровка врачом, результат в день исследования. Цена от 4 500 ₽, запись онлайн и по телефону.` |
|
|
44
|
+
| Врач | `Иванов Иван Иванович — кардиолог, организация, Москва` | `Кардиолог с 18-летним стажем: диагностика и лечение гипертонии, ИБС, аритмий. Кандидат медицинских наук. Запись на приём.` |
|
|
45
|
+
| Статья | `Высокое давление: причины, симптомы и когда идти к врачу` | `Почему повышается давление, какие симптомы опасны, как измерять дома и когда нужен кардиолог. Разбор врача организация.` |
|
|
46
|
+
| Новость | `День открытых дверей в организация — 12 апреля 2026` | `12 апреля 2026: бесплатная проверка сердца, консультации кардиолога и эндокринолога. Программа, запись, адрес.` |
|
|
47
|
+
|
|
48
|
+
## 3. Чего избегать в `title` / `description`
|
|
49
|
+
|
|
50
|
+
- `Купить, дёшево, в Москве недорого` для государственной клиники — конфликт с реальностью и YMYL-доверием.
|
|
51
|
+
- Пунктуация-мусор `!!!`, эмодзи, слова «лучший», «№1» без доказательств.
|
|
52
|
+
- Обрезанные фразы и «…» вручную — Google/Яндекс обрежут сами по ширине.
|
|
53
|
+
- Дубли: один и тот же шаблон на сотнях страниц = дубли и потеря релевантности (`technical-seo.md` §6).
|
|
54
|
+
- `description` «Читайте на сайте», набор ключей без пользы, обещания результата лечения.
|
|
55
|
+
|
|
56
|
+
Детали и примеры «плохо → хорошо»: `on-page.md` §1–2, §13.
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
> Часть навыка seo. ≈10 100 токенов. Читать, когда: пишешь SEO в коде — Laravel/Blade, Bitrix/Aspro, React/Vite, статика; один источник SEO-данных, мета и JSON-LD в исходном HTML, сервер/деплой.
|
|
2
|
+
|
|
1
3
|
# Стек-рецепты: Laravel/Blade, Bitrix/Aspro, React/Vite, статика
|
|
2
4
|
|
|
3
5
|
> Готовые паттерны, чтобы SEO-по-умолчанию не превращалось в ручную работу. Всё написано так, чтобы
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
> Часть навыка seo. ≈8 700 токенов. Читать, когда: добавляешь JSON-LD — шаблоны Organization, BreadcrumbList, MedicalWebPage, Physician, MedicalClinic, Service, FAQPage, Article; что не размечать; валидация.
|
|
2
|
+
|
|
1
3
|
# Структурированные данные (JSON-LD) — шаблоны и правила
|
|
2
4
|
|
|
3
5
|
> Разметка помогает поисковикам и ИИ-системам **понять сущности** страницы: кто вы, где вы, какие услуги, кто врач,
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
> Часть навыка seo. ≈8 050 токенов. Читать, когда: техническая правка или просадка трафика — статусы, robots, sitemap, canonical, пагинация, фасеты, hreflang, CWV, JS/SPA, миграции URL.
|
|
2
|
+
|
|
1
3
|
# Техническое SEO — краулинг, индексация, URL, скорость
|
|
2
4
|
|
|
3
5
|
> Справочник по технической части. Всё, что здесь есть, проверяется **в коде и в инструментах**, а не «на глаз».
|
|
@@ -1,40 +1,52 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-desk-conventions
|
|
3
|
-
description: "
|
|
4
|
-
whenToUse: "Любая задача по
|
|
3
|
+
description: "Инварианты Service Desk: где что лежит, модули, маршруты и RBAC, темы, миграции и формы — что нельзя ломать перед правками."
|
|
4
|
+
whenToUse: "Любая задача по Service Desk (заявки, активы, склад, отчёты, справочник, AD/LDAP, UI) — читать до правок."
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# Service Desk
|
|
8
|
+
# Service Desk — соглашения проекта
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## 0. Когда применять
|
|
11
|
+
- Задачи по Service Desk: заявки, активы, склад, отчёты, справочник, AD/LDAP, UI.
|
|
12
|
+
- Перед правками модулей, маршрутов, RBAC, тем, миграций.
|
|
13
|
+
- Нужно понять, куда положить код.
|
|
14
|
+
|
|
15
|
+
## 1. Главное
|
|
16
|
+
|
|
17
|
+
**Где что**
|
|
11
18
|
- Рабочая копия (1.39.0): `%USERPROFILE%\OneDrive\Документы\deepseek-harness\default-workspace\src\service-desk-1.38.1`
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- Реальный сервер: `app-server`, `/var/www/service-desk`, PostgreSQL `servicedesk`, сайт `http://127.0.0.1:8000`.
|
|
19
|
+
- Досье: `%USERPROFILE%\.dsh\memory\projects\service-desk.md`; архив: `%USERPROFILE%\.dsh\memory\projects\service-desk\` (аудит/тесты/релизы).
|
|
20
|
+
- Сервер: `app-server`, `/var/www/service-desk`, PostgreSQL `servicedesk`, сайт `http://127.0.0.1:8000`.
|
|
15
21
|
|
|
16
|
-
|
|
22
|
+
**Архитектура**
|
|
17
23
|
- Laravel 13 / PHP 8.5 / PostgreSQL / Blade + Vite + SCSS.
|
|
18
|
-
-
|
|
19
|
-
- Маршруты модулей **без `auth`** — только `permission:*`;
|
|
20
|
-
- RBAC: `CheckPermission` (`permission:`), `EnsureAdmin` (`admin`), `RoleGate` (ALLOWED/DENIED по именам)
|
|
21
|
-
- Темы: каркас `themes/default/views/layouts/app.blade.php` (один на все палитры); страницы — `themes/default/views/*`, `resources/views`, `modules/*/resources/views` (namespace `tickets::`
|
|
22
|
-
-
|
|
24
|
+
- Модули `modules/{Tickets,Assets,Inventory,Reports,DirectorySync}`; регистрация — `config/modules.php` → `app/Providers/ModuleServiceProvider.php`; провайдер: `loadViewsFrom` + `loadMigrationsFrom` + `Route::middleware('web')->group(routes/web.php)`.
|
|
25
|
+
- Маршруты модулей **без `auth`** — только `permission:*`; новый маршрут — с `auth` (или осознанно) и `permission:*`; route names не переименовывать.
|
|
26
|
+
- RBAC: `CheckPermission` (`permission:`), `EnsureAdmin` (`admin`), `RoleGate` (ALLOWED/DENIED по именам); роль `admin` даёт все права.
|
|
27
|
+
- Темы: каркас `themes/default/views/layouts/app.blade.php` (один на все палитры); страницы — `themes/default/views/*`, `resources/views`, `modules/*/resources/views` (namespace `tickets::`).
|
|
28
|
+
- Стили: `resources/scss/app.scss` → `_tokens.scss`, `_ui-refresh.scss` (новые правила), `_legacy.scss` (только база).
|
|
23
29
|
- Аудит: `AuditObserver` (Ticket/Asset/Consumable/StockMove/Reminder/News) → `audit_logs`.
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
- Миграции — только
|
|
31
|
+
**Нельзя ломать**
|
|
32
|
+
- Миграции — только новые и аддитивные; старые не редактировать.
|
|
27
33
|
- `db:seed` в 1.39.1 идемпотентен — не переделывать на updateOrCreate/сброс паролей.
|
|
28
|
-
- Формы: не убирать `name
|
|
29
|
-
- `@html` (HtmlSanitizer) — единственный безопасный вывод
|
|
30
|
-
- Права/владельцы: не менять
|
|
31
|
-
- Скрытые разделы: `MODULES_HIDDEN` (config
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- Русский язык комментариев/интерфейса;
|
|
35
|
-
- Транзакции для многозаписных операций, `lockForUpdate()` при гонках,
|
|
36
|
-
- После доработки — bump версии в `config/app.php
|
|
37
|
-
|
|
38
|
-
##
|
|
39
|
-
- Тесты: `php scripts/test.php` (
|
|
40
|
-
|
|
34
|
+
- Формы: не убирать `name`, `required` и подписи (тесты `FormHintsTest`, `TicketFormVisibilityTest`).
|
|
35
|
+
- `@html` (HtmlSanitizer) — единственный безопасный вывод разметки; не `{!! !!}` для пользовательских данных.
|
|
36
|
+
- Права/владельцы: не менять доступ без теста на обычного пользователя и админа.
|
|
37
|
+
- Скрытые разделы: `MODULES_HIDDEN` (`config modules.hidden`), `Modules::visible()`.
|
|
38
|
+
|
|
39
|
+
**Стиль**
|
|
40
|
+
- Русский язык комментариев/интерфейса; PSR-12 (Laravel Pint), 4 пробела.
|
|
41
|
+
- Транзакции для многозаписных операций, `lockForUpdate()` при гонках, валидация.
|
|
42
|
+
- После доработки — bump версии в `config/app.php`: feature → minor, fix → patch.
|
|
43
|
+
|
|
44
|
+
## 2. Куда грузить дальше
|
|
45
|
+
`service-desk-db-safety` — БД/бэкап; `service-desk-testing` — PHPUnit/Playwright; `service-desk-release` — tgz/`update.sh`; `service-desk-ui` — вёрстка/темы. Тесты: `php scripts/test.php` (Linux `make test`).
|
|
46
|
+
|
|
47
|
+
## 3. Гейт перед сдачей
|
|
48
|
+
- [ ] Досье и `AGENTS.md` прочитаны; правки локальны.
|
|
49
|
+
- [ ] Старые миграции не тронуты, новые аддитивны.
|
|
50
|
+
- [ ] Маршруты: `auth` + `permission:*`; route names целы.
|
|
51
|
+
- [ ] Формы, `@html`, RBAC целы; проверены пользователь и админ.
|
|
52
|
+
- [ ] `php scripts/test.php` зелёный; версия в `config/app.php` поднята.
|
|
@@ -1,33 +1,36 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-desk-db-safety
|
|
3
|
-
description: "
|
|
4
|
-
whenToUse: "Перед
|
|
3
|
+
description: "PostgreSQL Service Desk: бэкап и проверка копии, запрещённые команды, восстановление, миграции — без потери данных."
|
|
4
|
+
whenToUse: "Перед миграциями, сидами, загрузкой данных, релизом или любым действием, которое может изменить/удалить данные БД."
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# PostgreSQL: безопасность данных (Service Desk)
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
## 0. Когда применять
|
|
11
|
+
- Миграции, сиды, загрузка справочника/данных, релиз с изменениями схемы.
|
|
12
|
+
- Восстановление и очистка заявок.
|
|
13
|
+
- Любая запись/удаление на сервере.
|
|
14
|
+
|
|
15
|
+
## 1. Главное
|
|
16
|
+
|
|
17
|
+
**Железные правила**
|
|
18
|
+
- Боевая БД — PostgreSQL на `app-server` (`servicedesk`); локальный кластер — только тестовый.
|
|
19
|
+
- **Никогда** без прямого разрешения: `migrate:fresh|refresh|reset`, `db:wipe`, `db:seed` на боевой, `migrate:rollback`, `dropdb`, `TRUNCATE` `phonebook_entries` (каскад на `users` и связанные!), `composer run preview:reset` (без `.env.preview` берёт боевой `.env` → `migrate:fresh`), `clear-tickets.sh`/`tickets:purge` (удаляет все заявки и вложения).
|
|
20
|
+
- Перед рискованным — бэкап и проверка окружения; никогда не подключаться к боевой БД с локальных экспериментов.
|
|
21
|
+
|
|
22
|
+
**Бэкап (на сервере)**
|
|
21
23
|
```bash
|
|
22
24
|
sudo -u den php artisan backup:run --reason="before-<что>"
|
|
23
25
|
sudo -u postgres pg_dump -Fc -d servicedesk -f /var/backups/service-desk/pre-<версия>.dump
|
|
24
26
|
sudo -u postgres pg_restore -l /var/backups/service-desk/pre-<версия>.dump | head
|
|
27
|
+
sudo -u den php artisan backup:verify
|
|
25
28
|
```
|
|
26
|
-
- `backup:run` кладёт database.dump
|
|
27
|
-
- Копию
|
|
28
|
-
-
|
|
29
|
+
- `backup:run` кладёт `database.dump`, `env.txt`, `files.zip` в `BACKUP_PATH` (`/var/backups/service-desk`); `backup:verify` проверяет восстановление.
|
|
30
|
+
- Копию скачать себе (WinSCP), не хранить только на сервере.
|
|
31
|
+
- `pg_dump` в PATH (на сервере есть; локально Windows — `C:\Program Files\PostgreSQL\18\bin`).
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
**Восстановление (только по разрешению)**
|
|
31
34
|
```bash
|
|
32
35
|
cd /var/www/service-desk && sudo -u den php artisan down
|
|
33
36
|
sudo -u postgres dropdb servicedesk && sudo -u postgres createdb servicedesk
|
|
@@ -35,18 +38,26 @@ sudo -u postgres pg_restore --no-owner --role=postgres -d servicedesk <dump>
|
|
|
35
38
|
sudo -u den php artisan migrate --force && sudo -u den php artisan optimize:clear
|
|
36
39
|
sudo -u den php artisan up
|
|
37
40
|
```
|
|
38
|
-
`dropdb` — только после подтверждения и
|
|
41
|
+
`dropdb` — только после подтверждения и проверенного дампа.
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
- Имитация
|
|
43
|
-
- В тестах `RefreshDatabase` работает только на `servicedesk_test`, не на прод.
|
|
43
|
+
**Локальная проверка**
|
|
44
|
+
- Кластер PG 18: `...\default-workspace\pgruntime\data` (ICU ru-RU, 5432); БД `servicedesk` (dev), `servicedesk_test` (PHPUnit, RefreshDatabase — только на тестовой).
|
|
45
|
+
- Имитация обновления — по `pg-upgrade-verify`: отдельная папка/БД, counts/md5 до и после.
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
1. Сравнить списки
|
|
47
|
-
2.
|
|
48
|
-
3.
|
|
47
|
+
**Перед релизом с миграциями**
|
|
48
|
+
1. Сравнить списки миграций; прочитать новые: `dropColumn`, NOT NULL, переименования.
|
|
49
|
+
2. `migrate --pretend` на копии и посмотреть SQL.
|
|
50
|
+
3. Бэкап — только потом `migrate --force`.
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
**Сбой**
|
|
51
53
|
- Сайт в maintenance → `sudo -u den php artisan up`.
|
|
52
|
-
- Ошибки БД → `storage/logs/laravel.log`, `journalctl -u service-desk-queue
|
|
54
|
+
- Ошибки БД → `storage/logs/laravel.log`, `journalctl -u service-desk-queue`; не спешить с откатом/восстановлением.
|
|
55
|
+
|
|
56
|
+
## 2. Куда грузить дальше
|
|
57
|
+
`pg-upgrade-verify` — копия; `service-desk-release` — выкатка.
|
|
58
|
+
|
|
59
|
+
## 3. Гейт перед сдачей
|
|
60
|
+
- [ ] Окружение проверено, боевая БД не затронута.
|
|
61
|
+
- [ ] Свежий бэкап создан, читается (`pg_restore -l` / `backup:verify`), копия вне сервера.
|
|
62
|
+
- [ ] Запрещённые команды не выполнялись без разрешения.
|
|
63
|
+
- [ ] Новые миграции аддитивны и прогнаны на копии; план отката есть.
|
|
@@ -1,43 +1,61 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-desk-release
|
|
3
|
-
description: "
|
|
4
|
-
whenToUse: "При подготовке
|
|
3
|
+
description: "Релиз Service Desk: версия в config/app.php, tgz без мусора, SHA-256, deploy/update.sh, smoke после выкатки и откат."
|
|
4
|
+
whenToUse: "При подготовке обновления, сборке архива, выкатке на app-server, проверке после релиза и откате."
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Релиз Service Desk (tgz + update.sh)
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
10
|
+
## 0. Когда применять
|
|
11
|
+
- Готовишь обновление Service Desk: версия, сборка, checksums.
|
|
12
|
+
- Выкатываешь на `app-server` или нужен план отката.
|
|
13
|
+
- В релизе есть миграции — сначала `service-desk-db-safety` и `pg-upgrade-verify`.
|
|
14
14
|
|
|
15
|
-
##
|
|
16
|
-
|
|
15
|
+
## 1. Главное
|
|
16
|
+
|
|
17
|
+
**Версия**
|
|
18
|
+
- `config/app.php`: `env('APP_VERSION', 'X.Y.Z')`. feature → minor (1.39.0 → 1.40.0), fix → patch (1.39.0 → 1.39.1), breaking → major.
|
|
19
|
+
- `deploy-ubuntu.sh` берёт RELEASE из `config/app.php` и записывает в `.env`; версия видна внизу меню.
|
|
20
|
+
- Версия, тег и имя архива совпадают; версия поднята **до** сборки.
|
|
21
|
+
|
|
22
|
+
**Сборка**
|
|
23
|
+
1. `php scripts/test.php` зелёный, UI-скриншоты сделаны.
|
|
17
24
|
2. Собрать tgz **без** `vendor/ node_modules/ public/build/ storage/ .env .env.preview .git .claude`.
|
|
18
|
-
3.
|
|
19
|
-
4.
|
|
25
|
+
3. Надёжно: распаковать предыдущую версию в staging, наложить изменённые файлы, `tar -czf`.
|
|
26
|
+
4. `sha256sum` → `checksums.txt`; архив и checksums — на Рабочий стол.
|
|
27
|
+
5. Проверить листинг: нет секретов/мусора, все изменённые файлы на месте.
|
|
20
28
|
|
|
21
|
-
|
|
29
|
+
**Выкатка (сервер `app-server`, пользователь `den`)**
|
|
22
30
|
```bash
|
|
23
|
-
cd /tmp && sha256sum service-desk-X.Y.Z.tgz
|
|
31
|
+
cd /tmp && sha256sum service-desk-X.Y.Z.tgz # сверить с локальным
|
|
24
32
|
sudo tar --no-same-owner -xzf /tmp/service-desk-X.Y.Z.tgz -C /var/www/service-desk
|
|
25
33
|
cd /var/www/service-desk && sudo APP_ADDR=127.0.0.1 bash deploy/update.sh
|
|
26
34
|
```
|
|
27
|
-
`update.sh` сам: backup → maintenance → composer/npm/build → migrate → seed (идемпотентен) → services/caches → up.
|
|
35
|
+
`update.sh` сам: backup → maintenance → composer/npm/build → migrate → seed (идемпотентен) → services/caches → up. При сбое сайт остаётся в maintenance — исправить и `php artisan up`.
|
|
28
36
|
|
|
29
|
-
|
|
37
|
+
**Проверки после «Готово»**
|
|
30
38
|
1. Ctrl+F5 → версия внизу меню = X.Y.Z.
|
|
31
39
|
2. Число заявок прежнее, старые номера/вложения открываются.
|
|
32
40
|
3. Затронутый раздел/фича работает (сценарий из задачи).
|
|
33
41
|
4. Админ и обычный пользователь — оба сценария.
|
|
34
|
-
5.
|
|
42
|
+
5. `php artisan migrate:status`, логи без ошибок; при желании `sudo -u den php artisan launch:check`.
|
|
43
|
+
|
|
44
|
+
**Откат**
|
|
45
|
+
- Код: папка `Task.old-<дата>` (если копировали) или предыдущий архив; распаковать, вернуть версию.
|
|
46
|
+
- БД: только если релиз менял данные/схему (см. `service-desk-db-safety`); обычно не нужно.
|
|
47
|
+
- `sudo -u den php artisan up`, повторить smoke.
|
|
48
|
+
|
|
49
|
+
**Журнал**
|
|
50
|
+
- Записать факт выкатки и проверки в `%USERPROFILE%\.dsh\memory\SESSIONS.md` и досье.
|
|
51
|
+
- Пример структуры — `...\memory\projects\service-desk\release\UPDATE-1.39.0.md`.
|
|
35
52
|
|
|
36
|
-
##
|
|
37
|
-
-
|
|
38
|
-
- БД: восстанавливать только если релиз менял данные/схему (см. `service-desk-db-safety`); обычно не нужно.
|
|
39
|
-
- Снять maintenance: `sudo -u den php artisan up`.
|
|
53
|
+
## 2. Куда грузить дальше
|
|
54
|
+
`service-desk-db-safety` — бэкап/восстановление; `pg-upgrade-verify` — миграции на копии; `release-and-deploy` — общие правила; `git-and-ci` — тег.
|
|
40
55
|
|
|
41
|
-
##
|
|
42
|
-
-
|
|
43
|
-
-
|
|
56
|
+
## 3. Гейт перед сдачей
|
|
57
|
+
- [ ] Версия поднята в `config/app.php`; тег и архив совпадают.
|
|
58
|
+
- [ ] Тесты зелёные, скриншоты сделаны; архив без секретов/мусора.
|
|
59
|
+
- [ ] sha256 локально и на сервере совпал; бэкап перед выкаткой есть.
|
|
60
|
+
- [ ] `update.sh` прошёл; версия, заявки/вложения, фича, админ + пользователь проверены.
|
|
61
|
+
- [ ] Логи и `migrate:status` чистые; откат описан; запись в память сделана.
|
|
@@ -1,47 +1,61 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-desk-testing
|
|
3
|
-
description: "
|
|
4
|
-
whenToUse: "
|
|
3
|
+
description: "Тесты Service Desk: PHPUnit на PostgreSQL, baseline, права и формы, Playwright E2E, скриншоты, Pint и PHPStan."
|
|
4
|
+
whenToUse: "Перед и после любой правки кода/UI Service Desk, при подготовке релиза и при разборе упавших тестов."
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Тестирование Service Desk
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
|
|
10
|
+
## 0. Когда применять
|
|
11
|
+
- Любая правка кода/UI: сначала baseline, после — сравнение.
|
|
12
|
+
- Нужны feature/unit-тесты, проверка прав или форм.
|
|
13
|
+
- Подготовка релиза, E2E или визуальная проверка.
|
|
12
14
|
|
|
13
|
-
##
|
|
15
|
+
## 1. Главное
|
|
16
|
+
|
|
17
|
+
**PHPUnit на PostgreSQL (обязательно)**
|
|
14
18
|
```powershell
|
|
15
19
|
# из корня проекта (Windows)
|
|
16
20
|
php scripts/test.php
|
|
21
|
+
php scripts/test.php --filter=TicketFormVisibilityTest
|
|
22
|
+
php scripts/test.php --stop-on-failure
|
|
17
23
|
# Linux/CI
|
|
18
24
|
make test
|
|
19
25
|
```
|
|
20
|
-
Скрипт поднимает env: `DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=servicedesk_test DB_USERNAME=postgres DB_PASSWORD= APP_URL=http://localhost`.
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
26
|
+
Скрипт поднимает env: `DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=servicedesk_test DB_USERNAME=postgres DB_PASSWORD= APP_URL=http://localhost`; кэш/очередь/сессии/почта — array/sync, `LOG_CHANNEL=null`.
|
|
27
|
+
- `RefreshDatabase` — на **servicedesk_test**, боевую БД не трогает.
|
|
28
|
+
- PG 18: `pgruntime/data` (ICU ru-RU — важно для ILIKE кириллицы), порт 5432. Если не запущен: `Start-Process "$pgbin\pg_ctl.exe" -ArgumentList @('-D', $data, '-l', $log, 'start') -WindowStyle Hidden`.
|
|
29
|
+
- Baseline (эталон): 542 теста / 2753 assertions, все зелёные; deprecation PHPUnit — норма. Пропуски `markTestSkipped` — только для отсутствующих `docs/requests/*.xlsx`.
|
|
30
|
+
|
|
31
|
+
**Что проверять**
|
|
32
|
+
1. До правки — baseline, после — сравнить; новые падения — блокер.
|
|
33
|
+
2. Новое: feature на доступы/валидацию/сценарий + unit логики.
|
|
34
|
+
3. Права: админ и обычный пользователь; служебные поля/разделы закрыты.
|
|
35
|
+
4. Данные: форма не теряет/не подменяет значения (`TicketStrictAccountingTest`).
|
|
36
|
+
|
|
37
|
+
**E2E/UI (Playwright)**
|
|
38
|
+
- `...\default-workspace\tools\e2e` → `npx.cmd playwright test`.
|
|
39
|
+
- Стенд: `php artisan serve --port=8125` (PG dev `servicedesk`); вход `admin@example.com/admin`, `user@example.com/user`.
|
|
40
|
+
- Скриншоты — `...\default-workspace\audit\screenshots\`: desktop 1440 + mobile 390/412, light/dark; смотреть через `read_image`.
|
|
41
|
+
- Эталон: `tools\e2e\tests\priority.spec.js` (1.39.0).
|
|
42
|
+
|
|
43
|
+
**Известные особенности**
|
|
44
|
+
- Нужен собранный `public/build` (`@vite`); пересобрать `npm run build`.
|
|
45
|
+
- Не запускать полный набор параллельно (общая `servicedesk_test`).
|
|
46
|
+
- Падение: `storage/logs/laravel.log` (в тестах `LOG_CHANNEL=null`) + полный вывод PHPUnit.
|
|
47
|
+
- Windows: `is_writable` сейчас полный доступ.
|
|
48
|
+
|
|
49
|
+
**Качество**
|
|
50
|
+
- `make lint` / `php scripts/lint.php` — Pint по изменённым (vs HEAD); `--fix` / `make fmt`.
|
|
51
|
+
- `make stan` / `php scripts/stan.php` — PHPStan/Larastan (baseline legacy).
|
|
52
|
+
|
|
53
|
+
## 2. Куда грузить дальше
|
|
54
|
+
`service-desk-ui` — UI/скриншоты; `service-desk-db-safety` — тестовая БД; `service-desk-release` — релиз; `testing-strategy` — общая стратегия.
|
|
55
|
+
|
|
56
|
+
## 3. Гейт перед сдачей
|
|
57
|
+
- [ ] Baseline снят до правки; после — не хуже.
|
|
58
|
+
- [ ] Новые тесты: feature + unit; права админа и пользователя.
|
|
59
|
+
- [ ] `php scripts/test.php` зелёный; боевая БД не тронута.
|
|
60
|
+
- [ ] `npm run build`; E2E/скриншоты 1440/390, light/dark проверены.
|
|
61
|
+
- [ ] `lint`/`stan` без новых ошибок; baseline обновлён при необходимости.
|
|
@@ -1,33 +1,52 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-desk-ui
|
|
3
|
-
description: "
|
|
4
|
-
whenToUse: "Любая правка интерфейса, тем, вёрстки, SCSS/JS или UX-текстов
|
|
3
|
+
description: "UI Service Desk: где править вёрстку и темы, дизайн-токены, состояния и адаптив, сборка, скриншоты и визуальная проверка."
|
|
4
|
+
whenToUse: "Любая правка интерфейса, тем, вёрстки, SCSS/JS или UX-текстов Service Desk; визуальный баг и проверка перед сдачей."
|
|
5
5
|
user-invocable: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# UI/UX Service Desk
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
|
|
10
|
+
## 0. Когда применять
|
|
11
|
+
- Любая правка интерфейса, тем, вёрстки, SCSS/JS или UX-текстов.
|
|
12
|
+
- Новая страница, форма, таблица, дашборд; визуальный баг.
|
|
13
|
+
- Перед сдачей UI нужны скриншоты и проверка тем.
|
|
14
|
+
|
|
15
|
+
## 1. Главное
|
|
16
|
+
|
|
17
|
+
**Где править**
|
|
18
|
+
- Каркас (меню/шапка/футер): `themes/default/views/layouts/app.blade.php` (темы — только палитры; отдельных папок тем нет).
|
|
19
|
+
- Страницы: `themes/default/views/*` (dashboard, news, reminders, users, access), `resources/views/*` (auth/login, errors/403, phonebook, partials, pagination), `modules/*/resources/views/*` (namespace `tickets::`).
|
|
20
|
+
- Стили: `resources/scss/app.scss` — вход; `_tokens.scss` — токены, `_ui-refresh.scss` — новые правила, `_legacy.scss` — только база.
|
|
21
|
+
- JS: `resources/js/app.js` (+ Bootstrap, React-виджеты); сборка `npm run build` — без неё production 500 и тесты падают.
|
|
15
22
|
- Иконки: `public/themes/default/icons/*.svg`; шрифты: `public/fonts`.
|
|
16
23
|
|
|
17
|
-
|
|
18
|
-
- Прямые углы (
|
|
19
|
-
-
|
|
20
|
-
- Адаптив: ≤560px
|
|
21
|
-
- Под
|
|
22
|
-
- Не
|
|
23
|
-
- Тексты
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
24
|
+
**Дизайн-правила**
|
|
25
|
+
- Прямые углы (radius 0), спокойная медицинская палитра; 4 палитры: light/dark/contrast/modern.
|
|
26
|
+
- Состояния: hover, focus-visible, active, disabled, loading, empty, error.
|
|
27
|
+
- Адаптив: ≤560px — одна колонка; ≤960px — меню сверху; >960px — сайдбар; широкие таблицы — `.table-wrap`.
|
|
28
|
+
- Под полем — `.field-help` (одно предложение, без терминов); ошибки — `.field-error`; обязательные — `label-required`.
|
|
29
|
+
- Не `{!! !!}` для пользовательского контента — только `@html` (HtmlSanitizer).
|
|
30
|
+
- Тексты по-русски, коротко; кнопки — глаголом («Создать заявку», «Сохранить»).
|
|
31
|
+
- Контраст AA, клавиатура и focus-visible; иконки — SVG, не эмодзи; без horizontal scroll на 390.
|
|
32
|
+
|
|
33
|
+
**Проверка UI**
|
|
34
|
+
1. `php artisan serve --port=8125`; вход `admin@example.com/admin` / `user@example.com/user`.
|
|
35
|
+
2. Playwright: `...\default-workspace\tools\e2e` → `npx.cmd playwright test`.
|
|
36
|
+
3. Скриншоты desktop 1440 и mobile (Pixel 7 / 390), светлая и тёмная темы; смотреть через `read_image`.
|
|
37
|
+
4. Проверить пустые состояния, длинные тексты, кириллицу, ошибки форм, фокус.
|
|
38
|
+
5. «До/после» — в `...\default-workspace\audit\screenshots`.
|
|
39
|
+
|
|
40
|
+
**Полезное**
|
|
41
|
+
- Прошлые скриншоты: `%USERPROFILE%\.dsh\memory\projects\service-desk\screenshots\`.
|
|
42
|
+
- Валидация: `lang/ru/validation.php` (`resources/lang` нет).
|
|
43
|
+
|
|
44
|
+
## 2. Куда грузить дальше
|
|
45
|
+
`wow-design` — арт-направление/токены; `design-critique` — аудит UI; `service-desk-testing` — E2E; `service-desk-conventions` — инварианты.
|
|
46
|
+
|
|
47
|
+
## 3. Гейт перед сдачей
|
|
48
|
+
- [ ] Правка в правильном слое; `npm run build` выполнен.
|
|
49
|
+
- [ ] 4 палитры/темы, состояния, адаптив 1440/390 проверены.
|
|
50
|
+
- [ ] `.table-wrap`, `.field-help`, `.field-error`, `label-required` на месте.
|
|
51
|
+
- [ ] `@html` вместо `{!! !!}`; тексты по-русски, кнопки-глаголы.
|
|
52
|
+
- [ ] Скриншоты light/dark 1440/390 сняты и просмотрены; overflow нет.
|