docs(ops): beta gates checklist, Railway bind, Actions env setup; dependabot dealix; SECURITY policy; verification log

Made-with: Cursor
This commit is contained in:
Sami Assiri 2026-05-01 14:06:42 +03:00
parent f79c69ff25
commit 58ee025b45
10 changed files with 159 additions and 4 deletions

10
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,10 @@
version: 2
updates:
- package-ecosystem: pip
directory: /dealix
schedule:
interval: weekly
open-pull-requests-limit: 5
labels:
- dependencies
- dealix

20
SECURITY.md Normal file
View File

@ -0,0 +1,20 @@
# Security policy
## Reporting a vulnerability
Please **do not** open a public GitHub issue for security reports.
1. Open a **private security advisory** for this repository (GitHub → **Security****Advisories****Report a vulnerability**), or
2. Contact the repository maintainers through a private channel you already use for this project.
Include:
- A short description of the issue and affected components (paths or features).
- Steps to reproduce (proof-of-concept) if safe to share.
- Whether you believe the issue is actively exploitable in production.
We will aim to acknowledge receipt within a reasonable timeframe and coordinate remediation and disclosure.
## Secrets
Never commit real API keys, tokens, `DATABASE_URL`, or Moyasar keys. Use Railway variables and GitHub Actions secrets. See `dealix/docs/SECURITY_SECRET_ROTATION_CHECKLIST.md` if a secret may have been exposed.

View File

@ -0,0 +1,40 @@
# بوابات إغلاق Paid Private Beta — قائمة مرجعية
استخدم هذه القائمة قبل أول عميل إنتاج أو إرسال حي. التفاصيل في الملفات المرتبطة.
## أمن وأسرار
- [ ] لا مفاتيح في الكود أو المحادثات؛ كل القيم في Railway / GitHub Secrets فقط.
- [ ] بعد أي تسريب: [`SECURITY_SECRET_ROTATION_CHECKLIST.md`](SECURITY_SECRET_ROTATION_CHECKLIST.md).
- [ ] `API_KEYS` مفعّل على الإنتاج/staging المقفل — [`api/security/api_key.py`](../api/security/api_key.py).
## تقنية ونشر
- [ ] فرع النشر `ai-company` (أو السياسة المعتمدة) — [`docs/ops/GITHUB_AI_COMPANY_TRACK.md`](ops/GITHUB_AI_COMPANY_TRACK.md).
- [ ] Railway: Root `dealix`، `DATABASE_URL`، `APP_SECRET_KEY`, `APP_URL`, `CORS_ORIGINS` — [`docs/ops/RAILWAY_AI_COMPANY_BIND.md`](ops/RAILWAY_AI_COMPANY_BIND.md).
- [ ] `smoke_staging` ناجح — [`LAUNCH_DAY_VERIFICATION_LOG.md`](LAUNCH_DAY_VERIFICATION_LOG.md).
## قانون وخصوصية (PDPL)
- [ ] شروط + خصوصية منشورة.
- [ ] DPA pilot جاهز أو موقّع — [`DPA_PILOT_TEMPLATE.md`](DPA_PILOT_TEMPLATE.md).
- [ ] PDPL: [`SECURITY_PDPL_CHECKLIST.md`](SECURITY_PDPL_CHECKLIST.md)، [`PRIVACY_PDPL_READINESS.md`](PRIVACY_PDPL_READINESS.md)، [`DATA_MAP.md`](DATA_MAP.md).
## فوترة
- [ ] Moyasar **sandbox** للبيتا حتى الموافقة على live — [`BILLING_RUNBOOK.md`](BILLING_RUNBOOK.md).
- [ ] `MOYASAR_WEBHOOK_SECRET` مضبوط عند تفعيل الويبهوك.
## واتساب
- [ ] `WHATSAPP_ALLOW_LIVE_SEND=false` ما لم يُوافَق مع opt-in — [`PRIVATE_BETA_RUNBOOK.md`](PRIVATE_BETA_RUNBOOK.md)، [`WHATSAPP_OPERATOR_FLOW.md`](WHATSAPP_OPERATOR_FLOW.md).
## تشغيل وتجاري
- [ ] SOP يومي — [`docs/ops/SOP_REVENUE_ENGINE_DAILY.md`](ops/SOP_REVENUE_ENGINE_DAILY.md).
- [ ] إغلاق أول عملاء — [`docs/business/CLOSE_FIRST_CUSTOMERS_14D.md`](business/CLOSE_FIRST_CUSTOMERS_14D.md).
## GitHub Actions (اختياري لكن موصى به)
- [ ] أسرار `STAGING_BASE_URL` / `STAGING_API_KEY` — [`docs/ops/GITHUB_ACTIONS_ENV_SETUP.md`](ops/GITHUB_ACTIONS_ENV_SETUP.md).
- [ ] لاحقاً `DEALIX_API_BASE` / `DEALIX_API_KEY` لآلة الإيراد اليومية.

View File

