Files
Bridge-and-Join-s/docs/tasks
fontvielle c5695bf0b6 feat(m2m): сквозной поток с веб-интерфейсами — lk-gateway BFF + admin UI + lk-emulator + mock NSD
Реализован M2-шаг-1: первый рабочий сквозной поток M2M-заявки от ЛК
через нашу систему и обратно, с двумя видимыми веб-интерфейсами.

internal/nsdadapter/mock/:
- mock NSDSender с реалистичным синтетическим Response и асинхронной
  эмиссией Decision через настраиваемую задержку (Confirm/Reject/Timeout)
- использует собственный жизненный цикл, чтобы HTTP-контексты вызывающего
  не прерывали эмиссию Decision до истечения DecisionDelay

internal/lkgateway/:
- REST по контракту ESIA Finance V1 (POST/GET/PATCH/list claims)
- admin web UI (/admin/, /admin/claims, /admin/claims/{id}, /admin/status):
  - дашборд со статусом подсистем (postgres, crypto-service UDS,
    nsd-adapter, lk-emulator callback) и счётчиками сделок
  - журнал и карточка заявки с историей FSM, ответом НРД, решением
    принимающей стороны и последним callback'ом
- in-memory SeedStore с 5 тестовыми клиентами и счетами депо
- фоновый consumeDecisions: подписан на mock.Sender.Decisions(),
  применяет ApplyDecision и отправляет PATCH callback в ЛК

internal/lkemulator/:
- имитация ЛК клиента (порт 8083)
- веб-формы: журнал, форма «новая заявка», карточка заявки
- HTTP-клиент к lk-gateway (создание заявки + регистрация callback URL)
- приёмник PATCH callback'ов, локальное хранилище заявок,
  автообновление страницы каждые 3 сек

cmd/lk-gateway/main.go и cmd/lk-emulator/main.go — заглушки заменены
на полные сервисы с graceful shutdown.

Сквозной поток проверен smoke-test'ом: подача заявки через форму
эмулятора → создание сделки в lk-gateway → Send в mock NSD →
эмиссия Decision через 3 сек → ApplyDecision → PATCH callback в ЛК →
эмулятор показывает confirmed. Дашборд lk-gateway: Total=1, Подтверждено=1.

make ci зелёный.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 11:17:11 +03:00
..

docs/tasks — задачи разработки

Здесь лежат готовые промпты для Claude Code, выполняемые в порядке PR-1 → PR-N. Каждая задача — самостоятельный осмысленный PR в main.

Архитектурный контекст и обоснование решений — в docs/architecture/plan.md (полный план проекта) и docs/architecture/overview.md (краткая выжимка).

Очередь задач

PR Файл Статус Зависит от
PR-1 PR-1-go-models-m2m.md выполнено
PR-2 PR-2-fansy-ddl.md выполнено — (параллельно с PR-1)
PR-3 PR-3-lk-openapi.md выполнено — (параллельно с PR-1)
PR-4 PR-4-m2m-core-skeleton.md выполнено PR-1
PR-5 PR-5-nsd-adapter-skeleton.md выполнено (каркас) PR-1, PR-4
PR-6 PR-6-crypto-service-skeleton.md выполнено (скелет) PR-1
M2-шаг-1 сквозной поток: lk-gateway BFF + admin web + lk-emulator + mock NSD выполнено PR-1, PR-3, PR-4

Как запустить задачу

На dev-ВМ под dev, в корне репо:

cd /srv/dev/Bridge-and-Join-s
git pull
claude

В сессии Claude Code:

Прочитай docs/tasks/PR-1-go-models-m2m.md и выполни задачу полностью. По завершении сделай commit и push в main (или открой MR, если так принято), обнови статус задачи в docs/tasks/README.md с «готово к запуску» на «выполнено» с указанием sha коммита.

Соглашения

  • Без эмодзи в коде и комментариях.
  • Комментарии в коде — на русском, имена типов и полей — на английском как в XSD/контрактах.
  • Каждый PR проходит make ci зелёным.
  • Перед коммитом — go mod tidy, make fmt, make lint.
  • Сообщение коммита: <тип>(<область>): <короткое описание> + расшифровка в теле.
  • Документация изменений — в README соответствующего модуля (internal/<...>/README.md).