АРХ - NODEDC PLATFORM: каркас платформенного репозитория

This commit is contained in:
Codex
2026-05-04 10:02:18 +03:00
commit 0f89c4d126
12 changed files with 755 additions and 0 deletions
+106
View File
@@ -0,0 +1,106 @@
# Discovery Report: NODE.DC Platform
Дата: 2026-05-04
## Источники
- Базовое ТЗ: `/Users/dcconstructions/Downloads/mnt/NODEDC/DOC/BASE/tz_codex_platform_authentik_launcher_plane.md`
- Краткое ТЗ: `/Users/dcconstructions/Downloads/mnt/NODEDC/DOC/BASE/nodedc_auth.md`
- Launcher repo: `/Users/dcconstructions/Downloads/mnt/data/nodedc_launcher`
- Task Manager repo: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER`
## Workspace
`/Users/dcconstructions/Downloads/mnt/NODEDC` используется как внешний workspace-корень для платформенной работы.
Текущая папка `NODEDC` до нулевого этапа содержала только базовые документы в `DOC/BASE`. Отдельного git-репозитория в этой папке нет.
## Launcher
Путь: `/Users/dcconstructions/Downloads/mnt/data/nodedc_launcher`
Факты discovery:
- отдельный git-репозиторий;
- Vite/React приложение;
- основной entrypoint: `src/main.tsx`;
- команды из `package.json`: `npm run dev`, `npm run build`, `npm run preview`, `npm run test`;
- backend слоя в текущем Launcher не найдено;
- значит OIDC/session handling, Authentik service token, app registry и audit log нельзя хранить только во frontend.
Минимальный вывод: для production-like auth нужен Launcher backend или BFF слой.
## Task Manager / Plane
Путь: `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER`
Факты discovery:
- отдельный git-репозиторий;
- self-host runtime лежит в `plane-app`;
- локальный fork исходников лежит в `plane-src`;
- Plane CE self-host запущен через Docker;
- локальный URL стенда: `http://localhost:8090`;
- текущий compose/env: `plane-app/docker-compose.yaml` и `plane-app/plane.env`;
- текущий fork Plane: `plane-src`, версия `1.3.0`;
- основной runtime-контейнер API: `plane-app-api-1`;
- активные контейнеры Plane: web, proxy, api, worker, beat-worker, db, redis, minio, mq, admin, space, live.
Текущий workspace в Plane:
- slug: `nodedc`;
- name: `NODE DC`;
- owner: `dcctouch@gmail.com`;
- codex user: `codex@nodedc.local`.
Существующие проекты в workspace `nodedc` на момент discovery:
- `NODEDCLAUN` / `NODEDC LAUNCHER`
- `CODEX` / `DCTM-WT-CODEX`
- `NODEDCTASK` / `NODEDC TASKMANAGER`
- `MGR` / `Менеджмент`
- `BUH` / `Бухгалтерия`
## NDC details в карточках
Канон карточек описан в `/Users/dcconstructions/Downloads/mnt/data/dc_taskmanager/NODEDC_TASKMANAGER/AGENTS.md`.
Структурированные блоки карточки хранятся в `Issue.detail_layout` под ключом:
```text
nodedc_structured_blocks
```
Типы блоков:
- `text`: текстовый блок с `title` и `body`;
- `checker`: чекер с `title` и пунктами `items`.
Frontend отображает эти блоки через компоненты:
- `plane-src/apps/web/core/components/issues/issue-detail-widgets/structured-content.helpers.ts`
- `plane-src/apps/web/core/components/issues/issue-detail-widgets/structured-content-blocks.tsx`
## Решение по переносам
Физически переносить Launcher и Task Manager внутрь `NODEDC` на нулевом этапе не нужно.
Причины:
- оба приложения уже являются отдельными git-репозиториями;
- Plane runtime завязан на текущие `plane-app`, `plane.env`, volumes и backup;
- перенос может сломать локальный self-host стенд;
- платформенный слой должен управлять интеграцией, а не становиться монорепозиторием всех исходников.
Допустимый вариант позже: добавить symlink или workspace manifest из `NODEDC` на внешние репозитории, если это потребуется для удобства навигации.
## Риски
- Нельзя пересоздавать существующего Plane admin/user, иначе потеряются связи workspace, задач, комментариев и assignee.
- Нельзя делать Authentik admin token доступным frontend-коду Launcher.
- Нельзя полагаться только на reverse proxy как единственный долгосрочный auth layer для приложений, которые мы контролируем кодом.
- Нельзя публиковать наружу Postgres, Redis, MinIO и внутренние API в staging/production.
## Следующий технический шаг
Создать локальный `platform/infra` слой с Authentik и reverse proxy, но сначала согласовать конкретную схему доменов, ports и secrets.