docs(admin-tenant-detail-epic): фиксация Post-MVP AdminTenantDetailView закрытия

- Реестр v1.75→v1.76: запись о закрытии эпика, метрики Pest 416/416 + Vitest 416/416.
- CLAUDE.md в этот раз не правлю: §5 п.11 — синхронизация при следующем
  /claude-md-management:claude-md-improver run'е.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-05-09 14:39:08 +03:00
parent cab1f87efd
commit f596e26153
+24 -1
View File
@@ -2,7 +2,30 @@
**Назначение:** единый рабочий список вопросов, требующих решения заказчика для разблокировки разработки. Разбит по адресатам, внутри — по приоритету.
**Версия:** 1.75 от 09.05.2026 — **Post-MVP: Reports backend epic закрыт** (4 этапа / 4 коммита `19f319c..e0ffe7e`). После MVP-closure (v1.74) заказчик инициировал работу с открытыми вопросами реестра; все unblocked внутри пусто, поэтому взяли Post-MVP TODO «Reports backend» (был один из P1-кандидатов). **Pest 403/403 (1343 assertions) + Vitest 393/393 + Histoire 21/28 зелёные**.
**Версия:** 1.76 от 09.05.2026 — **Post-MVP: AdminTenantDetailView epic закрыт** (2 этапа / 2 коммита `f9d8926..cab1f87`). Backend `GET /api/admin/tenants/{subdomain}` с 4 секциями (users/projects/balance_history/activity) + computed metrics; frontend AdminTenantDetailView переписан с mock на real API. **Pest 416/416 (1388 assertions) + Vitest 416/416 + Histoire 21/28 зелёные**.
**Что изменилось в v1.76 относительно v1.75:**
- **Эпик AdminTenantDetailView** (2 коммита, замена mock на real API):
- **Этап A (backend)** `f9d8926``AdminTenantsController::show($subdomain)` под существующим `/api/admin/tenants/{subdomain}` route'ом. Lookup по subdomain (естественный URL slug) + `whereNull deleted_at`. Без auth-middleware — saas-admin SSO ⏸ Б-1. Возвращает: tenant base (15 полей включая mrr_rub derived) + users (LIMIT 50, ORDER last_active_at DESC) + projects (LEFT JOIN sub-queries для suppliers_count + leads_today) + balance_history (LIMIT 30) + activity (LEFT JOIN users для actor_email, LIMIT 20, json_decode context) + computed metrics (leads_today/week/month через FILTER, AVG(supplier_lead_costs.cost_rub) за 30 дней, runway_days = balance / (month_spend / 30)). 4 private fetcher'а + computeMetrics. Pest +13.
- **Этап B (frontend)** `cab1f87``api/admin.ts +getAdminTenantDetail` + 5 типов; `composables/adminTenantDetailMapper.ts` (API → mockTenantDetail format: code=subdomain, deriveStatus 4 ветки, deriveTariff с Trial-fallback, users.fullName из first+last||email с role='manager' хардкод (schema users role нет — Post-MVP), projects.slug=tag, balance_history с TX- prefix + chargeback_*/trial_bonus/historical_import → ближайший UI-тип, activity.actor=actor_email||system + summary из context.from→to, activitySinceText). AdminTenantDetailView переписан: async loadTenant + 3 ветки template (loading/notFound/fetchError) + watch(code) для реактивной навигации. inn/contact_phone/legal_address скрыты через v-if (нет в schema). Vitest +23.
- **Что НЕ сделано (вынесено в Post-MVP backlog):**
- **Поля inn/contact_phone/legal_address** требуют расширения tenants schema или JOIN на legal_entities (сейчас живёт только для оператора SaaS).
- **users.role** требует таблицы user_roles или enum-колонки в users (сейчас на UI хардкод 'manager').
- **#6 Yandex 360 SSO** ⏸ ждёт Б-1.
- **#7 Pest browser-mode** — отложен (инфра).
- **Регресс зелёный:**
- `npm run lint:vue` + `type-check` + `format` — passed.
- `npm run test:vue`**416/416 за 21.90 сек** (+23 от 393).
- `npm run build` — vite OK 1.04 сек.
- `composer pint` + `composer stan` — passed.
- `composer test`**Pest 416/416 за 45.48 сек** (+13 от 403, 1388 assertions).
- **Сводка §0:** без изменений (70 ✅ / 5 🟦 / 4 ⏸ / 1 P0 + 3 P1 + 0 P2). AdminTenantDetailView не был open-вопросом реестра; это Post-MVP feature расширение (один из P1-кандидатов).
**Что изменилось в v1.75 относительно v1.74:**