STREAM / Потоки событий и транзакции
Повтор non-idempotent операции дублирует effect
portfolio.stream.06@1.0.0V-STREAM-06 · Дефект
Повтор non-idempotent операции дублирует effect
Повтор операции после неясного сетевого исхода может применить её дважды, даже если первый ответ не был получен.
Пример проблемы и направление исправления
Учебные сокращённые фрагменты Swift или схемы протокола. Вспомогательные API условны. Это не тестовые oracle и не обещание, что текущий subset выдаст диагностику именно на этот код.
Проблемный сценарий
try await retry { try await charge(amount) }
Возможное исправление
let operationID = stableIDForThisPurchase
try await retry { try await charge(amount, idempotencyKey: operationID) }
Что изменить и что сохранить
Обеспечить серверную idempotency на весь срок повторов. Новый ключ на каждую попытку не предотвращает повторный эффект.
Что нужно доказать
Допустимый retry после ambiguous success повторяет запрещённый effect
Требуемые факты по контракту: retry budget, progress generation, idempotency и atomicity contract
Безопасные случаи и границы
Idempotency key/server dedup и доказанный pre-send failure
Если необходимые факты не получены, результат — unknown, а не «ошибки нет». Для review-сигнала также нужен наблюдаемый риск; нехватки данных недостаточно.
Что подтверждено сейчас
В срезе 022 требуется восстановление и квалификация source producer. Целевое доказательство и пример описывают желаемое поведение; они не являются свидетельством действующей диагностики.
Контракты и происхождение
Страница объединяет утверждённый реестр и редакционные объяснения из Git-среза 4558458d. Raw engineering contracts не входят в public artifact; точные пути остаются во внутреннем manifest.
- Целевой каталог:
docs/product/final-rule-catalog.md - Реестр RuleID:
docs/evidence/matrices/022-complete-rule-portfolio.md - Матрица условий:
openspec/specs/022-complete-rule-portfolio/coverage-matrix.md - Срез приёмки:
openspec/specs/022-complete-rule-portfolio/reports/source-authority-recovery.md - Приёмка: t008-t009-source-batch:
openspec/specs/022-complete-rule-portfolio/reports/t008-t009-source-batch.md - Приёмка: t012-t015-source-batch:
openspec/specs/022-complete-rule-portfolio/reports/t012-t015-source-batch.md - Приёмка: t011-delivery:
openspec/specs/022-complete-rule-portfolio/reports/t011-delivery.md - Приёмка: t014-delivery:
openspec/specs/022-complete-rule-portfolio/reports/t014-delivery.md
Изменение статуса требует обновления подтверждённого среза и проверки каталога. Количество страниц не является количеством полностью квалифицированных правил.