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.