architect/standards/arh/it-solution-development.md

type: standard
aspect: guidance
title: "Процесс разработки IT решения (IT Solution Development)"
version: 1.0.0
date: 2026-02-19
status: active


Процесс разработки IT решения (IT Solution Development)

Версия: 1.0.0
Дата: 2026-02-03
Статус: СТАНДАРТ


НАЗНАЧЕНИЕ

Практический процесс разработки IT решения с пониманием:
- Где создаётся код
- Куда перекладывается при тестировании
- Как попадает в production
- Где документация на каждом этапе
- Когда обновлять index.py

Применяется к: CS-Cart, Drupal, Next.js, любому IT решению


СВЯЗИ СО СТАНДАРТАМИ

Стандарт Что даёт Применение
CODE_STAGES.md Теория стадий кода Этот документ — применение на практике
SOLUTION_STRUCTURE.md Структура решения Где создавать папки
INDEX_PY.md Формат index.py Когда обновлять
PROJECT_BOOTSTRAP.md Инициализация проекта Техническая подготовка
PROJECT_START.md Планирование проекта Перед разработкой

ПРОЦЕСС (7 фаз)

ФАЗА 1: СОЗДАНИЕ СТРУКТУРЫ     ← Один раз
   ↓
ФАЗА 2: РАЗРАБОТКА (dev/)      ← Активная работа
   ↓
ФАЗА 3: ТЕСТИРОВАНИЕ (test/)   ← Проверка
   ↓
ФАЗА 4: PRODUCTION (prod/)      ← Релиз
   ↓
ФАЗА 5: ЭКСПЛУАТАЦИЯ           ← Использование
   ↓
ФАЗА 6: ОБНОВЛЕНИЕ             ← Новая версия (цикл)
   ↓
ФАЗА 7: АРХИВИРОВАНИЕ          ← Вывод из эксплуатации

ФАЗА 1: СОЗДАНИЕ СТРУКТУРЫ

Цель

Создать структуру решения один раз перед началом разработки.

Что создаётся

# Для CS-Cart решения
it/web/cscart/
├── index.py             Индекс решения (создать)
├── CLAUDE.md            Контекст (создать)
├── README.md            Описание (создать)
│
├── app/                 Дистрибутив платформы
│   └── 4.19.1/         (скопировать CS-Cart)
│
├── themes/              Темы со стадиями
│   ├── lib/            (создать пустые)   ├── dev/
│   ├── test/
│   ├── prod/
│   └── archive/
│
├── modules/             Модули со стадиями
│   ├── lib/            (создать пустые)   ├── dev/
│   ├── test/
│   ├── prod/
│   └── archive/
│
├── sites/               Установки сайтов
│   └── (создать при развёртывании)
│
├── infra/               Инфраструктура решения
│   ├── nginx/
│   ├── db/
│      ├── dev/
│      └── prod/
│   ├── cron/
│   ├── ssl/
│   └── backup/
│
├── lib/                 Vendor библиотеки
│   └── composer/
│
└── docs/                Документация решения (создать)
    ├── README.md
    ├── architecture/
    ├── installation/
    ├── development/
    └── user-guide/

Команды

# 1. Создать структуру
cd it/web/
mkdir -p cscart/{app,themes/{lib,dev,test,prod,archive},modules/{lib,dev,test,prod,archive},sites,infra/{nginx,db/{dev,prod},cron,ssl,backup},lib/composer,docs/{architecture,installation,development,user-guide}}

# 2. Создать README в пустых папках
for dir in themes/{lib,dev,test,prod,archive} modules/{lib,dev,test,prod,archive}; do
  echo "# $(basename $dir)" > cscart/$dir/README.md
done

# 3. Создать index.py (см. INDEX_PY.md)
vim cscart/index.py

# 4. Создать CLAUDE.md
vim cscart/CLAUDE.md

# 5. Создать docs/README.md
vim cscart/docs/README.md

Критерии готовности

Длительность

15-20 минут (механическое создание)


ФАЗА 2: РАЗРАБОТКА (dev/)

Цель

Создать новый модуль/тему в dev/ и разработать функционал.

Где создаётся

modules/dev/{module_name}/     ← Наши модули
themes/dev/{theme_name}/       ← Наши темы

Алгоритм

2.1. Создание модуля

# 1. Создать структуру модуля
cd modules/dev/
mkdir -p lider_import/{docs,schemas,var/langs/ru}

