architect/arh/operations/tickets/TICKET-004-platform-restructure.md

TICKET-004: Реструктуризация платформы

Дата: 2025-12-22
Обновлено: 2026-02-19
Статус: IN_PROGRESS
Приоритет: P0
Тип: architecture


КОНТЕКСТ

Сессия 22.12.2025 — обсуждение фундаментальной реорганизации платформы.


КЛЮЧЕВЫЕ РЕШЕНИЯ (принятые)

1. ТРИ КОНЦЕПЦИИ (разделены)

ЭКОСИСТЕМА    = Бизнес-структура (логическая) — ПОТОМ
ПЛАТФОРМА     = Инструменты для создания     — СЕЙЧАС
WORKSPACE     = Физическое хранение (папки)  — СЕЙЧАС
DATASPACE     = Хранение данных (S3)         — УЖЕ ЕСТЬ

2. ПРОЕКТ = УНИВЕРСАЛЬНАЯ ЕДИНИЦА

ВСЁ — это проекты.
Любая папка = сущность = проект.
Разница только в ТИПЕ.

3. ПЛАТФОРМА АВТОМАТИЗИРУЕТ

Платформа автоматически применяет ПРОЦЕССЫ ко всем проектам:
- Разворачивает структуру
- Ведёт статус
- Оформляет документы
- Управляет связями

4. КАНОНИЧЕСКОЕ РАЗМЕЩЕНИЕ

Каждый ТИП сущности имеет свою каноническую папку.
В других местах — только ССЫЛКИ (links).

Пример:
- sites/pirotehnika.spb.ru/     ← КАНОНИЧЕСКИ (код здесь)
- businesses/pirotehnika/retail/site → ссылка

5. СТРУКТУРА WORKSPACE

WORKSPACE/
├── PLATFORM/     ← Только элементы платформы
└── PROJECTS/     ← Только элементы проектов

ОТКРЫТЫЕ ВОПРОСЫ (не решены)

Q1: Группировка типов проектов

Какие группы на верхнем уровне PROJECTS/?

Обсуждались варианты:
- По природе: organizations, products, solutions
- По цели: personal, social, commercial
- По владению: own, shared, clients
- Смешанно

Примеры типов:
- business, company, partnership, group
- product, saas, service-product
- site, service, api, app, bot
- client-project, consulting
- experiment, research, initiative
- hobby, learning, opensource, community

Q2: Иерархия внутри групп

Сколько уровней вложенности? Как группировать?

Q3: Терминология


ТЕКУЩЕЕ СОСТОЯНИЕ (обновлено 2025-12-23)

$WORKSPACE/
├── architect/           Методология (норм)
├── system/              Платформа (норм)
├── infra/               Инфраструктура (норм)
├── library/             Библиотека (норм)
└── projects/            РЕОРГАНИЗОВАНО
    ├── my/              Личные проекты (пусто)
    └── org/             Организации
        ├── pirotehnika/     type: business
        ├── lideravto/       type: business
        ├── mcrm/            type: product
        ├── seller1/         type: product
        ├── pro1/            type: platform
        ├── content-factory/  ⚠️ возможно  library/
        ├── drupal-lab/       ⚠️ возможно  library/
        └── ideal-shop/       ⚠️ возможно  library/

Прогресс:
- ✅ Проекты типизированы (type/purpose в index.yaml)
- ✅ L1-SERVICE → projects/org/pirotehnika/app/pim/
- ✅ Создана структура my/org

Открытый вопрос:
- ideal-shop, drupal-lab, content-factory — это ПРИЛОЖЕНИЯ (платформа) или РЕШЕНИЯ (проекты)?
- Если приложения → переместить в library/applications/


ВАЖНЫЕ МЫСЛИ ИЗ ОБСУЖДЕНИЯ

Мысль 1: Проекты существуют в реальности

Проекты делаются в реальной жизни, а в платформе мы их либо ведём и проектируем, или разрабатываем для них приложения/сервисы.

Мысль 2: Решения — это ИТ-проекты

Есть термин "решения" (solutions) — это ИТ-проекты (код).

Мысль 3: Любая папка — проект

Любая папка — это сущность, проект. Все уровни — это проекты!

Мысль 4: Автоматизация через платформу

Платформа/система автоматически ко всем уровням применяет процессы работы с проектом.

Мысль 5: Канонические места + ссылки

Любая сущность имеет свою каноническую папку, в других местах лишь links/ярлыки/обёртки или наследование классов.

