Эпик 6 ревью: fail-fast при пустом tx_hash от блокчейна #7

Merged
ant merged 1 commits from chore/review-E6-vydacha-fixes into marketplace2 2026-05-20 17:00:47 +00:00
Owner

Ревью Эпика 6 «Выдача пайщику с двойной подписью и корректировкой».

MEDIUM: signIss1/signIss2 fallback 'signiss1-${order.id}' / 'signiss2-${order.id}' при пустом tx_hash от блокчейна засорял audit-trail синтетическими хэшами, которых нет в реальной цепи. Теперь явный ConflictException — пользователь видит, что подписание не завершилось и должно быть повторено.

Также фикс: JSDoc комментарий 'Story 6.4 / FR22 push заказчику' исправлен на 'Story 6.1 / FR22' (это AC Story 6.1, не 6.4).

Открытые CRITICAL/HIGH фоллоуапы (не в этом PR — большие, требуют design-decisions):

  1. CRITICAL Story 6.3: Orderer вводит свой WIF в q-input на устройстве оператора (компрометация ключа). Нужен mobile deeplink на заказчика или WebAuthn/Passkey.
  2. CRITICAL Story 6.3: marketplaceFinalizeIssuance доступен только orderer (Issuance:sign:final), но dialog отправляет mutation из сессии оператора. Flow упадёт на Forbidden.
  3. CRITICAL Story 6.1: listForIssuanceByBraname не проверяет ownership delivery_braname — любой оператор видит чужие заказы.
  4. CRITICAL Story 6.2: barcode scanner — mock с случайными кодами; нет verify barcode→order mapping; нет cancel issuance flow.
  5. HIGH Story 6.3: signiss2 не обновляет offer-counters (quantity_blocked/consumed) + inventory.status='ISSUED'.
  6. HIGH Story 6.4: нет audit-таблиц marketplace_issuance_failed/correction.
  7. HIGH Story 6.4: recovery UI на FR25 (две кнопки 'уменьшить факт'/'отказаться') отсутствует.
  8. HIGH Story 6.3: delivery_signer передаётся клиентом без backend-валидации (доверие на on-chain).
  9. HIGH Story 6.3: transmitter в документе = chairman_account, подписывает delivery_signer (могут различаться) — юридическая некорректность акта.
  10. HIGH: registry_id 1102 (MarketplaceAplReception) используется и для АПП-приёмки (Эпик 5), и для АПП-выдачи (Эпик 6).
  11. MEDIUM Story 6.1: batch-открытие выдачи (multi-select N заказов) не реализовано.
  12. MEDIUM Story 6.4: spec L25 'wal+mkt available' vs контракт signiss2.cpp проверяет 3 кошелька (+ SHARE_FUND_PAY).
  13. MEDIUM: OrdererReadyToReceivePage и OperatorIssuancePage не подключены к router; deeplink notification ведёт на /MyOrders.
Ревью Эпика 6 «Выдача пайщику с двойной подписью и корректировкой». MEDIUM: signIss1/signIss2 fallback 'signiss1-${order.id}' / 'signiss2-${order.id}' при пустом tx_hash от блокчейна засорял audit-trail синтетическими хэшами, которых нет в реальной цепи. Теперь явный ConflictException — пользователь видит, что подписание не завершилось и должно быть повторено. Также фикс: JSDoc комментарий 'Story 6.4 / FR22 push заказчику' исправлен на 'Story 6.1 / FR22' (это AC Story 6.1, не 6.4). Открытые CRITICAL/HIGH фоллоуапы (не в этом PR — большие, требуют design-decisions): 1. CRITICAL Story 6.3: Orderer вводит свой WIF в q-input на устройстве оператора (компрометация ключа). Нужен mobile deeplink на заказчика или WebAuthn/Passkey. 2. CRITICAL Story 6.3: marketplaceFinalizeIssuance доступен только orderer (Issuance:sign:final), но dialog отправляет mutation из сессии оператора. Flow упадёт на Forbidden. 3. CRITICAL Story 6.1: listForIssuanceByBraname не проверяет ownership delivery_braname — любой оператор видит чужие заказы. 4. CRITICAL Story 6.2: barcode scanner — mock с случайными кодами; нет verify barcode→order mapping; нет cancel issuance flow. 5. HIGH Story 6.3: signiss2 не обновляет offer-counters (quantity_blocked/consumed) + inventory.status='ISSUED'. 6. HIGH Story 6.4: нет audit-таблиц marketplace_issuance_failed/correction. 7. HIGH Story 6.4: recovery UI на FR25 (две кнопки 'уменьшить факт'/'отказаться') отсутствует. 8. HIGH Story 6.3: delivery_signer передаётся клиентом без backend-валидации (доверие на on-chain). 9. HIGH Story 6.3: transmitter в документе = chairman_account, подписывает delivery_signer (могут различаться) — юридическая некорректность акта. 10. HIGH: registry_id 1102 (MarketplaceAplReception) используется и для АПП-приёмки (Эпик 5), и для АПП-выдачи (Эпик 6). 11. MEDIUM Story 6.1: batch-открытие выдачи (multi-select N заказов) не реализовано. 12. MEDIUM Story 6.4: spec L25 'wal+mkt available' vs контракт signiss2.cpp проверяет 3 кошелька (+ SHARE_FUND_PAY). 13. MEDIUM: OrdererReadyToReceivePage и OperatorIssuancePage не подключены к router; deeplink notification ведёт на /MyOrders.
ant added 1 commit 2026-05-20 15:15:22 +00:00
ant merged commit e412d7ee4e into marketplace2 2026-05-20 17:00:47 +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#7