# 2. Создать базовые файлы
touch lider_import/addon.xml
touch lider_import/init.php
touch lider_import/func.php

# 3. Создать документацию модуля
vim lider_import/docs/README.md
vim lider_import/docs/SPEC.md
vim lider_import/docs/USAGE.md

2.2. Разработка функционала

# Писать код в dev/
vim modules/dev/lider_import/init.php
vim modules/dev/lider_import/func.php
vim modules/dev/lider_import/schemas/advanced_import/products.post.php

2.3. Версионирование в коде

// modules/dev/lider_import/addon.xml
<?xml version="1.0"?>
<addon>
    <id>lider_import</id>
    <version>2.0.0-dev</version>
    <status>active</status>
</addon>

2.4. Тестирование в dev окружении

# Подключить к dev сайту
ln -s /путь/к/modules/dev/lider_import /var/www/sites/work.lideravto.ru/app/addons/lider_import

# Тестировать функционал
# Править баги
# Писать тесты

2.5. Обновление index.py

# cscart/index.py
INDEX = {
    # ...

    "components": {
        "modules": {
            "dev": [
                {
                    "name": "lider_import",
                    "version": "2.0.0-dev",
                    "status": "active",
                    "path": "modules/dev/lider_import/"
                }
            ]
        }
    },

    "sites": {
        "work.lideravto.ru": {
            "env": "dev",
            "components": {
                "modules": ["dev/lider_import"]  # используем dev версию
            }
        }
    }
}

Документация в dev

modules/dev/lider_import/docs/
├── README.mdОбзор модуля (что делает)
├── SPEC.mdТЗ модуля (требования)
├── USAGE.mdКак использовать
├── API.mdAPI (если есть)
└── CHANGELOG.mdИстория (начать вести)

Критерии готовности dev → test

Длительность

Зависит от сложности модуля (от нескольких часов до недель)


ФАЗА 3: ТЕСТИРОВАНИЕ (test/)

Цель

Перенести модуль в test/ для интеграционного тестирования перед production.

Алгоритм

3.1. Обновить версию в коде

// Было: 2.0.0-dev
// Стало: 2.0.0-rc1

// modules/dev/lider_import/addon.xml
<version>2.0.0-rc1</version>

3.2. Обновить CHANGELOG

# modules/dev/lider_import/docs/CHANGELOG.md

## [2.0.0-rc1] - 2026-02-03

### Added
- Импорт товаров из BAZON API
- Обработка категорий

### Fixed
- Баг с дублированием товаров

3.3. Скопировать в test/

# Копировать (НЕ перемещать!) dev → test
cp -r modules/dev/lider_import/ modules/test/lider_import-v2.0.0-rc1/

Почему копировать, не перемещать:
- dev/ остаётся для дальнейшей разработки (hotfix, новые фичи)
- test/ независимая копия для тестирования

3.4. Обновить index.py

# cscart/index.py
INDEX = {
    "components": {
        "modules": {
            "dev": [
                {"name": "lider_import", "version": "2.0.0-dev", "status": "active"}
            ],
            "test": [
                {"name": "lider_import", "version": "2.0.0-rc1", "status": "testing"}
            ]
        }
    }
}

3.5. Развернуть на staging окружении

# Создать staging сайт (если нет)
mkdir sites/staging.lideravto.ru/
cp sites/work.lideravto.ru/config.local.php sites/staging.lideravto.ru/

# Подключить test версию модуля
ln -s /путь/к/modules/test/lider_import-v2.0.0-rc1/ sites/staging.lideravto.ru/app/addons/lider_import

# Настроить nginx
vim infra/nginx/staging.lideravto.ru.conf
nginx -t && systemctl reload nginx

# Обновить index.py
# cscart/index.py
"sites": {
    "staging.lideravto.ru": {
        "env": "test",
        "url": "https://staging.lideravto.ru",
        "components": {
            "modules": ["test/lider_import-v2.0.0-rc1"]
        }
    }
}

3.6. Тестирование

# Интеграционные тесты
# UAT (User Acceptance Testing)
# Performance тесты
# Security audit (если критично)

Если нашли баги:

# Вариант 1: Hotfix в test/
# (если баг простой)
vim modules/test/lider_import-v2.0.0-rc1/func.php
# Обновить версию: rc1 → rc2

