Эпик 5 re-ревью: fail-fast tx_hash в APL signsupp/signchair loop #14

Merged
ant merged 1 commits from chore/re-review-E5-apl-fail-fast into marketplace2 2026-05-20 17:06:44 +00:00
Owner

Эпик 5 re-ревью — HIGH fix

Проблема

MarketplaceAplReceptionService.submitOnChainSignSupp и submitOnChainSignChair использовали «last-non-empty» с fallback signsupp-<reception_id> / signchair-<reception_id> когда ВСЕ tx_hash в группе пусты.

Внутри for-of цикла tx_hash чек:

const txHash = this.extractTxHash(tx);
if (txHash) lastTxHash = txHash;

Пустой tx молча игнорировался → запись APL-приёмки в БД с фантомным fallback.

Фикс

На любой пустой ответ от цепи внутри loop → fail-fast ConflictException с конкретным Order'ом. Часть группы могла быть уже подписана выше — продолжать с фантомным tx_hash в БД категорически нельзя; ретрай безопасен (контракт идемпотентен по order_hash).

Test plan

  • jest apl-reception — 6/6 passed.

🤖 Generated with Claude Code

# Эпик 5 re-ревью — HIGH fix ## Проблема `MarketplaceAplReceptionService.submitOnChainSignSupp` и `submitOnChainSignChair` использовали «last-non-empty» с fallback `signsupp-<reception_id>` / `signchair-<reception_id>` когда ВСЕ tx_hash в группе пусты. Внутри for-of цикла tx_hash чек: ```ts const txHash = this.extractTxHash(tx); if (txHash) lastTxHash = txHash; ``` Пустой tx молча игнорировался → запись APL-приёмки в БД с фантомным fallback. ## Фикс На любой пустой ответ от цепи внутри loop → fail-fast `ConflictException` с конкретным Order'ом. Часть группы могла быть уже подписана выше — продолжать с фантомным tx_hash в БД категорически нельзя; ретрай безопасен (контракт идемпотентен по `order_hash`). ## Test plan - [x] jest apl-reception — 6/6 passed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ant added 1 commit 2026-05-20 16:31:52 +00:00
HIGH:
- submitOnChainSignSupp / submitOnChainSignChair использовали
  «last-non-empty» с fallback `signsupp-<reception_id>` /
  `signchair-<reception_id>` если ВСЕ tx_hash в группе оказались
  пусты. Внутри for-of цикла tx_hash чек шёл с `if (txHash)
  lastTxHash = txHash` — пропускал пустой ответ молча.
- Теперь: на любой пустой ответ от цепи внутри loop — fail-fast
  `ConflictException` с указанием конкретного Order'а. Часть группы
  могла быть уже подписана выше — продолжать и финализировать APL
  с фантомным tx_hash в БД категорически нельзя; ретрай безопасен
  (контракт идемпотентен по order_hash).

Тесты: jest apl-reception — 6/6 passed.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ant merged commit 505a33f1db into marketplace2 2026-05-20 17:06:44 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#14