From f220e9928fcbd2d4474f512969faab8faf7ad569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Thu, 21 May 2026 08:56:08 +0300 Subject: [PATCH] =?UTF-8?q?docs(etalon):=20bump=20=D0=BF=D0=BE=D1=81=D0=BB?= =?UTF-8?q?=D0=B5=20=D1=84=D0=B8=D1=87=D0=B8=20=D1=83=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5-=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE-?= =?UTF-8?q?=D0=B0=D1=80=D1=85=D0=B8=D0=B2=D0=B0=20+=20=D0=B4=D0=B5=D0=B4?= =?UTF-8?q?=D1=83=D0=BF=20+=20=D1=87=D0=B5=D0=BB=D0=BE=D0=B2=D0=B5=D1=87?= =?UTF-8?q?=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B8=20(6222961)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- cspell-words.txt | 1 + ЭТАЛОН.md | 28 +++++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cspell-words.txt b/cspell-words.txt index d9945baf..f459a738 100644 --- a/cspell-words.txt +++ b/cspell-words.txt @@ -1587,3 +1587,4 @@ lemed дропается батч ретраит +шеринге diff --git a/ЭТАЛОН.md b/ЭТАЛОН.md index ef69e3d5..b5ea720b 100644 --- a/ЭТАЛОН.md +++ b/ЭТАЛОН.md @@ -9,7 +9,7 @@ **перепроверять реальной командой**, не доверять снимку вслепую. - Обновляется по команде заказчика **«обнови эталон»**. -**Снимок снят:** 21.05.2026 (ночь, после сквозного чек-листа всего портала + 6 фиксов: 3 stale эпик-теста под схему v8.26 + 3 UI-бага; запушено в main; volatile §1–§4 пересверены). +**Снимок снят:** 21.05.2026 (день, после фичи «удаление проектов вместо архива + дедуп источника + человеческие ошибки» — 10 коммитов FF в main; volatile §1–§4 пересверены). --- @@ -18,9 +18,9 @@ - Git-корень репозитория — папка `Документация/` (**не** `app/`). - Remote: `CoralMinister/lidpotok` (приватный). - Текущая локальная ветка: **`feat/project-migration-redesign`**. -- Локальный HEAD = origin/main HEAD = **`31b5355`** (style(backend): pint concat_space — tip параллельного эпика A1 backend-tooling; мои 6 фиксов чек-листа ниже на `a0e18a1..b7466eb`; сверять `git log -1 origin/main`). -- Push паттерн: `git push origin <ветка>:main`. Мой push 21.05: `a0e18a1..b7466eb` (4 коммита FF: `95ee664` sync stale эпик-тестов + schema header v8.26, `ba49805` dashboard greeting, `17e3c04` topbar title, `b7466eb` admin mock-счётчики; pre-push gitleaks-full 1119/0, lychee 64/0). **Поверх** параллельная сессия влила эпик A1 backend-tooling `b7466eb..31b5355` (8 коммитов: Rector #64 / PHP Insights #65 / laravel-backend-patterns skill #66 / #67 + ADR-013 + нормативка Tooling v2.19 / PSR v3.19 / Pravila v1.35 / CLAUDE v2.22 + карта 137→141 узлов) — детали в её памяти/нормативке. -- Pre-push lefthook прошёл чисто (gitleaks-full 1115/0, lychee 64/0) — `--no-verify` не понадобился. +- Локальный HEAD = origin/main HEAD = **`22e81cc`** (chore(gitleaks): allowlist Nuclei docs false-positive — tail коммит моего эпика «удаление проектов»; сверять `git log -1 origin/main`). +- Push паттерн: `git push origin <ветка>:main`. Мой push 21.05 (день): `3b6992d..22e81cc` (10 коммитов FF — спека+план+7 имплементаций+gitleaks-allowlist); pre-push gitleaks-full 1155/0, lychee 64/0. +- Pre-push lefthook прошёл чисто после добавления `.gitleaksignore` (Nuclei docs `-u http://...` ловился rule `curl-auth-user` — false-positive из параллельной ветки `worktree-a8-infosec-tooling`, добавлен fingerprint). - **Незакоммиченного нет** (фикс + тест запушены). - Прочее незакоммиченное: `docs/observer/STATUS.md` + `episodes-2026-05.jsonl` (hook-артефакты brain governance, не мои); untracked artifacts (см. §4). - Остатки от rebase (безопасно): `stash@{0}` с не-моими hook/parallel-артефактами (+5 других parallel-стэшей); `/tmp/plan4-rebase-bak/` — устаревшие untracked-копии 2 observer-файлов (committed-версии origin/main авторитетнее). @@ -74,10 +74,11 @@ ## 5. Ключевые факты (стабильно) - Структура: git-корень `Документация/` · Laravel-приложение `app/` · фронтенд `app/resources/js/` - · сборка фронтенда → `app/public/build/` · схема БД `db/schema.sql` (**фактическая v8.26** — - Plans 1+3 эпика project-migration-redesign добавили `supplier_projects.subject_code` + + · сборка фронтенда → `app/public/build/` · схема БД `db/schema.sql` (**фактическая v8.27** — + 21.05.2026 дропнута колонка `projects.archived_at` (фича архива заменена настоящим удалением); + v8.26 наследие — Plans 1+3 эпика project-migration-redesign: `supplier_projects.subject_code` + `project_supplier_links` pivot + `deals.subject_code` + seed `supplier_export_mode` + CHECK chk_deals_subject_code. - Schema header синхронизирован на v8.26 (65 таблиц / 123 индекса, commit `95ee664`); CHANGELOG_schema.md содержит v8.26 entries). + Header v8.27 в commit `07d7387`; CHANGELOG_schema.md содержит v8.27 + v8.26 entries). - Стек: Laravel 13 + PHP 8.3 · Vue 3 + Vuetify 3 (не Tailwind/Inertia) · PostgreSQL 16 · Redis. - **Демо-доступ к порталу:** 5 изолированных компаний — `admin@demo.local` (Demo Tenant, 4 проекта) + `manager1@demo.local` (Компания Ивана) + `manager2@demo.local` (Компания Анны) + `manager3@demo.local` (Компания Петра) + `manager4@demo.local` (Компания Марии). Пароль у всех **`password`**. Каждый логин видит только своё. Админка `/admin/*` в local открыта любому залогиненному (`EnsureSaasAdmin` — стаб local/testing). - Поставщик лидов: `crm.bp-gr.ru` (учётка в `.env` `SUPPLIER_*`); портал — Vue 2 + Element UI; @@ -87,6 +88,19 @@ ## 6. Текущие рабочие нити (детали — в памяти Claude) +- **Удаление проектов вместо архива + дедуп источника + человеческие ошибки — DONE+ЗАПУШЕНО** (21.05.2026 день, + `3b6992d..22e81cc`, 10 коммитов FF в main). По заказу: (1) кнопка «архивировать» заменена на настоящее удаление + (если по проекту есть сделки — блок с понятным сообщением, иначе hard delete + удаление донора у поставщика + с учётом шеринга — пере-синк остатка, если другие клиенты ещё пользуются источником); (2) подтверждена возможность + шеринга одинаковых источников между разными клиентами (модель не меняется); (3) добавлен запрет дубля источника + внутри одного клиента (раньше не было); (4) сырой `SQLSTATE` больше не уходит в UI — глобальный handler + `QueryException` + app-level pre-checks (имя/источник) с понятными сообщениями. Колонка `projects.archived_at` + и все `scopeActive/scopeArchived/->archived()` снесены, миграция `2026_05_21_000000`, schema bump v8.26→**v8.27**. + Новый job `App\Jobs\Supplier\DeleteSupplierProjectJob` — удаление/пере-синк донора при шеринге. + Регрессия: Pest filter=Project **229/228+1sk/0**, Vitest **896/3sk/0**, vue-tsc 0, Vite build OK, Pint/Larastan 0. + Живая проверка 5 сценариев (имя/источник дубль / sharing / удаление пустого / блок при сделках) — все ✓ с чисткой. + Спека: `docs/superpowers/specs/2026-05-21-project-delete-dedup-errors-design.md`, план: + `docs/superpowers/plans/2026-05-21-project-delete-dedup-errors.md`. Память: `project_delete_dedup_errors.md`. - **Сквозной чек-лист всего портала + 6 фиксов — ЗАПУШЕНО** (21.05.2026, `a0e18a1..b7466eb`). Прогон всех ~30 экранов (Playwright) + полная регрессия (Pest 1010/0, Vitest 895/0, pint/larastan/vue-tsc/build чисто). Портал здоров: все экраны рендерятся, консоль чистая. Найдено и исправлено 3 UI-бага: (1) дашборд здоровался захардкоженным «Доброе утро,