From 0cad9bae18059c4af5d3d3afc4f6c000792e32e5 Mon Sep 17 00:00:00 2001 From: AP Date: Wed, 21 Oct 2026 16:11:04 +0200 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D1=8F:=20R-17=20=D1=81=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BD=D0=BE,=20Q-19=20=D1=80=D0=B5=D1=88=D1=91?= =?UTF-8?q?=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - R-17: location /_next/hmr во всех dev-блоках nginx, горячая перезагрузка держится без переподключений; этап 1a закрыт полностью. - Q-19: крайние случаи реферального бонуса днями подтверждены (D-025). Co-Authored-By: Claude Opus 5.5 --- docs/00-index.md | 2 +- docs/04-billing.md | 1 - docs/09-infrastructure.md | 2 +- docs/decisions/D-025-referral-days.md | 4 ++-- docs/stages/stage-1a-foundation.md | 9 +++------ docs/stages/stage-1g-referral.md | 6 +----- 6 files changed, 8 insertions(+), 16 deletions(-) diff --git a/docs/00-index.md b/docs/00-index.md index bb8b894..b0be8e4 100644 --- a/docs/00-index.md +++ b/docs/00-index.md @@ -61,6 +61,7 @@ | Q-09 | Часовой пояс часов поддержки | Московское время | [01-product.md](01-product.md), раздел 11 | | Q-15 | Защита prod от сессий Claude | Отдельно не нужна: сессии Claude работают под vx_dev без доступа к prod, а под vx_prod нет ни редактора, ни ИИ-агентов | [D-004](decisions/D-004-environments.md) | | Q-16 | Где принимать почту поддержки | Ящики на внешнем почтовом хостинге, их настраивает пользователь (R-18). На этапе 2 письма из них забирает Chatwoot; до этого на сайте только адрес | [09-infrastructure.md](09-infrastructure.md), раздел 6; [08-integrations.md](08-integrations.md), раздел 4 | +| Q-19 | Реферальный бонус днями: крайние случаи | Приглашённому тоже 30 дней; ключ готовится — дни добавятся при выдаче; «последний ключ» — купленный последним из неистёкших и неотменённых; такого нет — дни ждут следующего ключа; возврат заказа приглашённого бонус не отменяет | [D-025](decisions/D-025-referral-days.md); [04-billing.md](04-billing.md), раздел 11 | ### 4.2 Открытые @@ -75,4 +76,3 @@ | Q-14 | Куда складывать бэкапы prod-базы | — | 1h | | Q-17 | Нужны ли разные аккаунты одного провайдера для разных брендов | Пока нет. Если понадобятся — платёжной системе добавим поле «только для сайтов» | 4 | | Q-18 | Кто запускает выкладку в prod | Пользователь одной командой; по желанию — sudo-правило, разрешающее vx_dev запускать только команду выкладки от имени vx_prod | 1h | -| Q-19 | Реферальный бонус днями: крайние случаи | Приглашённому тоже 30 дней; ключ готовится — дни добавятся при выдаче; «последний ключ» — купленный последним из неистёкших и неотменённых; такого нет — дни ждут следующего ключа; возврат заказа приглашённого бонус не отменяет ([D-025](decisions/D-025-referral-days.md)) | 1g | diff --git a/docs/04-billing.md b/docs/04-billing.md index 62218d1..3c76119 100644 --- a/docs/04-billing.md +++ b/docs/04-billing.md @@ -120,7 +120,6 @@ a. Приглашённому — на ключ из заказа, который выполнил условие. b. Пригласившему — на последний купленный ключ в статусе `provisioning`, `active` или `grace`. Такого нет — дни ждут и добавляются к следующему ключу пригласившего, когда он будет создан. 5. Возврат по заказу приглашённого бонус пригласившего не отменяет; злоупотребления разбирает администратор. -6. Крайние случаи (сколько дней приглашённому, какой ключ пригласившего, возврат) — предложение по Q-19, см. D-025. ## 12. Уведомления diff --git a/docs/09-infrastructure.md b/docs/09-infrastructure.md index fe94881..1dc3a09 100644 --- a/docs/09-infrastructure.md +++ b/docs/09-infrastructure.md @@ -106,5 +106,5 @@ vx — личный пользователь администратора, к п | R-14 | 4 | Аккаунты платёжных систем (сначала тестовые), адреса вебхуков | | | R-15 | 1h | По желанию (Q-18): sudo-правило, разрешающее vx_dev запускать от имени vx_prod только команду выкладки | | | R-16 | 1h | По желанию: правило nftables — к 127.0.0.1:3000 подключаются только `www-data` (nginx) и vx_prod ([10-security.md](10-security.md), раздел 7) | | -| R-17 | 1a | nginx dev: отдельный `location /_next/hmr` с `proxy_read_timeout 1h` во всех трёх server-блоках dev на 443: `dev.plc.veilix.cc`, сайты и кабинеты, `dev.tg.*`. В Next 16.4 WebSocket горячей перезагрузки — `/_next/hmr`, и сервер может молчать дольше 30 секунд, а `nginx.conf` закрывает соединение после 30 секунд тишины (`proxy_read_timeout 30`) | в работе: сначала в задаче был старый путь `/_next/webpack-hmr`. Блоки с ним в `dev.plc` и `dev.tg.*` не срабатывают — их переименовать; в блоке сайтов и кабинетов блока нет | +| R-17 | 1a | nginx dev: отдельный `location /_next/hmr` с `proxy_read_timeout 1h` во всех трёх server-блоках dev на 443: `dev.plc.veilix.cc`, сайты и кабинеты, `dev.tg.*`. В Next 16.4 WebSocket горячей перезагрузки — `/_next/hmr`, и сервер может молчать дольше 30 секунд, а `nginx.conf` закрывает соединение после 30 секунд тишины (`proxy_read_timeout 30`) | сделано: на всех семи dev-хостах соединение держится 70 секунд без сообщений | | R-18 | 1h | Почта поддержки (Q-16): ящики `help@veilix.app` и `help@veilixvpn.com` на почтовом хостинге, MX-записи доменов; хостинг — в SPF (раздел 6). До этого письма администраторам и заявки видны только в админке и журнале писем | | diff --git a/docs/decisions/D-025-referral-days.md b/docs/decisions/D-025-referral-days.md index c2a29d0..982b0f0 100644 --- a/docs/decisions/D-025-referral-days.md +++ b/docs/decisions/D-025-referral-days.md @@ -1,6 +1,6 @@ # D-025. Реферальный бонус — дни срока ключа -Статус: принято, 21.10.2026. Заменяет денежный бонус из макета (Q-02). Крайние случаи — предложение по Q-19. +Статус: принято, 21.10.2026. Заменяет денежный бонус из макета (Q-02); крайние случаи — Q-19. ## Контекст @@ -14,7 +14,7 @@ 4. Условие, проверка самоприглашений и границы сайта прежние ([04-billing.md](../04-billing.md), раздел 11). 5. Начисление — продление без оплаты. Тот же механизм у «Продлить вручную» в админке: запись в коллекции `key-extensions` ([04-billing.md](../04-billing.md), раздел 6.4). -## Крайние случаи (предложение, Q-19) +## Крайние случаи (Q-19) 1. «Месяц» приглашённому — тоже 30 дней: одна настройка на обе стороны. 2. Ключ ещё готовится (`provisioning`) — дни добавятся при выдаче: срок идёт с выдачи. diff --git a/docs/stages/stage-1a-foundation.md b/docs/stages/stage-1a-foundation.md index b1ca598..abe9e09 100644 --- a/docs/stages/stage-1a-foundation.md +++ b/docs/stages/stage-1a-foundation.md @@ -1,6 +1,6 @@ # Этап 1a. Фундамент -Статус: готово 21.10.2026. Остался R-17 (root, nginx), см. раздел 6. +Статус: готово 21.10.2026. ## 1. Цель @@ -40,7 +40,7 @@ Root: R-00…R-06 ([09-infrastructure.md](../09-infrastructure.md), раздел ## 6. Итоги -Проверено curl через nginx и напрямую на 127.0.0.1:3100: пункты 2, 3, 5, 6 и 7, а также HTTPS, `lang`, `data-site`, скрипт темы в `` и токены обоих брендов в CSS. Внешний вид сайтов и кабинета и админку (пункты 1 и 4) проверил пользователь в браузере, первый администратор создан. +Проверено curl через nginx и напрямую на 127.0.0.1:3100: пункты 2, 3, 5, 6 и 7, а также HTTPS, `lang`, `data-site`, скрипт темы в `` и токены обоих брендов в CSS. Внешний вид сайтов и кабинета и админку (пункты 1 и 4) проверил пользователь в браузере, первый администратор создан. Горячая перезагрузка через nginx (R-17): WebSocket `/_next/hmr` на всех dev-хостах держится дольше 30 секунд без сообщений. Решения и отклонения от плана: @@ -53,7 +53,4 @@ Root: R-00…R-06 ([09-infrastructure.md](../09-infrastructure.md), раздел 7. Mass в USD — $6.99 и $69.90: сначала временные, утверждены в Q-02. 8. Адаптация макетов: переключатели для 5 языков и валюты, «Политика cookies» в подвале, подписи кабинета mass как у dedicated ([07-frontend.md](../07-frontend.md), раздел 7). -Осталось: - -1. R-17 (root): `location /_next/hmr` с большим `proxy_read_timeout` в nginx dev — иначе горячая перезагрузка переподключается после 30 секунд тишины. -2. На этап 1b: серверная отрисовка 404 и 500 ([07-frontend.md](../07-frontend.md), раздел 7.16), цвета карты, пересборка страниц по событию из Payload. +Осталось на этап 1b: серверная отрисовка 404 и 500 ([07-frontend.md](../07-frontend.md), раздел 7.16), цвета карты, пересборка страниц по событию из Payload. diff --git a/docs/stages/stage-1g-referral.md b/docs/stages/stage-1g-referral.md index 440ba75..668ce7c 100644 --- a/docs/stages/stage-1g-referral.md +++ b/docs/stages/stage-1g-referral.md @@ -16,11 +16,7 @@ 6. Страница `/referral` по макету: приглашено, начислено месяцев, ожидает; ссылка с копированием; приглашённые с замаскированной почтой. Условия под ссылкой — про дни, а не про списание ([07-frontend.md](../07-frontend.md), раздел 7). 7. Шаблон `referral_reward` на RU и EN; список приглашений в админке. -## 3. Перед стартом - -Q-19 — крайние случаи бонуса днями. - -## 4. Готово, когда +## 3. Готово, когда 1. A делится ссылкой → B регистрируется → B оплачивает первый заказ → к ключу B и к последнему ключу A добавлено по 30 дней. 2. У A нет подходящего ключа — дни добавляются к следующему ключу A.