WEB-555 · Задача · — · web
SEC-038 [P2] Daily reward не возобновляется после частичного отказа
Закрыт
P2
ведёт: —
эпик: WEB-515
Суть
DailyRewardModal отправляет bodyless POST, а route берёт userId из auth (src/components/retention/DailyRewardModal.tsx:215–252; src/app/api/retention/claim/route.ts:7–39). claimDailyReward сначала фиксирует UserStreak/lastActiveDate, затем вызывает awardXP и earnCurrency (src/lib/retention/retentionService.ts:534–562). При отказе после gate ответ 500 оставляет день claimed; повтор отказывает ALREADY_CLAIMED (:496–504), не доводя награду. XP может отсутствовать либо уже быть выданным без coins. Это P2 согласованности виртуальной награды, source-proven; runtime red/green ещё не выполнялся. CVSS 3.1 не назначен: платные credits, внешний получатель и нарушение CIA не установлены. Старые cyclic coin reference, achievement snapshot и SEC-005 recipient/amount не дублируются.
ДЛЯ ТИКЕТА: todo; 2048 daily-reward-completion-review, Codex sol.
KNOWN ISSUES / ТРАБЛШУТИНГ: исходная база 6930 отличается от reported production l112; строгая независимая проверка actual state/effects ожидается. Не снимать gate вслепую и не начислять повторно XP.
## ДЛЯ НУЛЕВОГО АГЕНТА (обновлено 2026-09-05 UTC)
- **Суть одной строкой:** SEC-038 [P2] Daily reward не возобновляется после частичного отказа
- **Текущее состояние:** статус: todo; KNOWN ISSUES / ТРАБЛШУТИНГ: исходная база 6930 отличается от reported production l112; строгая независимая проверка actual state/effects ожидается. Не снимать gate вслепую и не начислять повторно XP.
- **Кто работал:**
- нет данных в тикете
- **Ветки/бандлы/отчёты:** нет данных в тикете
- **KNOWN ISSUES / ТРАБЛШУТИНГ:**
- DailyRewardModal отправляет bodyless POST, а route берёт userId из auth (src/components/retention/DailyRewardModal.tsx:215–252; src/app/api/retention/claim/route.ts:7–39). claimDailyReward сначала фиксирует UserStreak/lastActiveDate, затем вызывает awardXP и earnCurrency (src/lib/retention/retent…
- KNOWN ISSUES / ТРАБЛШУТИНГ: исходная база 6930 отличается от reported production l112; строгая независимая проверка actual state/effects ожидается. Не снимать gate вслепую и не начислять повторно XP.
- **Эволюция:**
- нет данных в тикете
- **Следующий шаг:** KNOWN ISSUES / ТРАБЛШУТИНГ: исходная база 6930 отличается от reported production l112; строгая независимая проверка actual state/effects ожидается. Не снимать gate вслепую и не начислять повторно XP.
Связи
- связан → WEB-515 — ЭПИК: АУДИТ БЕЗОПАСНОСТИ проекта (Codex gpt-6-astra как security lead) — карта поверхности, threat model, ASVS L2, реестр находок, фиксы с adversarial-приёмкой на Claude
Лента
2026-09-06T00:19:13.818Z · astra-securitycont16-wave-2066-web-555 — 2026-09-06T00:19:13.818242+00:00 / IST=2026-09-06T05:49:13.818247+05:30
CONT16 fan-out: 2066 REVIEW, gpt-5.6-sol, priority NORMAL; задачи WEB-555.
Continue2048 review/design with actual component behavior. retention/claim route:7–39 supplies session identity; retentionService.ts:496–504 stops repeats,541–551 persists streak before XP/coins553–562. gamification/xp.ts:103–192 uses several global Prisma/effect calls; economyService.ts:469–490,624–627 starts its own transaction. Compare fully transaction-aware credit components versus durable frozen claim receipt with fenced resumable XP/coin credits. Merely wrapping current helpers in an outer transaction is insufficient. Rewards here are virtual XP/coins; no real money or provider operations. Do not implement an arbitrary new product reward policy.
Бриф: /Users/poolpooly/audit/outbox/2066-daily-reward-component-convergence-brief.md
SHA256 ce4c66c322d20b801dacd1bd129aff3952e927199ca0d4d385f1419531a7b564
Статус: выдан в relay; запуск/результат не подтверждены. Full assigned l113/l113b SHA и prior-output dedupe обязательны. Координатор принимает пересекающиеся изменения и посадку.
2026-09-06T08:32:02.157Z · coordinator[06.09 08:32Z координатор] [2026-09-06T08:31Z координатор] Ревью Astra на текущей базе (M4 sol): WEB-534 GO и WEB-537 GO — дефекты на текущей линии не подтверждены → done; WEB-536 NO-GO → фикс-волна 2221. Блок 17 приёмки: WEB-559 b856b658 GO, WEB-567 877a7160 GO → l113d; WEB-538 df0399da NO-GO (item claim/settlement без fence) → 2223; WEB-541 ebecd7f2 NO-GO (2 нарушения контракта) → 2224. Фиксы по NO-GO ревью GO у авторов → приёмки: WEB-545 c4373797 (2216), WEB-550 819da84e (2217), WEB-552 9d47fdf4 (2218), WEB-553 ba3acc4b (2219), WEB-555 d7e486e9 (2220). A2: WEB-542 доработка 7318e002 GO → приёмка 2215; revive-бюджет v3 1fff536a PASS → приёмка 2222; большой PDF 66e56137 ПРИНЯТ (2202 GO) → l113d; Facebook guard c926d0f8 ПРИНЯТ (2176b GO), конфликтует с линией social в l113d → merge-волна 2225.
2026-09-06T09:30:01.447Z · coordinator[06.09 09:30Z координатор] [2026-09-06T09:29Z координатор] Приёмки M4 блока 17: WEB-553 ba3acc4b GO (2219), WEB-555 d7e486e9 GO (2220), WEB-538 fence 5895c8d0 GO (2228) → кандидаты l113e. Приёмки 545/550/552 умерли при переполнении диска M4 (PENDING) → повторы 2216b/2217b/2218b. Фиксы GO у авторов → приёмки: WEB-536 podcast 8942094e (2236), WEB-541 контракт 3fd18f21 (2237), WEB-542 atomic 1d87f676 (2234, real-PG), роли C5-C negation-scope 86afe601 (2235).
2026-09-06T10:21:06.239Z · coordinator[06.09 10:21Z координатор] [2026-09-06T10:21Z координатор] ПОСАЖЕНО: ПРОД = l113e 65ff9060 (flip 10:17:49Z, без простоя; оба бэкенда ready, paid enforce_ready, edge 200×8; 3 миграции применены (WEB-538 email idempotency, WEB-555 daily reward receipt, WEB-542 oauth atomic generation); hetzbk l113e-65ff9060, Pi standby → l113e). Состав (15 коммитов над l113d): social OAuth callback guard + origin validator (3391848c, 11148078), роли — многошаговые цепочки v3 (f00d3639, 7663ba59, 475f2872 → C1-6/C3-1/C3-2), WEB-553 clipper owner state (ba3acc4b), WEB-555 daily reward (d7e486e9), WEB-538 email delivery idempotency+fence (df0399da, 5895c8d0), WEB-542 OAuth atomic generation (3f281a9b, e04fd90d, 1d87f676), P19 манифест 187, api-perimeter baseline. Откат = l113d 4c73d845 (RUN l113d-4c73d845, REL arm64-l113d-20260906T085722Z). Дальше: батарея ролей на l113e; l113f = WEB-560 merge 8dd1682e, WEB-541 3fd18f21, WEB-545 c4373797, WEB-509 9ad8335c + ждущие приёмок.
2026-09-06T11:10:43.717Z · astra-securitycont18-relay12-landing-web-555 — 2026-09-06T11:10:43.716840+00:00 / IST=2026-09-06T16:40:43.716846+05:30
Правила обогащения: WEB-449. ДЛЯ ТИКЕТА: посадка WEB-555 в l113e65ff9060 сообщена координатором WEB-515:2088 (flip10:17:49Z) и latest CONT18 relay instruction. Новый FIX из этого intake не требуется.
KNOWN ISSUES / ТРАБЛШУТИНГ: локальный object65ff9060 отсутствует; проверка4c73 не является independent verification новой посадки. Проверить immutable release manifest/candidate equivalence и существующую acceptance, передать exact packet/fullSHA; не повторять host activation. Точный следующий шаг: coordinator присылает current release packet/приёмку, после чего выполняется delta mapping.
Документы: M1 /Users/poolpooly/audit/reports/block18-relay-1-2-checkpoint.md; M1 /Users/poolpooly/audit/evidence/block18-relay/ledger45.json. Board status не менялся.
2026-09-06T21:37:37.342Z · astra-securityblock22-wave-2182-web-555 — 2026-09-06T21:37:37.341584+00:00 / IST=2026-09-07T03:07:37.341621+05:30
ДЛЯ ТИКЕТА / BLOCK22 release closure. WEB555 atomic/resumable virtual reward7649d7c6 independentd7e486e9 inherited.
Бриф /Users/poolpooly/audit/outbox/2182-daily-reward-completion-post-l113j-closure-brief.md; SHA256 ae6df32a0cded99b8903c3bde4d50a3ccf7524d4dd25e10a0b9705e20632f0d9. MODEL=gpt-5.6-sol, A2 cap11, M4 cap3 без автоматического переноса. WAITING_RELEASE_l113j: не запускать до полного deployed-SHA/artifact/backend receipt. Сейчас reportedprod i18f130938b8d2a8f4376811651ad21beb4e28838; M1 source checkout толькоh.
Три группы: exactrelease/source mapping; live: Read designated QA reward status without pressing Claim or changing XP/coins; schema/artifact mapping receipt only.; companion: Local disposablePG/actualservice tests cover XP/coin partial failure, replay/concurrent day claim and UI completion. Distinguish virtual points from paid credits; no live grants.
KNOWN ISSUES: sent≠running, code/authorGO≠liveclosure. При отсутствующем fix в j — NOT_DEPLOYED. Никаких paid/provider effects, реальных удалений/отказов сервиса. Existing2455/2450/2460/2462/2458 и старые работы не дублируются. Историческиеanchors src/components/retention/DailyRewardModal.tsx:215–252; src/app/api/retention/claim/route.ts:7–39; src/lib/retention/retentionService.ts:534–562 historical. Fullreport future /home/ubuntu/waves/BLOCK22-DAILY-REWARD-COMPLETION-POST-L113J-CLOSURE-REPORT.md. Evidence M1 /Users/poolpooly/audit/evidence/block22/fanout-jobs.json; checkpoint /Users/poolpooly/audit/reports/block22-checkpoint.md. Статус тикета не менялся.
2026-09-07T06:42:41.363Z · coordinator[07.09 06:42Z координатор] BLOCK 22 (Astra closure R2, A1, 06:18–06:37Z) — ещё четыре NO-GO одного класса: DAILY-REWARD-COMPLETION (SEC-038/WEB-555: QA-логин 403 — рецепт без Origin/Referer), SHARED-NOTEBOOK-PROJECTION (SEC-037/WEB-554: в расписках j/k/l нет строки тикета и lineage; байты runtime недоступны волне), CLIPPER-OWNER-STATE (SEC-036/WEB-553: то же — mapping/байты; companion GO, live-refusal наблюдён), RESTORE-OUTCOME-UI (SEC-035/WEB-552: окно истекло 06:00Z, релиз сменился). Что даю для r3: LIVE-WINDOW-AUTH-l113m.md (окно до 09:00Z), inputs/release/l113m/server (байты живого релиза), рецепт логина, per-ticket строки в расписке L113M. Отчёты A1 BLOCK22-*-POST-L113J-CLOSURE-REPORT.md.
2026-09-07T07:38:24.514Z · astra-securityBLOCK22-RELAY13-WEB-555 — 2026-09-07T07:38:24.513348+00:00 / IST=2026-09-07T13:08:24.513367+05:30
SEC-038 / WEB-555: NO_GO_FULL_CLOSURE_UNVERIFIED. Workflow done сохранён. Текущий m 8f4ba1d92cc15a8b64144674e35cce71fdfba43a подтверждён распиской; родитель не выполнял live.
Полный closure GO не установлен. NO-GO из-за недостающих входов не объявляется новым продуктовым дефектом. Исторический source/companion PASS сохраняется в исходном отчёте.
KNOWN ISSUES / ТРАБЛШУТИНГ
- QA403; status/schema live and independent d7e486e9 receipt missing
- readonly status; obtain d7e486e9 full report; action-map compile gap remains explicit
ДЛЯ ТИКЕТА
2560 / A1: readonly status; obtain d7e486e9 full report; action-map compile gap remains explicit
No additional release candidate asserted by this delta.
Полный ledger и parent adjudication: ~/audit/evidence/block22-relay13/ledger46.json; ~/audit/reports/block22-relay13-r3-plan.md.
Reports:
/Users/poolpooly/audit/evidence/block22-relay13/intake-originals/CONT19-RELAY-12/a1/BLOCK22-DAILY-REWARD-COMPLETION-POST-L113J-CLOSURE-REPORT.md
/Users/poolpooly/audit/evidence/block22-relay13/intake-originals/CONT19-RELAY-13/a1/BLOCK22-DAILY-REWARD-COMPLETION-POST-L113J-CLOSURE-REPORT.md
2026-09-07T08:06:47.300Z · astra-securityBLOCK22-RELAY13-N-WEB-555 — 2026-09-07T08:06:47.300424+00:00 / IST=2026-09-07T13:36:47.300430+05:30
l113n44d8af687a9e78816b6f747b81a13402abda98bf deployed07:47:36Z по расписке; scope closure NO_GO_FULL_CLOSURE_UNVERIFIED сохранён, workflow не менялся.
7649d7c6 inherited YES
KNOWN ISSUES
d7e486e9 independent report/full SHA not supplied; readonly status/schema and compile gate remain
Ancestry/replay attestation ≠ runtime member verification; ready/deployment ≠ scoped GO.
ДЛЯ ТИКЕТА
2560 A1 DISPATCHED_A1; worker result pending; running unconfirmed.
A1 actual LIVE-WINDOW-AUTH-l113n до10:30Z с QA lease;2568 отдельно HOLD2570 independent GO+landing. No new wave.
Evidence: ~/audit/evidence/block22-relay13-n/intake/L113N-RELEASE-RECEIPT.md + L113N-TICKET-SHA-ADDENDUM.md; remaining matrix ~/audit/reports/block22-relay13-n-update.md.
2026-09-07T08:12:13.645Z · coordinator[07.09 08:12Z координатор] BLOCK 22 r3 (Astra, A1, 08:0x–08:2xZ): ADMIN-DAILY-LIVE (2560, WEB-524/555), SLACK-POST-L113N (2565, WEB-544), RESTORE-SHARED-LIVE (2563, WEB-552/554) = NO-GO по формальной причине: брифы требуют l113m-only auth, а LIVE-WINDOW-AUTH был дополнен под l113n 07:50Z (прод сменился 07:47Z); плюс отсутствие фикстур-receipt (WEB-554 active/absent rows, WEB-555 d7e486e9 report). Astra прислала L113N-UPDATE (addendum для владельцев 2560–2569); координатор перевыпускает live-брифы под l113n (r3n) с фикстурами.
2026-09-07T08:33:32.408Z · coordinator[07.09 08:33Z координатор] BLOCK 22 r3n — ADMIN-DAILY-LIVE (2560n, A1, 08:29Z, live l113n): WEB-524/SEC-008 = GO (login QA ок, non-admin invite management → 403, retention 200, без мутаций); WEB-555/SEC-038 = NO-GO INPUT_GAP — нет независимого отчёта d7e486e9 (координатор ищет в архивах) + известный scoped compile gap. Evidence A1 BLOCK22-ADMIN-DAILY-LIVE-R3N-EVIDENCE.tar.gz (sha 81dc53b5…).
2026-09-07T08:58:49.833Z · coordinator[07.09 08:58Z координатор] BLOCK 22 r3n2 — ADMIN-DAILY-LIVE (2560n2, A1, live l113n, 08:5xZ): WEB-555/SEC-038 = GO (независимый отчёт d7e486e9 доставлен; read-only status fixture без claim; live под auth l113n); WEB-524 = GO (r3n, не повторялся). Closure SEC-038 закрыт. Отчёт A1 BLOCK22-ADMIN-DAILY-LIVE-R3N2-REPORT.md.
2026-09-07T10:49:40.860Z · astra-securityBLOCK22-RELAY14-WEB-555 — 2026-09-07T10:49:40.860162+00:00 / IST=2026-09-07T16:19:40.860181+05:30
RELAY14: current PROD p1c850d92876757812eab9ffa7f381bcea95aad86 by receipt, flip10:21:43Z. SEC-038 / WEB-555 — GO_COORDINATOR_RELAY_REPORT_PENDING. Workflow retained.
Coordinator WEB515 #3107 reports GO on l113n: daily status; independent d7e486e9 delivered remotely. Full report not in local RELAY14; recorded as coordinator relay, no duplicate wave or parent full-report adjudication.
KNOWN ISSUES
Coordinator reports scoped GO; retain exact scope and historical release. Full worker report/bytes not received locally; no independent parent upgrade asserted.
ДЛЯ ТИКЕТА
Source/runtime/host proof remains distinct from deploy readiness. No parent live/SSH/product mutation. Evidence: ~/audit/evidence/block22-relay14/ledger46.json; ~/audit/reports/block22-relay14-update.md. Three r3p briefs and exact input/authority handoff in outbox. Holds remain until actual q receipt plus independent acceptance.
2026-09-07T11:40:36.647Z · ЭВОЛЮЦИЯ ЗА 12 Ч (гигиена 2609, 11:25Z 07.09)
ХРОНОЛОГИЯ КРУГОВ
- волна 2182 → `46393080dd885f6ff25967f18639075564e12737`, `7649d7c66492a63084cf715f720d27f641c8a051`, `da6799b2c7acd2d7da08ce4eeb36c55ee9ce8726` → VERDICT=NO-GO — Причина: exact l113j и наследование WEB-555 до текущего l113l подтверждены; явная строка WEB-555 в l113j receipt отсутствуют, scoped TSC падает на Источник: `A1 waves/BLOCK22-DAILY-REWARD-COMPLETION-POST-L113J-CLOSURE-REPORT.md`.
- Линии посадки: l113j 22:56Z → l113k 00:41Z → l113l 05:30Z → l113m 06:33Z → l113n 07:48Z → l113o 09:35Z → l113p 10:21:43Z. Текущий PROD: l113p `1c850d92876757812eab9ffa7f381bcea95aad86`; общий verify — green по release receipt.
ДЛЯ НУЛЕВОГО АГЕНТА
- Board done; текущая линия l113p `1c850d92876757812eab9ffa7f381bcea95aad86`. Проверенные SHA: `46393080dd885f6ff25967f18639075564e12737`=предок; `7649d7c66492a63084cf715f720d27f641c8a051`=предок; `da6799b2c7acd2d7da08ce4eeb36c55ee9ce8726`=предок. Новые отчёты не требуют переоткрытия при сохранении указанной scope-диспозиции.
- Следующий шаг / владелец: Нового product шага из выбранных отчётов нет; остаточные evidence/registry действия ведутся родительским эпиком.
KNOWN ISSUES / ТРАБЛШУТИНГ
- Дельта без домысла: Причина: exact l113j и наследование WEB-555 до текущего l113l подтверждены; явная строка WEB-555 в l113j receipt отсутствуют, scoped TSC падает на Проверка/причина привязаны к отчётам выше; anchors: `src/lib/retention/retentionService.ts:614-760`, `src/app/api/retention/claim/route.ts:7-41`, `src/components/retention/DailyRewardModal.tsx:215-252`, `prisma/schema.prisma:1849-1879`. Лечение — только указанное в report disposition; отсутствующий live/receipt не объявляется продуктовой регрессией.
СВЯЗИ / ИСТОЧНИКИ
- Release: `M4 waves/L113P-RELEASE-RECEIPT.md`; координаторский срез: `M4 waves/OPS-STATUS-HEAD-1120.md`; точные отчёты перечислены в хронологии/KNOWN ISSUES.
- Если сегодняшняя карточка уже содержит более ранний coordinator-комментарий с тем же фактом, эта запись является только дельтой 2609 и не отменяет тот trail.
2026-09-10T17:11:13.122Z · astra-securityBACKLOG64-TRIAGE-20260910-WEB-555 — 2026-09-10T17:11:13.121454+00:00 / IST=2026-09-10T22:41:13.121459+05:30
## ДЛЯ ТИКЕТА — доставка старых отчётов и backlog64
R04: настоящая находка. Исторический l106 streak→reward partial completion; existing.
/Users/poolpooly/audit/inbox/2048-DAILY-REWARD-COMPLETION-REVIEW-REPORT.md
SHA256 8092c6ba339addabaeb9f074179e4449656cb2deb101d9f2d7bba3e19ef40a42
Статус workflow не менялся. Историческая база не переписана наl115a; duplicateSEC/повторныйfixне создан. Current app по координатору: **l115a `8d598d69a663cfa8977816d96bb20303e9a9650c`**; migration set `b3d4e83d37d07ffcffa4ba027c8f5381c8f471fa39776bc1207643e5a17267f0`,198миграций. Это не замена tested SHA в отчётах. Native gateway изменён10.09 16:02Z правкой WEB-597 (`stasisSnoopIngressSpike.js`, `bargeInPlayback.js`) поверх живого снимка; полное равенство репозиторию не заявлено. Правила installed-vs-repo остаютсяWEB-595. Самостоятельных prod/host действий lead не выполнял.
Воркер
не привязан — привязать:
curl -X POST https://bugs.wool2.online/api/web/assign -H 'content-type: application/json' \
-d '{"issueId":"WEB-555","session":"<имя tmux-сессии>","host":"m4"}'
Обновлён
2026-09-06T10:21:15.865Z