Мысль 6: Цели проектов

Проекты бывают: личные, социальные, коммерческие.

Мысль 7: Граф vs Дерево (2025-12-23)

Бинарное дерево (папки) — это попытка реализовать многомерный граф на плоскости.

Решение:
- Физическая структура (папки) = ОДИН срез (по владельцу: my/org)
- Логическая структура (граф) = в метаданных (index.yaml → links:)
- Навигация = запросы к графу, не обход папок

Мысль 8: Платформа vs Проекты (2025-12-23)

Приложения (generic code) — это платформа. Решения (configured) — это проекты.

ПЛАТФОРМА                    ПРОЕКТЫ
library/applications/        projects/org/
├── ideal-shop/             pirotehnika/site (экземпляр)
├── fastapi-admin/          pro1 (экземпляр)
└── drupal-site/            pirofey.ru (экземпляр)

Мысль 9: Структура library/ (2025-12-23) → ОБНОВЛЕНО

12 классов артефактов (см. architect/standards/ARTIFACT_CLASSES.md):

library/
├── _draft/                     Черновики
├── _beta/                      Бета

├── functions/                  3. Функции
   ├── parsers/
   ├── formatters/
   ├── validators/
   ├── calculators/
   └── generators/

├── connectors/                 4-5. Коннекторы
   ├── api/                    4. API-коннекторы (ozon, telegram, 1c)
   └── data/                   5. Data-коннекторы (postgres, xlsx, s3)

├── extensions/                 6. Расширения
   ├── cms/{platform}/
   └── erp/{platform}/

├── integrations/               7. Интеграции

├── services/                   8. Сервисы

├── applications/               9. Приложения

└── configurations/             10. Конфигурации

Lifecycle:

_draft/ → _beta/ → {connectors|extensions|applications}/ → published

Связь с проектом:

# projects/org/lideravto/site/modules.yaml
modules:
  - name: smart_images
    source: library/extensions/cs-cart/smart_images
    version: v2.1
    config: {...}

В library/ — разработка (все версии). В проект — рабочая версия (link + config).

Мысль 10: Исходники vs Релизы (2025-12-23)

Код который мы грузим — это не часть платформы, он не нужен в git.

Решение:

$WORKSPACE/library/           $DATASPACE/releases/
(git, исходники)              (не git, сборки)
───────────────────           ────────────────────
extensions/cms/cs-cart/       extensions/cms/cs-cart/
└── smart_images/             └── smart_images/
    └── src/     build          ├── v2.0.zip
                                  ├── v2.1.zip
                                  └── latest.zip

СВЯЗАННЫЕ ДОКУМЕНТЫ


МИНИМАЛЬНЫЙ ПЛАН (предложение)

Фаза 0: Зафиксировать текущее (не ломать)

  1. Оставить projects/ как есть
  2. Добавить type в index.yaml каждого проекта
  3. Не перемещать файлы

Фаза 1: Создать структуру PLATFORM/

PLATFORM/   (или оставить как есть: architect/, system/, library/)

Фаза 2: Типизировать проекты

# projects/pirotehnika/index.yaml
type: business
purpose: commercial

# projects/mcrm/index.yaml
type: product
purpose: commercial

Фаза 3: Позже — реорганизация по группам

Когда будет ясность с классификацией.


ДЕЙСТВИЯ

Выполнено (2025-12-23)

Выполнено (2026-02-19) — Реформа architect/

Следующие действия (приоритет)

См. MIGRATION_PLAN_12_CLASSES.md — 13 шагов:

  1. [ ] Удалить library/_draft, library/_beta
  2. [ ] Создать структуру папок (api/, data/, device/, etc.)
  3. [ ] Перенести system/connectors/ → library/connectors/
  4. [ ] Перенести system/functions/ → library/functions/
  5. [ ] Перенести system/adapters/ → library/functions/parsers/
  6. [ ] Перенести system/stores/ → library/connectors/data/
  7. [ ] Перенести system/drivers/ → library/connectors/device/
  8. [ ] Очистить infra/ от не-инфры
  9. [ ] Обновить импорты в коде
  10. [ ] Обновить документацию (18 файлов)
  11. [ ] Решить по content-factory/drupal-lab/ideal-shop

Отложено


ССЫЛКИ НА СЕССИЮ

Сессия: 2025-12-22
Тема: Реорганизация платформы, типы проектов