# Go-Live চেকলিস্ট — সিলেট মডেল মাদরাসা ERP

> Last updated: 2026-10-27 (Phase 13)
> নিয়ম: নিচের **Blocking** আইটেমের একটি বিফল হলে উৎপাদনে যাওয়া যাবে না।
> এই চেকলিস্ট পূরণ করে স্বাক্ষর ছাড়া ডিপ্লয় করবেন না; উৎপাদনে ডিপ্লয়ের জন্য পৃথক অনুমোদন লাগবে।

## ০. স্ট্যাটাস সারসংক্ষেপ (Phase 13, 2026-10-27)

| যাচাই | ফলাফল | Evidence |
|---|---|---|
| Full Pest suite (parallel, 4) | ✅ 444 passed / 4,096 assertions, 864.55s, exit 0 | `storage/logs/full-suite-phase13-rerun.log` |
| Quality audit suite | ✅ 17 passed / 417 assertions | `tests/Feature/Quality/*` |
| Static analysis | ✅ PHPStan level 1 — No errors | `phpstan.neon` |
| Style | ✅ Pint — 688 files | `vendor/bin/pint --test` |
| Dependency audit | ✅ No known vulnerabilities | `php artisan security:check` |
| Migrations (fresh → rollback → migrate) | ✅ 107 migrations, 114 tables | SQLite disposable run |
| Permission registry | ✅ 261 permissions / 10 roles, DB↔config parity | `RouteAuditTest` |
| Localization | ✅ EN/BN key parity, no `app.*` leakage | `LocalizationAuditTest` |
| Responsive browser QA | ✅ 8 pages × 3 widths (EN) + 4 pages × 3 widths (BN), no horizontal overflow | Headless Chrome, Phase 13 |
| Backup integrity | ✅ SHA-256 + gzip + 114 tables + manifest | `backup:create` 2026-10-27 15:50 |
| Restore drill | ⚠️ নতুন ডাম্পের disposable restore test-এ dedicated account নেই; Phase 12 ড্রিল (114 tables) সফল | `docs/BACKUP_RESTORE.md` |
| Production deployment | ❌ এখনো করা হয়নি (ইচ্ছাকৃত) | — |

## ১. অনুমোদন ও সীমানা

- [ ] প্রতিষ্ঠান প্রধান/দায়িত্বপ্রাপ্ত কমিটি লিখিত go-live অনুমোদন দিয়েছেন।
- [ ] ডিপ্লয়ের তারিখ, সময়, দায়িত্বপ্রাপ্ত ব্যক্তি ও rollback owner নির্ধারিত।
- [ ] উৎপাদন ডেটাবেস/সার্ভারে পরিবর্তনের অনুমতি নেওয়া হয়েছে; অনুমতি ছাড়া ডিপ্লয় নয়।
- [ ] বাস্তব credentials কোথাও ডকুমেন্ট/চ্যাট/স্ক্রিনশটে নেই; পাসওয়ার্ড ম্যানেজারে আছে।

## ২. কোড, টেস্ট ও নির্ভরতা (Blocking)

- [ ] `composer install --no-dev --optimize-autoloader` সফল।
- [ ] `php artisan test --parallel --processes=4` → সব pass, 0 failure।
- [ ] `vendor/bin/pint --test` → pass।
- [ ] `vendor/bin/phpstan analyse --memory-limit=1G` (level 1) → No errors।
- [ ] `php artisan security:check` → **0 blocking failure** (dependency audit সহ)।
- [ ] `composer audit` → কোনো known vulnerability নেই।
- [ ] Frontend build হালনাগাদ: `public/build` বর্তমান (প্রয়োজনে `npm ci && npm run build`)।

## ৩. Environment (Blocking)

- [ ] `APP_ENV=production`, `APP_DEBUG=false`।
- [ ] `APP_URL` সঠিক HTTPS URL।
- [ ] `APP_KEY` একবার তৈরি ও নিরাপদে সংরক্ষিত; পুরোনো key কপি রাখা (ঘুরিয়ে ফেরানো নয়)।
- [ ] `APP_TIMEZONE=Asia/Dhaka`।
- [ ] `SESSION_DRIVER=database`, `SESSION_ENCRYPT=true`, `SESSION_SECURE_COOKIE=true` (HTTPS)।
- [ ] `CACHE_STORE=database`, `QUEUE_CONNECTION=database` (queue ব্যবহৃত না হলেও schema প্রস্তুত)।
- [ ] `LOG_STACK=daily`, `LOG_LEVEL=warning` (বা `error`)।
- [ ] `.env` ফাইল `600`, git-এ নেই, web root-এর বাইরে।
- [ ] Mail: বাস্তব SMTP (পাসওয়ার্ড রিসেট ও যোগাযোগ ইমেইল কাজ করে) অথবা সচেতনভাবে `log` রাখা হয়েছে।
- [ ] Settings → Security-এ idle timeout (যেমন ৩০ মিনিট) সেট।

