WEB-361 · Задача · billing · web
QIMPL-5: идемпотентный redrive/resolve — committed-repeat check до POISON-требования + null-reservation slot restore
Закрыт
P1 · важно
ведёт: —
Суть
Из qreview7 §4.3/§4.6/§5.5: повторный redrive после committed REDRIVING+QUEUED падает PRE_REDRIVE_STATE (committed-response-loss); null-reservation path оставляет slot=POISON при DLQ=RESOLVED. Переставить repeat-check, восстановить slot в null-branch, повторы возвращают exact semantic read-back. Контракт: WEB094-QUEUE-DESIGN-v7.md (ЗАМОРОЖЕН как дизайн-контракт 25.08 по решению owner «v7 последний дизайн-раунд»). Блокер из qreview7-sol-report.md (A1), закрывать КОДОМ с приёмкой: негатив-тест обязателен, приёмщик ≠ автор, исполнимый SQL-прогон в чистой схеме как в ревизии.
Доказательства
[25.08 ~15:00Z] СДЕЛАНО волной qimpl5: commit c4f9452, только 050-dlq.sql. Committed REDRIVING+QUEUED repeat-check ДО POISON-precondition; повтор redrive/resolve = exact semantic read-back с тем же job_id (без второй мутации); slot restore вынесен из non-null ветки (null-reservation → RESERVE_PENDING, состояние RESOLVED+slot=POISON недостижимо). Fence qimpl2 и QIMPL-1/3 не тронуты. Proof PASS. → review. Из QIMPL остался только QIMPL-4 (WEB-360, correction).
📎 Трейл: отчёт /home/ubuntu/waves/QIMPL5-REPORT.md; ветка qimpl5@c4f9452. Файл: prisma/queue-v7/050-dlq.sql (коммент QIMPL-5).
[2026-08-25 19:11Z] Независимая приёмка запущена: волна accqimpl на A1 (sol xhigh, приёмщик≠автор), worktree от прод-коммита a453b16; обязательны негативные тесты новых классов; для не-влитых тикетов волна установит факт NOT-LANDED. Бриф /home/ubuntu/waves/accqimpl-brief.md, отчёт будет в ACCQIMPL-REPORT.md.
[2026-08-25 20:05Z] ПРИНЯТО (accqimpl, приёмщик≠автор, одноразовый Postgres, новые негатив-классы: гонка двух job за reservation / underflow-откат / повторный late receipt / повреждённый committed slot). GO → done. Отчёт A1:ACCQIMPL-REPORT.md.
Починено в
a453b16
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-361","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-08-25T19:57:41.291Z