feat(ci+ux): path-filtered CI build + Edit semantics в bitemporal model

CI: path-filtering (наконец-то)
- Backend jobs (maven-test, maven-package, docker-app/read-api/projection-writer/migrations,
  resolve-backend-tag) запускаются только при backend-changes (Java модули, pom.xml, CI yml).
- Frontend (docker-admin-ui, resolve-frontend-tag) — только при ordinis-admin-ui/**.
- Trigger downstream передаёт BACKEND_IMAGE_TAG и/или FRONTEND_IMAGE_TAG. Backwards
  compat для старого UPSTREAM_IMAGE_TAG сохранён в infra pipeline.
- Frontend-only PR теперь не катит backend rolling update (raньше каждый push
  тегал ВСЕ сервисы новым sha и роллил).

Edit dialog UX (bitemporal):
- При Edit validFrom default = now() (а не historical validFrom существующей записи).
  Раньше юзер сдвигал validFrom назад → backend не находил активной версии в этот
  момент → 'record_not_active'. Теперь по умолчанию 'новая версия с этого момента'.
- nowIsoLocal() в timezone браузера (с offset).
- validTo default пустой = бессрочно.

Backend: понятное сообщение для record_not_active с инструкцией.
This commit is contained in:
Zimin A.N.
2026-05-04 04:24:17 +03:00
parent c7b651011a
commit 303a5f0402
3 changed files with 109 additions and 26 deletions
@@ -125,7 +125,9 @@ public class DictionaryRecordService {
var current = repository.findActiveAt(d.getId(), businessKey, newValidFrom)
.orElseThrow(() -> OrdinisException.notFound(
"record_not_active",
"Нет активной записи business_key=" + businessKey + " на " + newValidFrom));
"Нет активной версии business_key='" + businessKey + "' на момент " + newValidFrom
+ ". Edit создаёт новую версию начиная с момента 'действует с' — выберите дату/время "
+ "когда уже существует активная запись (обычно — текущий момент или позже)."));
var prevData = current.getData();
UUID previousRecordId = current.getId();