# Вариант 2: Вернуть в dev/
# (если баг критический, требует переработки)
rm -rf modules/test/lider_import-v2.0.0-rc1/
# Исправить в dev/
# Повторить ФАЗА 3 с новой версией rc2

Критерии готовности test → prod

Длительность

1-2 недели (зависит от сложности и количества багов)


ФАЗА 4: PRODUCTION (prod/)

Цель

Перенести модуль в prod/ и развернуть на production сайте.

Алгоритм

4.1. Обновить версию

// Было: 2.0.0-rc1
// Стало: 2.0.0

// modules/test/lider_import-v2.0.0-rc1/addon.xml
<version>2.0.0</version>

4.2. Финализировать CHANGELOG

# modules/test/lider_import-v2.0.0-rc1/docs/CHANGELOG.md

## [2.0.0] - 2026-02-03

### Added
- Импорт товаров из BAZON API
- Обработка категорий
- Синхронизация остатков

### Changed
- Улучшена производительность импорта (×3 быстрее)

### Fixed
- Баг с дублированием товаров
- Ошибка при пустых категориях

4.3. Скопировать в prod/

# Скопировать test → prod с новым именем
cp -r modules/test/lider_import-v2.0.0-rc1/ modules/prod/lider_import-v2.0.0/

# В новой папке обновить версию в addon.xml: 2.0.0-rc1 → 2.0.0
vim modules/prod/lider_import-v2.0.0/addon.xml

4.4. Обновить index.py

# cscart/index.py
INDEX = {
    "components": {
        "modules": {
            "dev": [
                {"name": "lider_import", "version": "2.1.0-dev", "status": "active"}
            ],
            "test": [
                # можно очистить или оставить для истории
            ],
            "prod": [
                {"name": "lider_import", "version": "2.0.0", "status": "stable"},
                {"name": "lider_import", "version": "1.5.0", "status": "stable"}  # старая версия для rollback
            ]
        }
    },

    "sites": {
        "lideravto.ru": {
            "env": "prod",
            "url": "https://lideravto.ru",
            "components": {
                "modules": ["prod/lider_import-v2.0.0"]
            }
        }
    }
}

4.5. Развернуть на production

# Бэкап перед деплоем (ОБЯЗАТЕЛЬНО!)
bash /opt/scripts/backup.sh cscart

# Подключить prod версию
ln -sf /путь/к/modules/prod/lider_import-v2.0.0/ sites/lideravto.ru/app/addons/lider_import

# Проверить работу
curl https://lideravto.ru/admin.php?dispatch=addons.manage

4.6. Проверка после деплоя