## ৪. ডাটাবেস (Blocking)

- [ ] MySQL 8.0, `utf8mb4` / `utf8mb4_unicode_ci`।
- [ ] Application user least-privilege; root ব্যবহার হচ্ছে না।
- [ ] `php artisan migrate --force` → কোনো pending নেই (`migrate:status`)।
- [ ] `php artisan db:seed --class=DatabaseSeeder --force` — শুধু রেফারেন্স ডেটা; **নকল শিক্ষার্থী/লেনদেন নেই**।
- [ ] 10 roles, 261 permissions, ledger accounts, divisions, settings যাচাই (`/roles`, `/settings`)।
- [ ] প্রথম Super Admin `make:superadmin` দিয়ে তৈরি; ডিফল্ট/শেয়ারড পাসওয়ার্ড নেই।
- [ ] প্রোডাকশন শুরুতে `students`, `fee_invoices`, `journal_entries` ইত্যাদি লেনদেন টেবিল খালি (অথবা অনুমোদিত প্রোডাকশন ডেটা)।

## ৫. ব্যাকআপ ও ডিজাস্টার রিকভারি (Blocking)

- [ ] ডিপ্লয়ের ঠিক আগে `php artisan backup:create` সফল; SHA-256 মিলেছে।
- [ ] ডাম্পে 114টি টেবিল, gzip সঠিক, `Dump completed` আছে।
- [ ] ব্যাকআপ অন্য ডিস্ক/ক্লাউডে কপি হয়েছে (শুধু একই সার্ভারে নয়)।
- [ ] Restore procedure ডকুমেন্টেড (`docs/BACKUP_RESTORE.md`) এবং দায়িত্বপ্রাপ্ত ব্যক্তি একবার ড্রিল করেছেন।
- [ ] রিস্টোর-টেস্টের জন্য `BACKUP_RESTORE_*` অ্যাকাউন্ট provision করা (লাইভ DB নয়, disposable DB; ড্রিল শেষে DROP)।
- [ ] Retention (৩০ দিন / ২০টি) প্রতিষ্ঠানের নীতির সাথে মিলেছে।
- [ ] `storage/app/private` ACL সীমিত; ডিস্ক এনক্রিপশন (BitLocker/LUKS) চালু।

## ৬. নিরাপত্তা (Blocking)

- [ ] HTTPS বাধ্যতামূলক, বৈধ সার্টিফিকেট, HTTP→HTTPS redirect।
- [ ] `security:check`-এর ৪টি local warning উৎপাদনে ঠিক হয়েছে: debug/env/secure cookie/idle timeout।
- [ ] `/up` ছাড়া debug/health তথ্য পাবলিক নয়; `.env`, `storage`, `vendor` ওয়েব থেকে inaccessible।
- [ ] `storage:link` তৈরি করা হয়নি (প্রাইভেট ফাইল কন্ট্রোলার দিয়ে)।
- [ ] Super Admin সংখ্যা সীমিত; প্রত্যেকের আলাদা অ্যাকাউন্ট; প্রস্থান/পাসওয়ার্ড নীতি পরীক্ষিত।
- [ ] Login throttling সক্রিয় (`security:check` PASS) এবং session idle middleware সক্রিয়।
- [ ] সার্ভার ফায়ারওয়াল: কেবল 22/80/443 (VPS) বা প্রয়োজনীয় পোর্ট; MySQL বাইরে থেকে বন্ধ।
- [ ] phpMyAdmin/DB admin tool পাবলিক নয় অথবা IP-সীমিত।
- [ ] Log-এ কোনো পাসওয়ার্ড/token লেখা হয় না (audit log-এ শুধু প্রয়োজনীয় metadata)।

## ৭. ভাষা ও UI (Blocking)

- [ ] ডিফল্ট ভাষা English; বাংলা switcher কাজ করে; দুটোতেই সব মূল স্ক্রিন।
- [ ] EN/BN key parity টেস্ট pass; UI-তে `app.settings.*`/`app.reports.*`/`app.portal.*` leakage নেই।
- [ ] Desktop (1280), tablet (768), mobile (375) — Dashboard, Students, Fees, Trial Balance, Report Center, Audit, Settings, Security-এ horizontal overflow নেই।
- [ ] বাংলা ফন্ট (Hind Siliguri) ও ইংরেজি (Poppins) লোড হয়; প্রিন্ট/PDF-এ বাংলা রেন্ডার হয়।
- [ ] Dark ও light — দুটো মোডে contrast/পাঠযোগ্যতা যাচাই।
- [ ] পরিচিত লেবেল/স্লোগান: "এক আলোকিত প্রজন্মের প্রত্যাশায়"।

## ৮. কার্যকরী UAT (Blocking — প্রতিষ্ঠানের প্রতিনিধি)

