# Аудит исторических implementation plans

## Паспорт документа

- Статус документа: historical snapshot
- Актуально на: 28 марта 2026 года
- Владелец: backend/platform-команда
- Пересмотр: при следующем цикле аудита, security review или ревизии противоречий в документации и спеках
- Область применения: audit-слой проекта: снимки состояния, реестры расхождений и результаты ревизий
- Связанные документы:
  - [Индекс документации](../README.md)
  - [Текущее состояние](../project/current-state.md)
  - [Roadmap](../project/roadmap.md)

## Цель документа

Этот документ фиксирует судьбу исторических implementation plans из каталога `plans/`. Они больше не являются источником истины, но содержат полезный инженерный контекст. После обработки эти файлы перенесены в архив `plans/archived/2026-03-28-integrated/`. Задача этого audit:

- показать, какие планы уже реализованы;
- отделить реализованное от частично завершённого и устаревшего;
- указать, в каких канонических документах теперь живёт актуальная правда;
- не допустить параллельного существования старых планов и текущей документации как двух равноправных слоёв знания.

## Краткий вывод

Содержимое `plans/` в целом не потеряно и не «лежит мёртвым грузом». По состоянию на сегодня:

- backend-планы по логированию, Axiom и JWT token delivery реализованы;
- web-планы по `src/app`, searchParams-фильтрам, infinite scroll, SVGR и базовому auth-layer реализованы существенно, но часть из них не доведена до полностью чистого post-split состояния;
- главным незавершённым хвостом остаются не сами идеи из `plans/`, а остаточный legacy-слой в `qadam-web`: дублирующиеся `components/lib`, прямые `fetch`-вызовы в отдельных срезах и UI-дрифт относительно нового registration API.

Практическое правило:

- `plans/` считать архивом инженерных пакетов;
- актуальное состояние брать из [`current-state.md`](../project/current-state.md), [`roadmap.md`](../project/roadmap.md), [`frontend-separate-repo-plan.md`](../frontend/frontend-separate-repo-plan.md), [`analytics-observability.md`](../architecture/analytics-observability.md), [`api-routes.md`](../architecture/api-routes.md), [`docs/Agents/product-roadmap.md`](../Agents/product-roadmap.md) и OpenAPI artifact.

## Матрица по каждому плану

