AndreyandClaude Opus 4.8 4c77a4e5b8 ✨ feat(ui): add the channels section
SPEC-HUB-0027 §10-§11, этап 4. Раздел «Каналы» в группе КОМПАНИЯ после
«Продукты»: список с фильтрами по отделу, карточка канала одной страницей и
мастер создания из трёх шагов. Вёрстка следует принятому design baseline
DG-02 (кадры A-E/S).

Карточка не имеет вкладок. Секции идут сверху вниз: Назначение, Политика,
Подключения, AI-агент, Счётчики. Секция агента — одна строка сводки
(имя · статус · модель) и ссылка наружу на его существующую страницу: полей
агента, знаний и их счётчиков в карточке нет, как и ссылки на саму себя.

Секция «Политика» показывает причину недоступности флага, запрещённого
инвариантом при текущем продукте. Причина выводится на клиенте из продукта и
обязательной идентичности: правила P1-P5 детерминированы, а источником прав
остаётся backend — он отклоняет запрос независимо от того, что показал
интерфейс. Флаг не игнорируется молча при сохранении.

Модалка ChannelEditForm удалена: ссылка на канал в шапке агента теперь ведёт
в карточку канала. Маршруты aiAgents, aiAgentCreate, aiAgentDetail,
aiKnowledge* и aiUsage не изменены и не редиректят — покрыто тестом.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 13:33:40 +03:00
2026-07-21 13:33:40 +03:00
2026-06-17 18:14:16 +03:00
2026-07-12 01:17:17 +03:00
2026-06-26 15:10:36 +03:00

CustoCRM

Canonical implementation workspace for hub.edevs.tech.

Local start

Copy-Item .env.example .env
.\scripts\start.ps1

The local compose stack contains:

  • isolated app, platform, and loopback-only admin Django runtimes;
  • background worker;
  • PostgreSQL;
  • Redis;
  • Internal Hub UI;
  • Web Chat UI;
  • local Nginx reverse proxy.

No production secrets are stored in the repository.

Default local URLs:

  • App gateway: http://app.localhost/
  • Platform health: http://platform.localhost/api/v1/health/live/
  • Django admin (loopback only): http://127.0.0.1:18001/admin/
  • Internal Hub UI (direct Vite): http://localhost:5173
  • Web Chat: http://localhost:5175
  • App API (direct): http://localhost:8010/api/v1

Local accounts (TOTP disabled). These credentials are fixed — do not change them:

  • OWNER — owner@edevs.tech / Owner-Local-2026
  • OPERATOR — a.kotova@edevs.tech / Operator-Local-2026

Bootstrap the organization and both accounts:

docker compose run --rm backend-app python manage.py bootstrap_owner --email owner@edevs.tech --password Owner-Local-2026 --name "Иван Петров"

Tests

All suites run in Docker, so no manual environment is required — the test runners auto-detect themselves and relax production hardening (secret-key fail-fast, SSL redirect, throttling) for the duration of the run.

Run everything (backend tests, frontend unit tests, typechecks):

.\scripts\check.ps1

Individual suites:

# Backend (pytest + pytest-django)
docker compose run --rm backend-app pytest

# Frontend unit tests (vitest)
docker compose run --rm frontend npm run test

# End-to-end (Playwright, internal-ui) — auto-starts the dev server
npx playwright install chromium   # one-time
npx playwright test --project=internal-ui

Backend pytest configuration lives in apps/backend/pytest.ini (it must sit next to manage.py so it is also visible inside the backend container).

Languages
Python 54.4%
TypeScript 35.6%
CSS 8.2%
Shell 0.8%
JavaScript 0.6%
Other 0.3%