# Проверить модуль активен
# Проверить основной функционал работает
# Проверить логи на ошибки
tail -f sites/lideravto.ru/var/log/*.log

# Мониторинг (первые 24 часа)

Откат (если что-то пошло не так)

# Переключиться на старую версию
ln -sf /путь/к/modules/prod/lider_import-v1.5.0/ sites/lideravto.ru/app/addons/lider_import

# Обновить index.py (вернуть старую версию в components)

Критерии успешного релиза

Длительность

30 минут - 1 час (деплой + проверка)


ФАЗА 5: ЭКСПЛУАТАЦИЯ

Цель

Использование модуля в production, мониторинг, поддержка.

Что происходит

# Мониторинг работы
# Сбор метрик
# Обработка инцидентов
# Поддержка пользователей

Где документация

modules/prod/lider_import-v2.0.0/docs/
├── README.mdОбзор модуля
├── USAGE.mdИнструкция пользователя
├── TROUBLESHOOTING.mdРешение проблем
└── FAQ.mdЧастые вопросы

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

Если нашли критический баг в production:

# 1. Исправить в dev/
vim modules/dev/lider_import/func.php
# Обновить версию: 2.0.0-dev → 2.0.1-dev

# 2. Тесты
# ...

# 3. Можно пропустить test/ если критично
cp -r modules/dev/lider_import/ modules/prod/lider_import-v2.0.1/
# Обновить версию: 2.0.1-dev → 2.0.1

# 4. Деплой
ln -sf /путь/к/modules/prod/lider_import-v2.0.1/ sites/lideravto.ru/app/addons/lider_import

# 5. Обновить index.py

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

Длительность

Неограниченно (пока модуль используется)


ФАЗА 6: ОБНОВЛЕНИЕ

Цель

Разработать новую версию модуля (новые фичи, улучшения).

Алгоритм

6.1. Начать новую версию в dev/

# Скопировать текущую prod версию в dev/
cp -r modules/prod/lider_import-v2.0.0/ modules/dev/lider_import/

# Обновить версию
vim modules/dev/lider_import/addon.xml
# 2.0.0 → 2.1.0-dev (minor — новые фичи)
# или 3.0.0-dev (major — breaking changes)

# Начать разработку
vim modules/dev/lider_import/...

6.2. Повторить цикл

ФАЗА 2: Разработка (dev/)
   ↓
ФАЗА 3: Тестирование (test/)
   ↓
ФАЗА 4: Production (prod/)

6.3. Результат

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

Правила версионирования

Semantic Versioning (MAJOR.MINOR.PATCH):

2.0.0  2.0.1    PATCH: hotfix, исправление бага
2.0.0  2.1.0    MINOR: новая фича (обратно совместимо)
2.0.0  3.0.0    MAJOR: breaking change (несовместимо)

Примеры:

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

Длительность

Зависит от масштаба изменений (от дней до месяцев)


ФАЗА 7: АРХИВИРОВАНИЕ

Цель

Перенести устаревший модуль в archive/ когда он больше не используется.

Критерии архивирования

Алгоритм

7.1. Создать DEPRECATED.md

# modules/prod/lider_import-v1.0.0/DEPRECATED.md

# DEPRECATED

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

## Что изменилось

- Новая архитектура (микросервисы)
- API изменён (несовместимо)
- Производительность ×10

## Миграция

См. modules/prod/lider_import-v3.0.0/docs/MIGRATION.md

7.2. Переместить в archive/

mv modules/prod/lider_import-v1.0.0/ modules/archive/

7.3. Обновить index.py

# cscart/index.py
INDEX = {
    "components": {
        "modules": {
            "prod": [
                {"name": "lider_import", "version": "3.0.0", "status": "stable"},
                {"name": "lider_import", "version": "2.5.0", "status": "stable"}
            ],
            "archive": [
                {"name": "lider_import", "version": "1.0.0", "status": "deprecated", "reason": "Заменён v3.0.0"}
            ]
        }
    }
}

Правила archive/

Длительность

5-10 минут


МАТРИЦА: ФАЗЫ × ФАЙЛЫ

Фаза Где код Где документация index.py Версия
1. Структура docs/README.md Создать
2. Разработка modules/dev/ modules/dev/*/docs/ Обновить (dev) X.Y.Z-dev
3. Тестирование modules/test/ modules/test/*/docs/ Обновить (test) X.Y.Z-rc1
4. Production modules/prod/ modules/prod/*/docs/ Обновить (prod) X.Y.Z
5. Эксплуатация modules/prod/ + TROUBLESHOOTING.md X.Y.Z
6. Обновление modules/dev/ modules/dev/*/docs/ Обновить (dev) X+1.Y.Z-dev
7. Архив modules/archive/ + DEPRECATED.md Обновить (archive) X.Y.Z

ПРИМЕРЫ КОМАНД

Создать новый модуль

# 1. Создать структуру
mkdir -p modules/dev/my_module/{docs,schemas}
cd modules/dev/my_module/

# 2. Создать базовые файлы
cat > addon.xml <<'EOF'
<?xml version="1.0"?>
<addon>
    <id>my_module</id>
    <version>1.0.0-dev</version>
    <name>My Module</name>
</addon>
EOF

touch init.php func.php

# 3. Создать документацию
cat > docs/README.md <<'EOF'
# My Module

Описание модуля.
EOF

cat > docs/SPEC.md <<'EOF'
# Спецификация

Требования к модулю.
EOF

cat > docs/USAGE.md <<'EOF'
# Использование

Как использовать модуль.
EOF

cat > docs/CHANGELOG.md <<'EOF'
# Changelog

## [1.0.0-dev] - UNRELEASED

### Added
- Начальная разработка
EOF

# 4. Обновить index.py
vim ../../index.py

Перенести dev → test

# 1. Обновить версию в коде
vim modules/dev/my_module/addon.xml
# 1.0.0-dev → 1.0.0-rc1

# 2. Обновить CHANGELOG
vim modules/dev/my_module/docs/CHANGELOG.md

# 3. Скопировать
cp -r modules/dev/my_module/ modules/test/my_module-v1.0.0-rc1/

# 4. Обновить index.py
vim index.py

Перенести test → prod

# 1. Обновить версию в коде
vim modules/test/my_module-v1.0.0-rc1/addon.xml
# 1.0.0-rc1 → 1.0.0

# 2. Финализировать CHANGELOG
vim modules/test/my_module-v1.0.0-rc1/docs/CHANGELOG.md

# 3. Скопировать
cp -r modules/test/my_module-v1.0.0-rc1/ modules/prod/my_module-v1.0.0/

# 4. Обновить index.py
vim index.py

# 5. Деплой
bash /opt/scripts/backup.sh cscart
ln -sf $(pwd)/modules/prod/my_module-v1.0.0/ sites/lideravto.ru/app/addons/my_module

Архивировать

# 1. Создать DEPRECATED.md
cat > modules/prod/my_module-v1.0.0/DEPRECATED.md <<'EOF'
# DEPRECATED

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

# 2. Переместить
mv modules/prod/my_module-v1.0.0/ modules/archive/

# 3. Обновить index.py
vim index.py

ЧЕКЛИСТ РАЗРАБОТКИ

Перед началом (Фаза 1)

Разработка (Фаза 2)

Тестирование (Фаза 3)

Production (Фаза 4)

Архивирование (Фаза 7)


ЧАСТЫЕ ОШИБКИ

❌ Что НЕ делать

❌ Разрабатывать напрямую в prod/
   → Потеря истории, нет возможности rollback

❌ Пропускать test/ фазу
   → Баги попадают в production

❌ Удалять старые версии из prod/
   → Нет возможности rollback

❌ Не обновлять index.py
   → Нет понимания какие версии где используются

❌ Не писать CHANGELOG
   → Не понятно что изменилось между версиями

❌ Использовать одно имя папки для разных версий
   → Путаница, конфликты

❌ Не создавать документацию
   → Никто не понимает как использовать модуль

✅ Что делать

✅ Всегда разрабатывать в dev/
✅ Всегда проходить через test/ перед prod/
✅ Хранить минимум 2-3 версии в prod/ для rollback
✅ Обновлять index.py после каждого переноса
✅ Вести CHANGELOG с первой версии
✅ Версионировать папки: module-vX.Y.Z
✅ Документировать каждый модуль (README, SPEC, USAGE)
✅ Делать бэкап перед деплоем в production

СВЯЗЬ С ДРУГИМИ СТАНДАРТАМИ

Стадии кода (CODE_STAGES.md)

Этот стандарт — практическое применение теории стадий:

Теория (CODE_STAGES.md) Практика (этот документ)
lib/ — чужие компоненты Загрузить купленный модуль → modules/lib/
dev/ — разработка ФАЗА 2: Создать модуль в dev/ → разработать
test/ — тестирование ФАЗА 3: Скопировать dev/ → test/ → тестировать
prod/ — production ФАЗА 4: Скопировать test/ → prod/ → развернуть
archive/ — устаревшие ФАЗА 7: Переместить prod/ → archive/

Структура решения (SOLUTION_STRUCTURE.md)

Где создавать папки:

Компонент Где в структуре
Модули modules/{lib,dev,test,prod,archive}/
Темы themes/{lib,dev,test,prod,archive}/
Сайты sites/{domain}/
Инфраструктура infra/{nginx,db,cron,ssl,backup}/
Документация решения docs/{architecture,installation,development}/

index.py (INDEX_PY.md)

Когда обновлять:

Фаза Что обновить в index.py
1. Структура Создать базовый index.py с metadata + dependencies
2. Разработка Добавить компонент в components.modules.dev[]
3. Тестирование Добавить в components.modules.test[]
4. Production Добавить в components.modules.prod[] + обновить sites[].components.modules[]
7. Архивирование Переместить в components.modules.archive[]

ВРЕМЯ НА ФАЗЫ

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

ФАЗА 1: Структура       15-20 минут    (один раз)
ФАЗА 2: Разработка      1-4 недели     (зависит от сложности)
ФАЗА 3: Тестирование    1-2 недели     (интеграция + UAT)
ФАЗА 4: Production      30-60 минут    (деплой + проверка)
ФАЗА 5: Эксплуатация    неограниченно  (пока используется)
ФАЗА 6: Обновление      1-3 недели     (зависит от масштаба)
ФАЗА 7: Архивирование   5-10 минут

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

ФАЗА 2: Исправление     10-30 минут    (в dev/)
ФАЗА 3: Тестирование    пропустить     (если критично)
ФАЗА 4: Production      15-20 минут    (деплой)

ССЫЛКИ


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