| Архивный план | Текущий статус | Что реально произошло | Где теперь источник истины |
|---|---|---|---|
| [`2026-03-14-pino-logger.md`](../../plans/archived/2026-03-28-integrated/2026-03-14-pino-logger.md) | Реализован | API переведён на `nestjs-pino`, `LoggerModule.forRoot(...)`, DI через `PinoLogger`, фильтры и сервисы уже используют единый structured logging | [`analytics-observability.md`](../architecture/analytics-observability.md), [`current-state.md`](../project/current-state.md) |
| [`2026-03-14-axiom-transport.md`](../../plans/archived/2026-03-28-integrated/2026-03-14-axiom-transport.md) | Реализован | В production работает optional `@axiomhq/pino` transport с graceful degradation при отсутствии `AXIOM_TOKEN` / `AXIOM_DATASET` | [`analytics-observability.md`](../architecture/analytics-observability.md), [`current-state.md`](../project/current-state.md) |
| [`2026-03-16-jwt-token-delivery-refactor.md`](../../plans/archived/2026-03-28-integrated/2026-03-16-jwt-token-delivery-refactor.md) | Реализован и усилен | Есть `TokenDeliveryService`, dual delivery для web/mobile, cookie + bearer support в `JwtAuthGuard`, body refresh для mobile; поверх исходного плана добавлен security-hardening: атомарный single-use consume refresh token через Redis | [`api-routes.md`](../architecture/api-routes.md), [`current-state.md`](../project/current-state.md), [`security-review.md`](./security-review.md) |
| [`2026-03-16-web-fsd-migration.md`](../../plans/archived/2026-03-28-integrated/2026-03-16-web-fsd-migration.md) | Реализован частично | Основной runtime уже живёт в `src/app` и FSD-подобных слоях `src/shared`, `src/entities`, `src/features`, `src/widgets`, `src/views`; при этом в `qadam-web` всё ещё остаются исторические `components`, `lib`, `src/components`, `src/lib` и конкурирующие UI-слои | [`frontend-separate-repo-plan.md`](../frontend/frontend-separate-repo-plan.md), [`current-state.md`](../project/current-state.md), [`roadmap.md`](../project/roadmap.md) |
| [`2026-03-17-web-dal-layer.md`](../../plans/archived/2026-03-28-integrated/2026-03-17-web-dal-layer.md) | Реализован частично | Основа DAL уже есть: `apiClient`, `serverFetch`, key factories, React Query queries/mutations, SSR-prefetch, generated OpenAPI contract. Но часть admin/reference-flow всё ещё использует прямые `fetch`, а legacy `api.ts`/дублирующие слои пока не вычищены полностью | [`frontend-separate-repo-plan.md`](../frontend/frontend-separate-repo-plan.md), [`frontend-handoff.md`](../frontend/frontend-handoff.md), [`roadmap.md`](../project/roadmap.md) |
| [`2026-03-18-searchparams-filters.md`](../../plans/archived/2026-03-28-integrated/2026-03-18-searchparams-filters.md) | Реализован | Публичный каталог уже инициализируется из `searchParams`, фильтры живут в `CatalogFilterProvider`, URL синхронизируется без hydration drift, Zustand-store больше не является активным runtime-источником истины для каталога | [`current-state.md`](../project/current-state.md), [`docs/Agents/product-roadmap.md`](../Agents/product-roadmap.md), [`docs/Agents/knowledge-base.md`](../Agents/knowledge-base.md) |
| [`2026-03-18-infinite-scroll-catalog.md`](../../plans/archived/2026-03-28-integrated/2026-03-18-infinite-scroll-catalog.md) | Реализован | В каталоге уже используется `useInfiniteQuery`, SSR `prefetchInfiniteQuery`, `IntersectionObserver` и накопление страниц без кнопки `"Загрузить ещё"` | [`current-state.md`](../project/current-state.md), [`docs/Agents/product-roadmap.md`](../Agents/product-roadmap.md), [`docs/Agents/specs/2026-03-24-mvp-spec-05-catalog-search-map.md`](../Agents/specs/2026-03-24-mvp-spec-05-catalog-search-map.md) |
| [`2026-03-18-svg-icons.md`](../../plans/archived/2026-03-28-integrated/2026-03-18-svg-icons.md) | Реализован | В `qadam-web` настроен `@svgr/webpack`, есть `svg.d.ts`, иконки лежат в `apps/web/src/shared/icons` и импортируются как React components | [`frontend-separate-repo-plan.md`](../frontend/frontend-separate-repo-plan.md), [`current-state.md`](../project/current-state.md) |
| [`2026-03-18-web-auth.md`](../../plans/archived/2026-03-28-integrated/2026-03-18-web-auth.md) | Реализован частично | Есть `proxy.ts`, SSR/auth gating, `useCurrentUser()`, auth mutations и post-login redirects. Но исходный план частично устарел: frontend всё ещё не синхронизирован до конца с новым registration API (`/auth/register/buyer`, `/auth/register/seller`) и buyer profile flow | [`frontend-separate-repo-plan.md`](../frontend/frontend-separate-repo-plan.md), [`frontend-handoff.md`](../frontend/frontend-handoff.md), [`roadmap.md`](../project/roadmap.md) |

## Что уже окончательно перенесено в канонический слой

### Backend / platform

- structured logging и Axiom transport;
- dual JWT delivery и текущая cookie/bearer модель;
- security-hardening refresh flow;
- observability и EventLog-контур.

### Web / delivery

- переход на `src/app` и FSD-подобную структуру как основной runtime;
- searchParams-based catalog filters;
- infinite scroll каталога;
- SVGR-пайплайн;
- базовый auth-layer для `qadam-web`;
- React Query + SSR-prefetch + contract-driven API layer как рабочая основа отдельного frontend-репозитория.

## Что остаётся незавершённым наследием этих планов

1. Полная вычистка legacy-слоя из `qadam-web`:
   - дублирующиеся `components` / `src/components`;
   - дублирующиеся `lib` / `src/lib`;
   - остаточные прямые `fetch`-вызовы вместо общего DAL/contract layer.
2. Полная синхронизация web-UI с новым registration API и buyer profile flow.
3. Web smoke/e2e-контур, которого не было в исходных планах как обязательного quality gate, но который теперь обязателен по инженерным принципам.
4. Окончательное доведение post-split operating model до image-based/docker delivery.

## Как использовать `plans/` дальше

- Не писать новые канонические планы в `plans/`, если они претендуют на роль источника истины.
- Для новых решений использовать `docs/` и `specs/`.
- Сохранять `plans/` только как исторический архив инженерных пакетов и ссылаться на этот audit-документ.
- Если старый план реализован полностью и больше не несёт полезного контекста, его можно удалить только после того, как выводы уже перенесены в канонический слой.