- [ ] Login/logout/forgot-password/profile; inactive user ব্লক; session idle।
- [ ] Student admission → approve → enrollment → ID generate।
- [ ] Attendance entry ও report; duplicate প্রতিরোধ।
- [ ] Exam → marks → publish → result/merit/report card PDF।
- [ ] Fee invoice → partial payment → receipt → arrears → reconciliation; reversal হলে ledger সমান।
- [ ] Voucher post → trial balance মিলে; reverse করলে ভারসাম্য থাকে।
- [ ] Payroll → approve → pay → payslip; advance/leave।
- [ ] Library issue/return; inventory receipt/issue; stock ও ledger link।
- [ ] Notice/homework/material → portal-এ দৃশ্যমান; guardian/student/teacher access সীমিত।
- [ ] Report Center থেকে PDF/print/CSV/XLSX এক্সপোর্ট।
- [ ] Settings পরিবর্তন (institution/branding/sequences) প্রতিফলিত; audit log-এ রেকর্ড।
- [ ] Data transfer preview/import (নমুনা ফাইল) — ভুল ফাইল নিরাপদে প্রত্যাখ্যাত।
- [ ] Backup create/verify/download (অনুমতি অনুযায়ী)।

## ৯. পারফরম্যান্স ও অপারেশন

- [ ] Hot pages-এ query count যুক্তিসঙ্গত (Phase 13 sample: 19–31 queries; কোনো N+1 ধরা পড়েনি)।
- [ ] সূচক পর্যালোচনা সম্পন্ন (114 টেবিল; FK/unique/search index যাচাই)।
- [ ] বড় তালিকায় pagination কাজ করে; export-এ memory limit যথেষ্ট।
- [ ] Audit search বড় লগে ধীর হলে (`LIKE`) index/আর্কাইভ পরিকল্পনা নোট করা।
- [ ] Disk space ও log rotation মনিটরিং সক্রিয়।
- [ ] Cron: দৈনিক `backup:create` (যদি চালু) সফল; ব্যর্থ হলে alert।
- [ ] Queue/Scheduler: বর্তমানে ব্যবহৃত নয় — নিশ্চিত করা হয়েছে; ভবিষ্যতে যোগ হলে service/cron প্রস্তুত।
- [ ] `/up` মনিটরিং (UptimeRobot/Monit) ও alert recipient নির্ধারিত।

## ১০. ডিপ্লয় ও রোলব্যাক প্রস্তুতি

- [ ] `docs/DEPLOYMENT_WINDOWS_XAMPP.md` / `DEPLOYMENT_CPANEL.md` / `DEPLOYMENT_VPS.md` অনুসরণ করা হচ্ছে।
- [ ] আগের release/zip ও ডাটাবেস ডাম্প হাতের কাছে।
- [ ] Maintenance mode ও rollback ধাপ (কোড + DB) মহড়া হয়েছে।
- [ ] Rollback owner ও যোগাযোগ চ্যানেল নির্ধারিত।
- [ ] ডিপ্লয়ের পর smoke: `/up`, login, dashboard, student list, fee list, trial balance, backup page।

## ১১. চূড়ান্ত সিদ্ধান্ত

| প্রশ্ন | উত্তর |
|---|---|
| কোনো Blocking আইটেম বিফল? | হ্যাঁ / না |
| Known limitations গ্রহণযোগ্য ও লিখিত? | হ্যাঁ / না |
| Rollback প্রস্তুত? | হ্যাঁ / না |
| অনুমোদনকারী | ____________________ |
| তারিখ/সময় | ____________________ |
| ডিপ্লয় সম্পাদনকারী | ____________________ |

> **নিয়ম:** critical test ব্যর্থ থাকলে, ব্যাকআপ যাচাই না হলে, অথবা অনুমোদন ছাড়া উৎপাদনে ডিপ্লয় করা যাবে না। “Production ready” দাবি কেবল সব Blocking pass ও UAT স্বাক্ষরের পর।

## ১২. Known limitations (Phase 13 অনুযায়ী)

1. PHPStan level 1 পাস; level 5-এ ৬১৪টি type-annotation সংক্রান্ত finding (runtime bug নয়) — ভবিষ্যতে ধাপে ধাপে কমানো।
2. Audit log search `LIKE`-ভিত্তিক; অত্যন্ত বড় লগে ধীর হতে পারে — প্রয়োজনে full-text index/আর্কাইভ।
3. Application DB account ইচ্ছাকৃতভাবে CREATE/DROP করতে পারে না; disposable restore drill-এর জন্য আলাদা অ্যাকাউন্ট দরকার।
4. বর্তমানে কোনো scheduled task/queued job নেই; ব্যাকআপ cron ঐচ্ছিক।
5. CSP header এখনো যোগ করা হয়নি (অন্য security headers আছে); CDN/inline script নীতি নির্ধারণ করে যোগ করতে হবে।
6. এনভায়রনমেন্টে MySQL/host অনিয়মিত restart হয়েছে (Phase 13 QA-তে ৩ বার); উৎপাদনে service watchdog/মনিটরিং নিশ্চিত করুন।
