fix(qa-report): version tag, /drafts redirect, audit filter complete, i18n cleanup

QA report v2.31.x batch:

- **VersionController.tag**: было 'none' (maven build на main без git tag) → UI
  показывал «dev · 6077d4df». Helm передаёт image.tag через env
  ORDINIS_BUILD_IMAGE_TAG, controller парсит «v2-31-2-e3c82775» → «v2.31.2».
  Helm chart change в ordinis-infra (separate MR).

- **/drafts redirect** (BUG-003): пустой 404 «Not Found» plain text → теперь
  static redirect на /my-drafts.

- **Audit action filter** (BUG-004): дропдаун содержал только 3 значения
  (CREATE/UPDATE/CLOSE), но в таблице 11 типов (DRAFT_*, DEFINITION_*).
  Frontend AuditAction enum + ACTIONS list синхронизированы с backend
  AuditLogger/SchemaDraftService/DraftService.

- **i18n cleanup** (BUG-006/007/UX-005):
  - myDrafts.description: «Все ваши submissions с pending/approved...» →
    «Все ваши черновики с историей: ожидает рассмотрения, одобрен...»
  - reviews.description: «Pending drafts от makers, ждут approve/reject» →
    «Черновики от авторов, ждут одобрения или отклонения. Общая очередь...»
  - reviews.queueTotal: «N pending drafts» → «N черновиков в очереди»
  - myDrafts.col.reviewer: «Reviewer» → «Рецензент» (RU only)
  - notifications chip labels: 'submit/approved/rejected' → 'отправлен/
    одобрен/отклонён'
  - audit.action.* expanded к 13 entries для каждого backend action
    type, с понятными лейблами «Черновик одобрен» вместо «DRAFT_APPROVE»

- **WhatsNewModal markdown** (UX-006): тексты вроде «**График доставки
  webhook'ов**» рендерились с буквальными звёздочками. Mini inline renderer
  для **bold**, *italic*, `code` — без full markdown library.
This commit is contained in:
Zimin A.N.
2026-05-15 22:02:29 +03:00
parent e3c827752e
commit ff7e72e0fd
8 changed files with 201 additions and 28 deletions
+21
View File
@@ -15,6 +15,7 @@ import { Route as ReviewsRouteImport } from './routes/reviews'
import { Route as OutboxRouteImport } from './routes/outbox'
import { Route as MyDraftsRouteImport } from './routes/my-drafts'
import { Route as GraphRouteImport } from './routes/graph'
import { Route as DraftsRouteImport } from './routes/drafts'
import { Route as DictionariesRouteImport } from './routes/dictionaries'
import { Route as AuditRouteImport } from './routes/audit'
import { Route as IndexRouteImport } from './routes/index'
@@ -54,6 +55,11 @@ const GraphRoute = GraphRouteImport.update({
path: '/graph',
getParentRoute: () => rootRouteImport,
} as any)
const DraftsRoute = DraftsRouteImport.update({
id: '/drafts',
path: '/drafts',
getParentRoute: () => rootRouteImport,
} as any)
const DictionariesRoute = DictionariesRouteImport.update({
id: '/dictionaries',
path: '/dictionaries',
@@ -100,6 +106,7 @@ export interface FileRoutesByFullPath {
'/': typeof IndexRoute
'/audit': typeof AuditRoute
'/dictionaries': typeof DictionariesRouteWithChildren
'/drafts': typeof DraftsRoute
'/graph': typeof GraphRoute
'/my-drafts': typeof MyDraftsRoute
'/outbox': typeof OutboxRoute
@@ -115,6 +122,7 @@ export interface FileRoutesByFullPath {
export interface FileRoutesByTo {
'/': typeof IndexRoute
'/audit': typeof AuditRoute
'/drafts': typeof DraftsRoute
'/graph': typeof GraphRoute
'/my-drafts': typeof MyDraftsRoute
'/outbox': typeof OutboxRoute
@@ -131,6 +139,7 @@ export interface FileRoutesById {
'/': typeof IndexRoute
'/audit': typeof AuditRoute
'/dictionaries': typeof DictionariesRouteWithChildren
'/drafts': typeof DraftsRoute
'/graph': typeof GraphRoute
'/my-drafts': typeof MyDraftsRoute
'/outbox': typeof OutboxRoute
@@ -149,6 +158,7 @@ export interface FileRouteTypes {
| '/'
| '/audit'
| '/dictionaries'
| '/drafts'
| '/graph'
| '/my-drafts'
| '/outbox'
@@ -164,6 +174,7 @@ export interface FileRouteTypes {
to:
| '/'
| '/audit'
| '/drafts'
| '/graph'
| '/my-drafts'
| '/outbox'
@@ -179,6 +190,7 @@ export interface FileRouteTypes {
| '/'
| '/audit'
| '/dictionaries'
| '/drafts'
| '/graph'
| '/my-drafts'
| '/outbox'
@@ -196,6 +208,7 @@ export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
AuditRoute: typeof AuditRoute
DictionariesRoute: typeof DictionariesRouteWithChildren
DraftsRoute: typeof DraftsRoute
GraphRoute: typeof GraphRoute
MyDraftsRoute: typeof MyDraftsRoute
OutboxRoute: typeof OutboxRoute
@@ -249,6 +262,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof GraphRouteImport
parentRoute: typeof rootRouteImport
}
'/drafts': {
id: '/drafts'
path: '/drafts'
fullPath: '/drafts'
preLoaderRoute: typeof DraftsRouteImport
parentRoute: typeof rootRouteImport
}
'/dictionaries': {
id: '/dictionaries'
path: '/dictionaries'
@@ -340,6 +360,7 @@ const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
AuditRoute: AuditRoute,
DictionariesRoute: DictionariesRouteWithChildren,
DraftsRoute: DraftsRoute,
GraphRoute: GraphRoute,
MyDraftsRoute: MyDraftsRoute,
OutboxRoute: OutboxRoute,