Mode: server; workspace root: /home/scola/odoo; repo kerja yang boleh diubah: scola-fe-v2 dan custom_addons_scola/gcgscola; odoo/, addons/, dan custom_addons/openeducat_* tetap read-only.
Deteksi workspace: root berisi scola-fe-v2, custom_addons_scola, odoo, dll; worktree sedang dirty sehingga eksekusi nanti harus non-destructive dan tidak merevert perubahan user.
Hasil ekstraksi QA_Scola-Runbook.csv: 57 row terisi dengan status PASS 19, FAIL 33, Not Tested 3, Need Improvement 1, plus 1 malformed tail row kosong.
Evidence audit: 34 frontend unit/menu specs dan 7 backend unit specs relevan lulus; server dev aktif di DB scoladev via odoo-devscola.conf port 8074, sedangkan beberapa baseline QA masih mengarah ke 8069, jadi ada risiko false-negative environment.
TC_RB_OT_003: Retest. Scope parent untuk e-raport sudah ada di FE/BE dan test lulus; bug ini lebih mungkin stale atau data leak lama.
TC_RB_OT_004: Retest. Parent billing API dan test sudah ada; perlu repro live untuk memastikan masalah bukan seed/projection lama.
TC_RB_OT_006: Retest. Jalur parent violations sudah ada; perlu verifikasi live apakah problem sinkronisasi data masih nyata.
TC_RB_OT_007: Retest. Jalur parent achievements juga sudah ada; indikasi bug sekarang lemah tanpa repro baru.
TC_RB_OT_008: Valid-likely. Flow parent permit masih memakai layar generik multi-scope, jadi bug “tersimpan tapi tidak muncul di list parent” masih kredibel.
TC_RB_OT_09: Valid. ParentTeacherChat.vue masih campur endpoint parent dan raw RPC untuk kelas/mapel, jadi hilangnya data anak/kelas masih very plausible.
TC_RB_OT_010: Retest. Route/menu/library parent sudah ada dan test lulus; perlu cek integrasi data nyata.
TC_RB_SPMB_002: Retest. Dashboard distribusi jalur sudah punya service dan test; prioritasnya repro, bukan rewrite.
TC_RB_SPMB_003: Dependency. Jika transisi status admin belum jalan, count dashboard memang ikut salah; audit setelah _004.
TC_RB_SPMB_004: Retest-high-priority. API transisi status ada dan test lulus, tapi workflow admin harus direpro end-to-end.
TC_RB_SPMB_008: Retest. Pagination list sudah tertutup service/test; jika masih gagal maka bug ada di state/UI binding.
TC_RB_SPMB_012: Retest. Aksi ranking tersedia; jika gagal biasanya karena data schedule/type/participant belum konsisten.
TC_RB_SPMB_013: Invalid runbook status. Actual menyatakan registrasi berhasil, jadi row ini bukan bug produk.
TC_RB_SPMB_014 (FAIL): Valid-likely. email_template_spmb_otp.xml masih perlu hardening render; keluhan placeholder/raw OTP masih masuk akal.
TC_RB_SPMB_014 (Not Tested): Dependency. Jalankan setelah OTP email fix dan baseline SPMB stabil.
TC_RB_AKADEMIK_002: Retest. Contract FE/BE save curriculum sudah benar; failure bisa stale UI binding atau data invalid lama.
TC_RB_AKADEMIK_003: Retest. Sama seperti _002 untuk grade scale.
TC_RB_AKADEMIK_005 (Need Improvement): Valid. Warning sinkronisasi role wali kelas masih literal ada di UI, jadi degraded path ini memang current.
TC_RB_AKADEMIK_005 (FAIL): Valid. batch.py masih enforce 1 guru = 1 rombel reguler aktif per tahun kecuali flag khusus.
TC_RB_AKADEMIK_007: Valid. TP/ATP sudah punya model, service, dan view, tetapi belum tersurface konsisten di menu admin; ini gap discoverability/routing.
TC_RB_Kehadiran & Penilaian_001: Retest. Mapping hadir/izin/sakit/alpha di backend sudah tertutup unit test.
TC_RB_Kehadiran & Penilaian_002: Dependency. Revalidasi setelah _001; kalau save status benar, report harus ikut benar.
TC_RB_Kehadiran & Penilaian_004: Invalid unless package-in-scope. Behavior “assessment not active / no access” konsisten dengan feature gating CBT; jangan dianggap bug generic tanpa konfirmasi entitlement.
TC_RB_Kehadiran & Penilaian_005: Retest. Flow assignment teacher vs student butuh repro; indikasi current bug belum kuat dari code/test.
TC_RB_E-raport_001: Retest. Filter admin list perlu live repro; contract service/report-card sekarang tampak sehat.
TC_RB_E-raport_002: Dependency. Jalankan setelah setup grade scale/curriculum stabil.
TC_RB_E-raport_003: Retest. Save/edit grade punya coverage unit; kalau masih gagal berarti issue ada di payload/state nyata.
TC_RB_E-raport_004: Retest. Batch input kosong kemungkinan turunan dari setup/report data belum siap.
TC_RB_E-raport_005: Retest. FE dan BE sekarang sama-sama pakai action key workflow yang selaras; indikasi stale cukup kuat.
TC_RB_E-raport_006: Dependency. Approval kepala sekolah baru valid dicek setelah _003 dan _005 lolos.
TC_RB_E-raport_007: Duplicate. Ini duplikat TC_RB_OT_003.
TC_RB_Keuangan_002: Valid-likely. Jalur admin ubah status/buat invoice masih perlu hard fix sampai projection parent/student ikut sinkron.
TC_RB_Keuangan_003: Valid-likely. Propagasi tunggakan ke parent/student belum terbukti stabil.
TC_RB_Keuangan_004: Dependency. Re-run setelah _002 dan _003 selesai.
TC_RB_HR&PAYROLL_001 (tail row kosong): CSV data issue. Bukan bug produk; perlu dibersihkan dari runbook setelah validasi final.
Baseline QA harus dikunci ke scoladev di 127.0.0.1:8074 dengan FE localhost:5173 proxy ke backend itu; semua repro/e2e harus memakai same-origin /api dan tidak boleh memperkenalkan VITE_API_URL untuk production.
Phase 0: rapikan baseline QA dulu, termasuk memilih profile scoladev untuk E2E, memperbaiki mismatch 8069 vs 8074, menjalankan reset/seed yang sesuai, dan menyiapkan fixture untuk parent multi-child, finance invoices, SPMB applicant+OTP, report-card workflow, TP/ATP.
Phase 1A: refactor parent chat agar tidak lagi memakai raw search_read dari FE; tambahkan endpoint baru GET /api/parent/children/<child_id>/lms-message-context yang mengembalikan daftar kelas/mapel/guru yang memang boleh dihubungi parent, lalu pakai endpoint itu di FE.
Phase 1B: jadikan backend batch/homeroom sebagai source of truth sinkronisasi role; FE tidak lagi melakukan side-effect role assignment yang redundan, hanya menampilkan status hasil sinkronisasi. Tambahkan setting eksplisit untuk multi-homeroom berbasis config param yang sudah ada, aktif di baseline scoladev, dan update identity/homeroom summary agar mendukung lebih dari satu rombel aktif tanpa error.
Phase 1C: surface TP/ATP ke navigasi admin akademik yang konsisten dengan route yang sudah ada; tambahkan menu coverage test agar row “menu tidak ada” tidak bisa regress.
Phase 1D: harden OTP mail rendering. Pertahankan endpoint publik sekarang, tetapi ubah path pengiriman agar hasil render teruji berisi OTP 6 digit dan tidak pernah mengirim ${object.*} literal pada HTML maupun fallback plain-text.
Phase 1E: audit dan perbaiki finance mutation path supaya create-invoice, change-status, dan read model parent/student membaca sumber kebenaran yang sama. Targetnya: begitu invoice dibuat/diubah di admin, row parent billing, invoice detail, dan tunggakan student/parent langsung konsisten.
Phase 1F: repro parent permit di baseline baru; bila masih gagal, fix parent-scope list refresh/filter supaya permit yang baru dibuat langsung muncul di portal parent.
Phase 2: setelah semua valid/current gaps di atas ditutup, rerun cluster OT_003/004/006/007/010, SPMB_002/003/004/008/009/010/011/012, AKADEMIK_002/003, Kehadiran_001/002/005, E-raport_001/003/004/005/006, lalu hanya patch yang masih reproducible.
Phase 3: update runbook evidence. Row duplicate harus ditautkan ke root bug, row invalid harus diubah statusnya berdasarkan repro baru, malformed CSV row harus dihapus/diperbaiki, dan target akhir adalah tidak ada row FAIL, Need Improvement, atau Not Tested yang tersisa tanpa keputusan formal.
Tambah GET /api/parent/children/<child_id>/lms-message-context untuk context dropdown parent chat; payload minimum: child, courses[], faculty, batch, can_message.
Tidak mengubah shape publik finance/report-card/SPMB yang sudah ada kecuali jika repro wave 2 membuktikan ada contract gap yang nyata; default-nya fix dilakukan di balik API existing.
Untuk multi-homeroom, expose perilaku lewat config tenant/admin, bukan hardcode global; QA scoladev di-seed enabled, tenant lain tetap mengikuti config masing-masing.
BE gates: py_compile → unit suites yang relevan → modular checks → module upgrade pada DB scoladev → health check.
Tambah regression test backend untuk parent chat context ownership, OTP rendered mail body, finance invoice-to-parent projection, dan multi-homeroom config path.
Tambah regression test frontend untuk parent chat service/view, admin TP/ATP menu exposure, dan finance/permit refresh behavior.
Jalankan E2E smoke minimal untuk parent portal, SPMB public+admin, finance parent visibility, dan e-raport workflow bila auth/routing/data-flow tersentuh.
Acceptance akhir: setiap row non-pass pada runbook harus berakhir sebagai PASS, Duplicate (closed by root case), atau Invalid/Out of Scope dengan evidence baru; tidak boleh ada status abu-abu.