# گزارش اصلاح نهایی — Zero-Input Child Isolation

## خطای گزارش‌شده

سرور مقصد cPanel واقعی نداشت و اجرای `/usr/local/cpanel/bin/uapi` به فایل داخلی ناموجود وابسته بود. همچنین یوزر MySQL معمولی حتی با `ALL PRIVILEGES` روی یک دیتابیس، اجازه ساخت دیتابیس و یوزر جدید در سطح سرور را ندارد.

## راه‌حل نهایی

وابستگی ساخت ربات فرزند به کنترل‌پنل و مجوزهای سطح سرور کاملاً حذف شد. Installer فقط دیتابیس مادر را دریافت می‌کند و هر ربات فرزند به‌طور خودکار یک namespace اختصاصی جدول دریافت می‌کند.

## اصلاحات کلیدی

- حذف اجرای cPanel UAPI از مسیر ساخت ربات
- نادیده‌گرفتن خودکار کانفیگ‌های قدیمی `auto` و `cpanel_cli`
- حذف نیاز به Child DB، API Token، Admin DB User و Grant Host
- تولید پیشوند یکتا برای هر Secret
- Wrapper اختصاصی برای PDO و MySQLi
- پوشش کوئری‌های `SELECT`, `INSERT`, `UPDATE`, `DELETE`, `JOIN`, `ALTER`, `DROP`, `CREATE`, `SHOW TABLES` و `SHOW COLUMNS`
- پیشوندگذاری توابع عمومی `select()` و `update()`
- بررسی فیزیکی جدول‌های ساخته‌شده پس از نصب
- حذف فقط جدول‌های مربوط به همان ربات
- ساخت پوشه Registry و Backup اختصاصی برای هر ربات
- حذف Installer و Shell Installer قالب از سورس تولیدشده
- جلوگیری از بکاپ کل دیتابیس مادر با `mysqldump`
- Rollback کامل ساخت ربات
- تبدیل خودکار ستون قدیمی `isolation_mode` از ENUM به VARCHAR برای پذیرش `table_namespace`
- ابزار بازسازی امن ربات‌های قدیمی با بکاپ و Rollback
- فایروال SQL برای مسدودکردن جدول‌های مادر، namespace ربات دیگر، cross-database و دستورات مدیریتی
- جلوگیری از برخورد بسیار نادر namespace با بررسی جدول‌های موجود پیش از ساخت ربات
- حذف کامل Installer قدیمی قالب فرزند از خود بسته
- بازنشانی جدول‌های ربات به‌صورت محلی و محدود به همان namespace
- محافظت وب از تمام مسیرهای غیرعمومی پروژه

## محدودیت صادقانه

تمام ربات‌ها از یک دیتابیس فیزیکی و یک اکانت MySQL استفاده می‌کنند، زیرا هاست اجازه ساخت منابع MySQL جدید نمی‌دهد. جداسازی در سطح جدول و لایه دسترسی برنامه انجام شده است. برای جداسازی فیزیکی و یوزر MySQL مستقل، دسترسی Root یا API رسمی کنترل‌پنل لازم است.