@ -5,7 +5,9 @@
**بعد أي تسريب لمفتاح:** [`SECURITY_SECRET_ROTATION_CHECKLIST.md`](SECURITY_SECRET_ROTATION_CHECKLIST.md). **بعد أي تسريب لمفتاح:** [`SECURITY_SECRET_ROTATION_CHECKLIST.md`](SECURITY_SECRET_ROTATION_CHECKLIST.md).
**تسجيل نتائج التشغيل:** [`LAUNCH_DAY_VERIFICATION_LOG.md`](LAUNCH_DAY_VERIFICATION_LOG.md). **تسجيل نتائج التشغيل:** [`LAUNCH_DAY_VERIFICATION_LOG.md`](LAUNCH_DAY_VERIFICATION_LOG.md).
**SOP يومي للإيراد:** [`ops/SOP_REVENUE_ENGINE_DAILY.md`](ops/SOP_REVENUE_ENGINE_DAILY.md). **SOP يومي للإيراد:** [`ops/SOP_REVENUE_ENGINE_DAILY.md`](ops/SOP_REVENUE_ENGINE_DAILY.md).
**تتبع الإطلاق العام:** [`PUBLIC_LAUNCH_GO_NO_GO_TRACKER.md`](PUBLIC_LAUNCH_GO_NO_GO_TRACKER.md). **تتبع الإطلاق العام:** [`PUBLIC_LAUNCH_GO_NO_GO_TRACKER.md`](PUBLIC_LAUNCH_GO_NO_GO_TRACKER.md).
**بوابات البيتا (قائمة واحدة):** [`BETA_PRIVATE_GATES_CHECKLIST.md`](BETA_PRIVATE_GATES_CHECKLIST.md).
**أسرار Actions:** [`ops/GITHUB_ACTIONS_ENV_SETUP.md`](ops/GITHUB_ACTIONS_ENV_SETUP.md).
## 0) قبل 2448 ساعة ## 0) قبل 2448 ساعة

View File

@ -6,11 +6,17 @@
| الخطوة | الأمر | النتيجة | التاريخ | | الخطوة | الأمر | النتيجة | التاريخ |
|--------|--------|---------|---------| |--------|--------|---------|---------|
| compileall | `python -m compileall api auto_client_acquisition integrations db core -q` | OK | 2026-05-01 | | compileall | `python -m compileall api auto_client_acquisition db` | OK | 2026-05-01 |
| pytest | `python -m pytest -q --no-cov` | 526 passed, 6 skipped | 2026-05-01 | | pytest | `python -m pytest -q --no-cov` | 526 passed, 6 skipped | 2026-05-01 |
| print_routes | `python scripts/print_routes.py` | ROUTE_CHECK_OK no duplicate method+path | 2026-05-01 | | print_routes | `python scripts/print_routes.py` | ROUTE_CHECK_OK no duplicate method+path | 2026-05-01 |
| smoke_inprocess | `python scripts/smoke_inprocess.py` | SMOKE_INPROCESS_OK | 2026-05-01 | | smoke_inprocess | `python scripts/smoke_inprocess.py` | SMOKE_INPROCESS_OK | 2026-05-01 |
## Git / CI (فرع `ai-company`)
| الخطوة | الإجراء | النتيجة | التاريخ |
|--------|---------|---------|---------|
| push | فرع `ai-company` مرفوع إلى `origin` مع `dealix/` و`.github/workflows/dealix-*.yml` | OK — راجع Actions **Dealix API CI** على GitHub | 2026-05-01 |
## Staging (يتطلب `STAGING_BASE_URL`) ## Staging (يتطلب `STAGING_BASE_URL`)
| الخطوة | الأمر | النتيجة | التاريخ | | الخطوة | الأمر | النتيجة | التاريخ |

View File

@ -1,6 +1,7 @@
# Private Beta — دليل تشغيل Dealix # Private Beta — دليل تشغيل Dealix
**يوم التدشين (فهرس ساعة بساعة):** [`LAUNCH_DAY_RUNBOOK_AR.md`](LAUNCH_DAY_RUNBOOK_AR.md). **يوم التدشين (فهرس ساعة بساعة):** [`LAUNCH_DAY_RUNBOOK_AR.md`](LAUNCH_DAY_RUNBOOK_AR.md).
**قائمة بوابات موحّدة:** [`BETA_PRIVATE_GATES_CHECKLIST.md`](BETA_PRIVATE_GATES_CHECKLIST.md).
## الجمهور ## الجمهور

View File

@ -1,6 +1,7 @@
# نشر Staging — Dealix API # نشر Staging — Dealix API
مسار GitHub الموصى لخط «AI Company» والفرع `ai-company`: [`docs/ops/GITHUB_AI_COMPANY_TRACK.md`](ops/GITHUB_AI_COMPANY_TRACK.md). مسار GitHub الموصى لخط «AI Company» والفرع `ai-company`: [`docs/ops/GITHUB_AI_COMPANY_TRACK.md`](ops/GITHUB_AI_COMPANY_TRACK.md).
ربط Railway خطوة بخطوة: [`docs/ops/RAILWAY_AI_COMPANY_BIND.md`](ops/RAILWAY_AI_COMPANY_BIND.md).
## منصة موصى بها ## منصة موصى بها

View File

