architect/standards/2-lifecycle/lifecycle-code.md

type: standard
aspect: lifecycle
title: "Стадии кода (Code Stages)"
version: 1.0.0
date: 2026-02-19
status: active


Стадии кода (Code Stages)

Версия: 1.0.0
Дата: 2026-02-03
Статус: ОБЯЗАТЕЛЬНО


ПРИНЦИП

ОДИН КОД — НЕСКОЛЬКО СТАДИЙ
От разработки до production через тестирование

Зачем: Контроль качества и версионирование на пути dev → prod.


ПЯТЬ СТАДИЙ

lib/     ← Чужие компоненты (купленные, third-party)
  ↓
dev/     ← Наша разработка (в процессе)
  ↓
test/    ← На тестировании (готово к проверке)
  ↓
prod/    ← Production (стабильные версии)
  ↓
archive/ ← Архив (устаревшие, не используются)

lib/ — Библиотека (чужое)

Что: Внешние компоненты (купленные, скачанные, third-party)

Примеры:
- Купленные темы/модули CS-Cart
- Скачанные с маркетплейса
- Vendor библиотеки (если не через composer)

Правила:
- ❌ НЕ модифицировать код
- ✅ Обязательно: LICENSE, ORIGIN.md
- ✅ Версионирование: component-name-vX.Y.Z/

Структура:

lib/
└── vendor-module-v1.2.3/
    ├── LICENSE
    ├── ORIGIN.md       ← откуда взяли, когда, зачем
    └── src/

ORIGIN.md шаблон:

# Источник

- URL: https://marketplace.cs-cart.com/module-name
- Версия: 1.2.3
- Дата: 2026-01-15
- Лицензия: Commercial
- Цена: $99

## Зачем взяли
[описание задачи]

dev/ — Разработка (наше)

Что: Наши компоненты в процессе разработки

Статус: Активная разработка, нестабильно, НЕ для production

Версия: X.Y.Z-dev (например: 2.0.0-dev)

Примеры:

dev/
├── lider_import/       ← модуль импорта (в разработке)
└── new-feature/        ← новая фича

Критерии готовности:
- [ ] Код работает (основная функциональность)
- [ ] Unit тесты написаны
- [ ] README.md заполнен
- [ ] Нет критических багов

Когда:
- Новый компонент создаём
- Дорабатываем существующий
- Экспериментируем


test/ — Тестирование

Что: Готово к тестированию перед production

Статус: Функционально готово, проходит проверку

Версия: X.Y.Z-rc (release candidate, например: 2.0.0-rc1)

Примеры:

test/
├── feature-x-v1.0.0-rc1/
└── module-y-v2.5.0-rc2/

Критерии перехода dev → test:
- ✅ Все функции реализованы
- ✅ Unit тесты пройдены
- ✅ Документация готова
- ✅ Code review пройден
- ✅ Нет известных критических багов

Что происходит в test:
- Интеграционное тестирование
- Тестирование на staging окружении
- QA проверка
- UAT (User Acceptance Testing)

Длительность: 1-2 недели (зависит от сложности)


prod/ — Production

Что: Стабильные версии для production

Статус: Готово к использованию, стабильно, протестировано

Версия: X.Y.Z (без суффиксов, например: 2.0.0)

Примеры:

prod/
├── lider_import-v2.0.0/    ← текущая
├── lider_import-v1.5.0/    ← предыдущая (для rollback)
└── lider_import-v1.0.0/    ← старая (история)

Критерии перехода test → prod:
- ✅ Все тесты пройдены (unit + integration + e2e)
- ✅ Staging тестирование успешно
- ✅ Performance тесты пройдены
- ✅ Security audit (если критично)
- ✅ Документация актуальна
- ✅ Changelog заполнен

Правила:
- Версионирование обязательно: component-vX.Y.Z/
- Обратная совместимость (или major версия)
- Не удалять старые версии (минимум 2-3 последние)

Структура:

prod/
└── module-name-v2.0.0/
    ├── CHANGELOG.md        ← история изменений
    ├── README.md
    ├── src/
    └── tests/

archive/ — Архив

Что: Устаревшие компоненты (не используются >6 месяцев)

Статус: Deprecated, не используется, хранится для истории

Примеры:

archive/
├── old-import-v1.0.0/      ← старый модуль импорта
└── deprecated-theme/       ← устаревшая тема

Критерии перехода prod → archive:
- Не используется 6+ месяцев
- Заменён новой версией
- Deprecated официально

Правила:
- ❌ НЕ удалять (хранить для истории)
- ✅ Добавить DEPRECATED.md (причина, замена)

DEPRECATED.md шаблон:

# Deprecated

**Дата:** 2026-02-03
**Причина:** Заменён на lider_import v2.0.0
**Замена:** modules/prod/lider_import-v2.0.0/

## Что изменилось
[описание]

WORKFLOW

Полный жизненный цикл

1. РАЗРАБОТКА
   Создаём в dev/
   Пишем код, тесты, документацию
   Версия: 2.0.0-dev

    (код готов, тесты пройдены)

2. ТЕСТИРОВАНИЕ
   Переносим в test/
   Интеграционные тесты
   QA проверка
   Версия: 2.0.0-rc1

    (все тесты пройдены)

3. PRODUCTION
   Переносим в prod/
   Релиз
   Версия: 2.0.0

    (через 6+ месяцев без использования)

4. АРХИВ
   Переносим в archive/
   Добавляем DEPRECATED.md

Перенос между стадиями

dev → test:

