type: standard
aspect: lifecycle
title: "Стадии кода (Code Stages)"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.0.0
Дата: 2026-02-03
Статус: ОБЯЗАТЕЛЬНО
ОДИН КОД — НЕСКОЛЬКО СТАДИЙ
От разработки до production через тестирование
Зачем: Контроль качества и версионирование на пути dev → prod.
lib/ ← Чужие компоненты (купленные, third-party)
↓
dev/ ← Наша разработка (в процессе)
↓
test/ ← На тестировании (готово к проверке)
↓
prod/ ← Production (стабильные версии)
↓
archive/ ← Архив (устаревшие, не используются)
Что: Внешние компоненты (купленные, скачанные, 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
## Зачем взяли
[описание задачи]
Что: Наши компоненты в процессе разработки
Статус: Активная разработка, нестабильно, НЕ для production
Версия: X.Y.Z-dev (например: 2.0.0-dev)
Примеры:
dev/
├── lider_import/ ← модуль импорта (в разработке)
└── new-feature/ ← новая фича
Критерии готовности:
- [ ] Код работает (основная функциональность)
- [ ] Unit тесты написаны
- [ ] README.md заполнен
- [ ] Нет критических багов
Когда:
- Новый компонент создаём
- Дорабатываем существующий
- Экспериментируем
Что: Готово к тестированию перед 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 недели (зависит от сложности)
Что: Стабильные версии для 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/
Что: Устаревшие компоненты (не используются >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/
## Что изменилось
[описание]
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/
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/
├── lib/ ← чужие темы
├── dev/ ← наши в разработке
│ └── lideravto/
├── test/ ← на тестировании
│ └── lideravto-v1.0.0-rc1/
├── prod/ ← готовые
│ ├── lideravto-v1.0.0/
│ └── lideravto-v0.9.0/ ← для rollback
└── archive/ ← устаревшие
modules/
├── lib/ ← купленные модули
├── dev/ ← наши в разработке
│ ├── lider_import/
│ └── lider_setup/
├── test/ ← на тестировании
├── prod/ ← готовые
│ └── lider_import-v2.0.0/
└── archive/ ← устаревшие
library/
├── sandbox/ ← эксперименты (= dev)
├── beta/ ← на тестировании (= test)
├── stable/ ← для production (= prod)
└── archive/ ← deprecated
Примечание: В library/ используем другие названия (sandbox/beta/stable), но логика та же.
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