@ -0,0 +1,28 @@
# أسرار GitHub Actions — Dealix
**المسار في GitHub:** Repository → **Settings****Secrets and variables****Actions****New repository secret**.
الريبو: [VoXc2/system-prompts-and-models-of-ai-tools](https://github.com/VoXc2/system-prompts-and-models-of-ai-tools/settings/secrets/actions).
## دخان Staging (يدوي)
| السر | الوصف |
|------|--------|
| `STAGING_BASE_URL` | أصل HTTPS للتطبيق المنشور، بدون شرطة مائلة أخيرة (مثلاً `https://xxx.up.railway.app`) |
| `STAGING_API_KEY` | اختياري؛ إذا فرض التطبيق `X-API-Key` على الطلبات |
Workflow: [`.github/workflows/dealix-staging-smoke.yml`](../../../.github/workflows/dealix-staging-smoke.yml) — من تبويب **Actions** اختر **Dealix staging smoke****Run workflow**.
## Daily Revenue Machine
| السر | الوصف |
|------|--------|
| `DEALIX_API_BASE` | أصل الـ API (مثل `https://host` بدون `/` زائدة) |
| `DEALIX_API_KEY` | مفتاح يُرسل كـ `Authorization: Bearer …` |
Workflow: [`.github/workflows/dealix-daily-revenue-machine.yml`](../../../.github/workflows/dealix-daily-revenue-machine.yml).
**جدولة cron:** تعمل من **الفرع الافتراضي** للريبو (غالباً `main`)؛ راجع تعليق الملف.
## CI الأساسي
**Dealix API CI** لا يحتاج أسرار للاختبارات الافتراضية (مفاتيح وهمية داخل YAML). لا تضع مفاتيح إنتاج في CI.

View File

@ -34,3 +34,11 @@ GitHub **لا** يشغّل workflows من `dealix/.github/workflows/` كمصدر
## الريبو العام ## الريبو العام
[https://github.com/VoXc2/system-prompts-and-models-of-ai-tools](https://github.com/VoXc2/system-prompts-and-models-of-ai-tools) [https://github.com/VoXc2/system-prompts-and-models-of-ai-tools](https://github.com/VoXc2/system-prompts-and-models-of-ai-tools)
## Railway (خطوات اللوحة)
[`RAILWAY_AI_COMPANY_BIND.md`](RAILWAY_AI_COMPANY_BIND.md)
## أسرار GitHub Actions
[`GITHUB_ACTIONS_ENV_SETUP.md`](GITHUB_ACTIONS_ENV_SETUP.md)

View File

@ -0,0 +1,39 @@
# ربط Railway — مسار AI Company (`ai-company`)
نفّذ في [لوحة Railway](https://railway.app) بعد أن يكون الفرع [`ai-company`](https://github.com/VoXc2/system-prompts-and-models-of-ai-tools/tree/ai-company) مرفوعاً على GitHub.
## 1) المشروع والخدمة
1. **New Project****Deploy from GitHub** → اختر `VoXc2/system-prompts-and-models-of-ai-tools`.
2. أنشئ خدمة **Web** (أو عدّل الخدمة الحالية) لتشغيل Dealix API.
## 2) إعدادات النشر (إلزامي)
| الحقل | القيمة |
|--------|--------|
| **Branch** | `ai-company` |
| **Root Directory** | `dealix` |
| **Start Command** | `uvicorn api.main:app --host 0.0.0.0 --port ${PORT:-8000}` |
مرجع: [`STAGING_DEPLOYMENT.md`](../STAGING_DEPLOYMENT.md).
## 3) قاعدة البيانات
1. أضف **PostgreSQL** من Railway أو استخدم `DATABASE_URL` خارجي.
2. اربط متغير **`DATABASE_URL`** بخدمة التطبيق (غالباً يُحقن تلقائياً عند الربط).
## 4) متغيرات البيئة
- انسخ **الأسماء** من [`.env.staging.example`](../../.env.staging.example) (staging) أو [`.env.example`](../../.env.example) (production لاحقاً).
- لا تُرفع `.env` إلى Git.
- تأكد من: `APP_SECRET_KEY`, `APP_URL`, `APP_ENV`, `CORS_ORIGINS`, `MOYASAR_*`، و`DAILY_EMAIL_LIMIT` (وليس `EMAIL_DAILY_LIMIT`)، و`WHATSAPP_ALLOW_LIVE_SEND=false` للبيتا حتى الموافقة.
## 5) التحقق بعد النشر
1. المتصفح: `https://<your-host>/health` → 200.
2. محلياً: `STAGING_BASE_URL=https://<host>` ثم `python scripts/smoke_staging.py` من مجلد `dealix`.
3. GitHub Actions: شغّل يدوياً **Dealix staging smoke** بعد ضبط أسرار `STAGING_BASE_URL` / `STAGING_API_KEY` — انظر [`GITHUB_ACTIONS_ENV_SETUP.md`](GITHUB_ACTIONS_ENV_SETUP.md).
## 6) مسار Git الكامل
[`GITHUB_AI_COMPANY_TRACK.md`](GITHUB_AI_COMPANY_TRACK.md)