# 1. Проверить критерии готовности
# 2. Обновить версию: 2.0.0-dev → 2.0.0-rc1
# 3. Переместить
cp -r modules/dev/component/ modules/test/component-v2.0.0-rc1/

test → prod:

# 1. Проверить все тесты
# 2. Обновить версию: 2.0.0-rc1 → 2.0.0
# 3. Создать CHANGELOG.md
# 4. Переместить
cp -r modules/test/component-v2.0.0-rc1/ modules/prod/component-v2.0.0/

prod → archive:

# 1. Убедиться что не используется
# 2. Создать DEPRECATED.md
# 3. Переместить
mv modules/prod/old-component-v1.0.0/ modules/archive/

ВЕРСИОНИРОВАНИЕ

Semantic Versioning

MAJOR.MINOR.PATCH-STAGE

2.0.0-dev       ← dev стадия
2.0.0-rc1       ← test стадия (release candidate)
2.0.0           ← prod стадия

MAJOR: Breaking changes (несовместимые изменения)
MINOR: New features (обратно совместимые)
PATCH: Bug fixes (исправления)
STAGE: dev, rc1, rc2, ... (для test)

Примеры

1.0.0-dev        в разработке
1.0.0-rc1        первый release candidate
1.0.0-rc2        второй (после фиксов)
1.0.0            релиз
1.0.1            hotfix
1.1.0            новая фича
2.0.0            breaking change

ПРИМЕНЕНИЕ

Для themes/

themes/
├── lib/                ← чужие темы
├── dev/                ← наши в разработке
│   └── lideravto/
├── test/               ← на тестировании
│   └── lideravto-v1.0.0-rc1/
├── prod/               ← готовые
│   ├── lideravto-v1.0.0/
│   └── lideravto-v0.9.0/  ← для rollback
└── archive/            ← устаревшие

Для modules/

modules/
├── lib/                ← купленные модули
├── dev/                ← наши в разработке
│   ├── lider_import/
│   └── lider_setup/
├── test/               ← на тестировании
├── prod/               ← готовые
│   └── lider_import-v2.0.0/
└── archive/            ← устаревшие

Для library/ (платформенный код)

library/
├── sandbox/             эксперименты (= dev)
├── beta/                на тестировании (= test)
├── stable/              для production (= prod)
└── archive/             deprecated

Примечание: В library/ используем другие названия (sandbox/beta/stable), но логика та же.


ПРАВИЛА

Общие

  1. Стадии обязательны для всех компонентов (themes, modules)
  2. Версионирование обязательно в test/ и prod/
  3. Не удалять старые версии (минимум 2-3 в prod/, всё в archive/)
  4. Документация обязательна (README, CHANGELOG)

Запрещено

Исключения

Hotfix (срочное исправление):

prod/component-v1.0.0/ (баг)
  ↓
dev/component/ (фикс)
  ↓
prod/component-v1.0.1/ (можно пропустить test если критично)

Критерии hotfix:
- Критический баг в production
- Простое исправление (1-2 строки)
- Срочность (downtime, потеря данных)


ПРОВЕРКА

Чеклист перед переносом

dev → test:
- [ ] Код завершён (все функции реализованы)
- [ ] Unit тесты написаны и пройдены
- [ ] README.md актуален
- [ ] Code review пройден
- [ ] Версия обновлена (X.Y.Z-dev → X.Y.Z-rc1)

test → prod:
- [ ] Интеграционные тесты пройдены
- [ ] Staging тестирование успешно
- [ ] QA проверка пройдена
- [ ] CHANGELOG.md заполнен
- [ ] Документация актуальна
- [ ] Версия обновлена (X.Y.Z-rc1 → X.Y.Z)

prod → archive:
- [ ] Не используется 6+ месяцев
- [ ] Есть замена (или не нужен)
- [ ] DEPRECATED.md создан
- [ ] Команда уведомлена


ПРИМЕРЫ

Новый модуль (с нуля)

# 1. Создать в dev/
mkdir modules/dev/new-module
cd modules/dev/new-module

# 2. Разработка
# ... пишем код, тесты, README ...
# Версия в коде: 1.0.0-dev

# 3. Готово → перенос в test/
cp -r modules/dev/new-module/ modules/test/new-module-v1.0.0-rc1/
# Обновить версию в коде: 1.0.0-rc1

# 4. Тестирование (1-2 недели)
# ... staging тесты, QA ...

# 5. Готово → перенос в prod/
cp -r modules/test/new-module-v1.0.0-rc1/ modules/prod/new-module-v1.0.0/
# Обновить версию: 1.0.0
# Создать CHANGELOG.md

# 6. Через 6+ месяцев если не используется → archive/
mv modules/prod/new-module-v1.0.0/ modules/archive/
# Создать DEPRECATED.md

Обновление существующего

# 1. prod/component-v1.5.0/ работает
# 2. Нужна новая фича → dev/
cp -r modules/prod/component-v1.5.0/ modules/dev/component/
# Версия: 1.6.0-dev

# 3. Разработка фичи
# ...

# 4. Готово → test/
cp -r modules/dev/component/ modules/test/component-v1.6.0-rc1/

# 5. Тестирование
# ...

# 6. Готово → prod/
cp -r modules/test/component-v1.6.0-rc1/ modules/prod/component-v1.6.0/
# Теперь в prod/:
#   - component-v1.6.0/ (новая)
#   - component-v1.5.0/ (старая, для rollback)

ССЫЛКИ


Версия: 1.0.0
Дата: 2026-02-03