Files
LegacyHUB/docs/ADR-ui-locale.md
Vadim Malanov d27dd0ffbb feat: align LegacyHUB with TeamHUB platform contract (D2/D4, assets, security)
Close 12 audit-driven platform-compliance gaps on a single branch.

- D4 dispatch: app/integrations/dispatch_client.py participant `legacyhub`,
  emits LegacyhubDocumentIndexed + AssetDerivativeReady after the indexing
  commit (idempotent uuid5), http_inbox route (reindex/tombstone) with
  audit-based dedupe; docs/dispatch-contract.md. Celery+Redis stays intra-module.
- D2 SSO: app/integrations/identity.py validates X-TeamHub-* + role/scope
  mapper; security.py adds trusted-header enforcement (AUTH_REQUIRE_IDENTITY)
  and a scope check on /search; docker-compose.teamhub.yml (external teamhub_net
  + internal db net, api not host-published); RUNBOOK network/firewall section.
- Asset standard: SearchHit/Citation carry asset_id/owner_module; buckets
  renamed teamhub-legacyhub-* (+quarantine/tmp/exports); purge-by-asset_id with
  legal-hold guard (app/indexing/projection.py); OCR-markdown derivative event.
- audit_log model + Alembic 0003 + record_audit on writes (same transaction).
- Secret masking: app/common/json_logger.py recursive mask wired into structlog
  (+ensure_ascii=False); event payloads redacted before persistence.
- Service X-API-Key mandatory on ingest endpoints (defence-in-depth).
- Port: host API 8000->8050 (collision with SalesHUB/MailHUB resolved),
  container still listens on 8000.
- Config: no plaintext secret defaults; fail-loud in non-dev (no value leak).
- Docs drift: README PG 5440, layered-auth note, 5173 removed from CORS;
  ingest/folder gated by ENABLE_FOLDER_INGEST (410 by default).
- ADRs: layers mapping, shared-core extraction, UI locale (RU-first).

Tests: 78 passing (ruff, compileall, pytest, tsc, vite build, compose config).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 11:44:15 +03:00

45 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ADR: UI locale (RU-first) and design-system alignment
Status: accepted · 2026-06-15 · scope: `legacy-knowledge-indexer/frontend`
References: `TeamHUB-Platform/docs/submodules/11_UI_DESIGN_STANDARD.md` (§2 RU-first,
§3 brand, §8 exceptions), `docs/CONVENTIONS.md` (frontend stack).
## Контекст
Платформенный стандарт 11 §2 требует **RU-first** для внутренних HUB-поверхностей
(английский допустим для API-имён, статус-лейблов, команд, имён файлов). Текущий
операторский UI LegacyHUB выполнен на английском.
## Решение
1. **Целевое состояние — RU-first.** Рабочие экраны (Dashboard, Documents, Search,
Ingestion, Quality, Health, Settings) переводятся на русский по умолчанию через
i18n-слой; технические термины/идентификаторы остаются как есть.
2. **Переходный период — документированное исключение (11 §8).** До внедрения i18n
английский операторский UI эталона действует как зафиксированное locale-исключение
со сроком возврата: ввести i18n-каркас и перевести ключевые экраны в ближайшей
UI-итерации. Причина: ретро-перевод 9 экранов — отдельная UI-работа с риском
регрессий для работающего эталона; визуальные токены/плотность/размеры стандарту
уже соответствуют и не затрагиваются.
## Бренд (UI-04)
Палитра выровнена на Nutshell/QMS: единый зелёный акцент
(`--primary: 158 64% 32%`, см. `frontend/README.md` «Design system»), что соответствует
бренд-источнику QMS-Hub. Дальнейшие изменения бренда — через design-source handoff
(11 §6).
## Стек (разрешение конфликта с CONVENTIONS)
Эталонный фронт использует shadcn/ui (Radix) + Zustand + TanStack Query. Это
противоречило формулировке `CONVENTIONS.md` «Без shadcn/Zustand/React Query».
Конфликт разрешён правкой источника правды в `TeamHUB-Platform` (CONVENTIONS
обновлён, чтобы разрешить этот стек, т.к. он закреплён эталоном). См. коммит в
платформенном репозитории.
## Последствия
- Соответствие 11 §2 обеспечено через зафиксированное исключение + план RU i18n.
- Токены/плотность/доступность остаются в силе; меняется только текстовый слой.