record the 2026-09-25 SMS deploy: 0580aec is live, Kavenegar on, test user 17 to purge

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-25 12:34:37 +03:30
parent 0580aec7b0
commit 8b510597a6
2 changed files with 28 additions and 5 deletions

View File

@@ -294,9 +294,12 @@ reliably pull the final answer out of a solution and produced ~40% broken output
- Grades 8–12 are fully covered: every node holds a four-question quiz. 39 of the 145
nodes in grades 3/6/7 (the other team's books) still hold fewer than four; none is
empty, so every node still plays.
- Kavenegar is unconfigured, so `POST /api/auth/otp/request` returns 503. With `DEBUG=0`
there is no way to log into the API without creating an `OTPCode` row in the admin
(`/admin/accounts/otpcode/add/`) — this is how to hand a tester a working login.
- Kavenegar is live on the server since 2026-09-25 (`/api/health` → `sms: true`), so every
OTP request costs real credit. Real SMS *delivery* to a phone was not yet observed by us;
sending is plain `sms/send` from the account's default line, not a `verify/lookup`
template, so numbers that block promotional SMS may never get the code. An `OTPCode`
row made in the admin (`/admin/accounts/otpcode/add/`) still hands a tester a login
without SMS.
## The server: read this before running anything on it
@@ -396,6 +399,24 @@ preferred setup, because there is then no key to leak. **Never let the server ru
`django-insecure-…` fallback from `config/settings.py`: that string is committed here, so
anyone who can read this repo can forge a token for any user.**
## وضعیت ۲۰۲۶-۰۹-۲۵ (عصر) — پیامکِ واقعی روشن شد
**روی سرور:** `0580aec` دیپلوی و سرویس واقعاً ری‌استارت شد (۱۲:۳۲). `KAVENEGAR_API_KEY`
در `.env` سرور و لوکال است (حسابِ Master، ~۳۲۶ هزار ریال اعتبار در آن روز). بکاپ‌های پیش از آن:
`.deploy-backups/env-before-kavenegar-20260925-122959` و
`db-before-otp-hardening-20260925-122959.sqlite3`.
- **از این به بعد هر درخواستِ OTP پول است.** برای همین: شماره به `09XXXXXXXXX` نرمال
می‌شود و غیرِ موبایلِ ایران ۴۰۰ می‌گیرد؛ cooldown و سقفِ روزانه‌ی هر شماره (۱۰) و سقفِ
روزانه‌ی کلِ سامانه (۳۰۰، ضدِ SMS pumping) در دیتابیس شمرده می‌شوند نه کشِ per-worker.
جزئیات در بندِ ۱۷ِ `docs/security-before-production.md`، تست‌ها در `accounts/tests_otp_limits.py`.
- مسیرِ کاملِ کاربرِ تازه روی سرورِ زنده سبز شد، **بدونِ پیامکِ واقعی**: کد مستقیم در
دیتابیس ساخته شد. کاربرِ تستیِ آن **کاربرِ ۱۷ با شماره‌ی `09000000001`** (نام «کاربر
تست»، یک جزیره تمام‌شده) روی پروداکشن مانده و مثلِ داده‌ی دمو پیش از کاربرِ واقعی باید پاک شود.
- رسیدنِ پیامک به یک گوشیِ واقعی را هنوز ما ندیده‌ایم؛ اولین تستِ سینیور همین است.
- ⚠️ زیاد SSH زدن پشتِ سرِ هم یک بار «Permission denied» با رمزِ درست داد؛ با
`ControlMaster` (سوکت در مسیرِ کوتاهِ `/tmp`، macOS سقفِ ۱۰۴ بایت دارد) یک اتصال باز کنید.
## وضعیت ۲۰۲۶-۰۹-۲۵ — این را اول بخوان
کیفیتِ دستیار و گیرِ نقشه (جزئیات و دلیل‌ها در `docs/architecture.md`). **۵۷۹ تست سبز.**