0000000000000000000000000000000000000000 4fc7ee638f19ba10bb148cb4119db9ed7d30ab17 litmasjkt <litmasjkt@gmail.com> 1790428907 +0700	commit (initial): Aplikasi E-Kegiatan Mahasiswa (presensi kehadiran): portal mahasiswa, panel admin, SSO Portal RMIK, pengajuan kegiatan, template ekspor PDF
4fc7ee638f19ba10bb148cb4119db9ed7d30ab17 e9ef93f59b3b5649540cca0d66cd84abdd0f98a9 litmasjkt <litmasjkt@gmail.com> 1790463536 +0700	commit: Perbaikan tampilan portal/admin, filter kegiatan, dan grafik dashboard
e9ef93f59b3b5649540cca0d66cd84abdd0f98a9 125eb8d34bce79f90243bad76d3825b79fd95037 litmasjkt <litmasjkt@gmail.com> 1790463668 +0700	commit: Daftar kegiatan admin: yang belum diverifikasi diurutkan paling atas
125eb8d34bce79f90243bad76d3825b79fd95037 8336bd494480c65a1d45a5235ebae52b51e65c11 litmasjkt <litmasjkt@gmail.com> 1790463883 +0700	commit: Kegiatan admin: ikon detail untuk melihat mahasiswa hadir/tidak hadir per kegiatan
8336bd494480c65a1d45a5235ebae52b51e65c11 68f2175083da5e99b6dcc946cd36cf1fc48e766f litmasjkt <litmasjkt@gmail.com> 1790464072 +0700	commit: Daftar kegiatan admin: hapus kolom Target Peserta
68f2175083da5e99b6dcc946cd36cf1fc48e766f 12cfebaf67dd1995f485d58279b133bf72c44083 litmasjkt <litmasjkt@gmail.com> 1790464581 +0700	commit: Tambah Jurusan: Jurusan -> Program Studi -> Mahasiswa (menu Jurusan, jurusan wajib untuk prodi baru, kolom dan form jurusan di mahasiswa, import CSV)
12cfebaf67dd1995f485d58279b133bf72c44083 b6dd902c3c9e0c04b84c700a5474ab881f46fd09 litmasjkt <litmasjkt@gmail.com> 1790464780 +0700	commit: Tes regresi data lama untuk fitur Jurusan (prodi dan mahasiswa tanpa jurusan tetap aman)
b6dd902c3c9e0c04b84c700a5474ab881f46fd09 2ac76f6314aae5c95cc01871071f6feec54dea3a litmasjkt <litmasjkt@gmail.com> 1790465304 +0700	commit: Daftar pengajuan admin: hapus kolom Rekomendasi Target (tetap tampil di halaman Tinjau dan Validasi)
2ac76f6314aae5c95cc01871071f6feec54dea3a 5fccba23ab239e7383153f183b4383c393ea625d litmasjkt <litmasjkt@gmail.com> 1790465695 +0700	commit: Halaman Tinjau pengajuan: tombol WhatsApp ke pengusul dan info rekomendasi target di kartu notifikasi
5fccba23ab239e7383153f183b4383c393ea625d 7cb093160569f1143cb640c5de8bf05abd24b17f litmasjkt <litmasjkt@gmail.com> 1790466208 +0700	commit: Kartu notifikasi pengajuan di halaman Tinjau: narasi dipersingkat
7cb093160569f1143cb640c5de8bf05abd24b17f 879ca0d9150c544a09cb1565b9a4d1322f852905 litmasjkt <litmasjkt@gmail.com> 1790466497 +0700	commit: Form kegiatan admin: Tanggal, Jam Mulai, Jam Selesai satu baris di layar lebar, responsif di perangkat lain
879ca0d9150c544a09cb1565b9a4d1322f852905 6e1706391b5616046d048ce1b6c8519394135daa litmasjkt <litmasjkt@gmail.com> 1790466608 +0700	commit: Form kegiatan admin: label waktu jadi prefix input-group agar sejajar dengan label Waktu Kegiatan
6e1706391b5616046d048ce1b6c8519394135daa 36dddf8c4d9c943f56a7b0d8941375674945aef7 litmasjkt <litmasjkt@gmail.com> 1790466894 +0700	commit: Form kegiatan admin: sejajarkan label Waktu Kegiatan dengan kotak input, perbaiki Blade rusak commit sebelumnya
36dddf8c4d9c943f56a7b0d8941375674945aef7 021902626a62d1fe3ec1a1ce951355c2a13a8333 litmasjkt <litmasjkt@gmail.com> 1790469995 +0700	commit: Form tinjau pengajuan: sembunyikan checkbox Kegiatan aktif (status diatur tombol Setujui/Tolak)
021902626a62d1fe3ec1a1ce951355c2a13a8333 c4f4c42ebb30c8abc8f8d9d752e69b58c4bfb866 litmasjkt <litmasjkt@gmail.com> 1790470368 +0700	commit: Klarifikasi WA pengusul: nomor bisa diklik, pesan memuat nama, NIM, kelas, nama kegiatan, tanggal
c4f4c42ebb30c8abc8f8d9d752e69b58c4bfb866 35f996d199d974cff67176fee2b1fad8cf787e98 litmasjkt <litmasjkt@gmail.com> 1790470653 +0700	commit: Topbar: hapus bendera bahasa, bel notifikasi berfungsi (admin: pengajuan menunggu, mahasiswa: keputusan baru), nama akun sesuai login
35f996d199d974cff67176fee2b1fad8cf787e98 3a9dee1e60df13fec8c26112f83ada77f22428f7 litmasjkt <litmasjkt@gmail.com> 1790470839 +0700	commit: Notifikasi admin: status dibaca/belum (badge hanya untuk yang belum dibuka), tombol Tandai semua dibaca
3a9dee1e60df13fec8c26112f83ada77f22428f7 1b90d56ea04aaa12f952de5ab690bb5749acf448 litmasjkt <litmasjkt@gmail.com> 1790470888 +0700	commit: Perbaiki NotifikasiAdminTest: pakai penanda unik, bukan noti-dot dari topbar horizontal
1b90d56ea04aaa12f952de5ab690bb5749acf448 c302ede941fb479b2e8511d79f4fad6efb506d81 litmasjkt <litmasjkt@gmail.com> 1790471293 +0700	commit: Notifikasi portal: kegiatan baru untuk semua mahasiswa yang berhak (angkatan/prodi/kelas, tahun aktif), status dibaca, tandai semua dibaca
c302ede941fb479b2e8511d79f4fad6efb506d81 fc5809e601df9b5076f9bac8c505877e71f408be litmasjkt <litmasjkt@gmail.com> 1790471658 +0700	commit: Notifikasi: tombol Tandai dibaca di tiap item (admin dan mahasiswa), status dibaca per mahasiswa disimpan
fc5809e601df9b5076f9bac8c505877e71f408be f7f80185a4f128c97fc7a5eb009c685889123a6e litmasjkt <litmasjkt@gmail.com> 1790471788 +0700	commit: Presensi: batasi jarak_meter agar koordinat sangat jauh tidak memicu error kolom DECIMAL(8,2)
f7f80185a4f128c97fc7a5eb009c685889123a6e 259fa2512c2b534efe3d2a6626a46b0454fd4d80 litmasjkt <litmasjkt@gmail.com> 1790471934 +0700	commit: Presensi: pesan ramah saat lokasi terdeteksi sangat jauh (>=100 km)
259fa2512c2b534efe3d2a6626a46b0454fd4d80 ffccbc9a9e022035803310388c2c3ae8ca9d3258 litmasjkt <litmasjkt@gmail.com> 1790472163 +0700	commit: Audit presensi: tandai akurasi GPS buruk (>100 m) dan IP berbeda dalam 24 jam untuk mahasiswa yang sama
ffccbc9a9e022035803310388c2c3ae8ca9d3258 2ffad2e2dc86ec83019b62ce340828573b2232e8 litmasjkt <litmasjkt@gmail.com> 1790472414 +0700	commit: Presensi luring: tolak akurasi GPS >100 m (bukan sekadar ditandai), hapus penanda akurasi_buruk
2ffad2e2dc86ec83019b62ce340828573b2232e8 3e5acb5cf8c6c6ff7bfcf0eae334cbbd2d7e7516 litmasjkt <litmasjkt@gmail.com> 1790472653 +0700	commit: Tambah 16 skenario uji presensi luring (QR, geofence, waktu, akurasi, duplikat, angkatan, celah yang diketahui)
3e5acb5cf8c6c6ff7bfcf0eae334cbbd2d7e7516 93cd1efd52ff0457280f2cb12ae63813224d9fa1 litmasjkt <litmasjkt@gmail.com> 1790473683 +0700	commit: Presensi luring: QR berputar tiap 30 detik (HMAC), scan berlaku 10 menit, batas jaringan/IP kampus opsional per lokasi
93cd1efd52ff0457280f2cb12ae63813224d9fa1 f2a837864b77e6fa264c0b944f61f8d5b90ce12c litmasjkt <litmasjkt@gmail.com> 1790475262 +0700	commit: Presensi luring: tolak jika angka akurasi GPS tidak terkirim (tutup celah batas akurasi)
f2a837864b77e6fa264c0b944f61f8d5b90ce12c 2b7d68b16322c88d7f9e5473b7cf01d3da502168 litmasjkt <litmasjkt@gmail.com> 1790475510 +0700	commit: Kegiatan luring: pilihan eksplisit Pakai QR / Tanpa QR; QR wajib tapi belum dibuat memblokir presensi dan ditandai di daftar
2b7d68b16322c88d7f9e5473b7cf01d3da502168 cfe131525adedb680bd5ce716a999a52c14b35a3 litmasjkt <litmasjkt@gmail.com> 1790476489 +0700	commit: Presensi luring: jendela QR ketat (30 dtk), scan QR wajib kirim GPS di area, tandai satu perangkat dipakai banyak NIM
cfe131525adedb680bd5ce716a999a52c14b35a3 6c66356cc7df761cc797cac256f9496dfbbbcdf0 litmasjkt <litmasjkt@gmail.com> 1790476736 +0700	commit: Portal mahasiswa: hapus pesan status/error ganda (sudah ditampilkan layout)
6c66356cc7df761cc797cac256f9496dfbbbcdf0 a6edfea2ecde2cd298956af8a00af8550066401c litmasjkt <litmasjkt@gmail.com> 1790477557 +0700	commit: Login mahasiswa: batas laju per-IP dilonggarkan (Wi-Fi kampus berbagi IP); tambah test pembatas laju jaringan bersama
a6edfea2ecde2cd298956af8a00af8550066401c d7ab08999a681e9478621721f777a8cf85480565 litmasjkt <litmasjkt@gmail.com> 1790477868 +0700	commit: Presensi luring: batas NIM per perangkat per kegiatan (bawaan 1, atur lewat PRESENSI_MAKS_NIM_PER_PERANGKAT)
d7ab08999a681e9478621721f777a8cf85480565 ef61595430c3365556a5f61516a0fbdc91de9f35 litmasjkt <litmasjkt@gmail.com> 1790479457 +0700	commit: Kunci perangkat (blokir perangkat lain sampai admin reset) dan presensi masuk & pulang untuk kegiatan luring
ef61595430c3365556a5f61516a0fbdc91de9f35 2d80ab5ef2658e80f48422bf120725b5a5edc943 litmasjkt <litmasjkt@gmail.com> 1790479873 +0700	commit: Presensi pulang: jendela sama dengan jam mulai s.d. jam selesai kegiatan (tanpa margin 15 menit)
2d80ab5ef2658e80f48422bf120725b5a5edc943 1430d4c2a3e39a9b472cb5f4fe63a9f31031dec0 litmasjkt <litmasjkt@gmail.com> 1790480075 +0700	commit: Presensi pulang baru bisa 25 menit setelah jam mulai kegiatan (sampai jam selesai)
1430d4c2a3e39a9b472cb5f4fe63a9f31031dec0 22d27200952b5986b91174907484394084d92e7d litmasjkt <litmasjkt@gmail.com> 1790480559 +0700	commit: Presensi pulang: minimal 20 menit setelah masuk; presensi masuk ditutup 30 menit sebelum selesai agar pulang selalu tersedia
22d27200952b5986b91174907484394084d92e7d 6219516d80e98d2fbac8686d034de290bfa06e65 litmasjkt <litmasjkt@gmail.com> 1790491484 +0700	commit: Presensi pulang: minimal setelah masuk diturunkan dari 20 ke 15 menit
6219516d80e98d2fbac8686d034de290bfa06e65 0bdfabfa01ecc657065eabe44ab184418e7d6fa3 litmasjkt <litmasjkt@gmail.com> 1790493561 +0700	commit: Presensi luring: rekam audit khusus presensi pulang (kolom terpisah) dan tutup celah balapan pada batas NIM per perangkat (transaksi terkunci per kegiatan)
0bdfabfa01ecc657065eabe44ab184418e7d6fa3 cf0121d387a0bdd6bf954b23e87de9fa64f411bb litmasjkt <litmasjkt@gmail.com> 1790494043 +0700	commit: Log Error & Kecurangan: tambah fitur pencarian (NIM, nama mahasiswa, kegiatan, halaman, pesan error)
cf0121d387a0bdd6bf954b23e87de9fa64f411bb 5499297bc9bff7fa03986fa11a104bd939dc7a36 litmasjkt <litmasjkt@gmail.com> 1790495538 +0700	commit: Tambah peran akun Petugas Kegiatan: hanya bisa menampilkan QR presensi untuk kegiatan yang ditugaskan, tanpa akses menu admin lainnya
5499297bc9bff7fa03986fa11a104bd939dc7a36 8156becc3553f1d548130864d50a2b7441af28c2 litmasjkt <litmasjkt@gmail.com> 1790497885 +0700	commit: Ganti peran login Petugas Kegiatan dengan link rahasia tanpa login: admin generate link per kegiatan lalu membagikannya sendiri (mis. lewat WA) ke penampil QR di lokasi
8156becc3553f1d548130864d50a2b7441af28c2 f6b3ebef4bfc505528f82bb9a0727e80bfcb9d6d litmasjkt <litmasjkt@gmail.com> 1790498629 +0700	commit: Halaman Pengajuan Kegiatan: gabungkan info instruksi dan pesan error QR menjadi satu kartu Informasi dengan bullet
f6b3ebef4bfc505528f82bb9a0727e80bfcb9d6d 53b229846198531ee2b4aa0a84549c8fd7c09506 litmasjkt <litmasjkt@gmail.com> 1790502617 +0700	commit: Kunci perangkat: percobaan dari perangkat lain diberi pesan eskalasi, dan setelah 3x akun otomatis dinonaktifkan sampai admin memverifikasi & mereset
53b229846198531ee2b4aa0a84549c8fd7c09506 3bc9f1cef03d05c5d54ef935b7771d8889395f86 litmasjkt <litmasjkt@gmail.com> 1790505485 +0700	commit: Kunci perangkat: login kembali seperti semula (tanpa eskalasi), hitungan 3x percobaan hanya berlaku per kegiatan saat presensi
3bc9f1cef03d05c5d54ef935b7771d8889395f86 68bed5d17df8937ea6c426bedfeccd3e7f198493 litmasjkt <litmasjkt@gmail.com> 1790506940 +0700	commit: Perhalus pesan penolakan perangkat presensi: tidak menyebut 'per kegiatan' supaya batas 3x percobaan terkesan berlaku permanen
68bed5d17df8937ea6c426bedfeccd3e7f198493 5881b4c3a625bc7f5210f476c228dcb590909b1d litmasjkt <litmasjkt@gmail.com> 1790507902 +0700	commit: Tutup celah login manual: percobaan dari perangkat lain kini juga bereskalasi (hitungan global akun) dan otomatis nonaktif setelah 3x
5881b4c3a625bc7f5210f476c228dcb590909b1d fdea12ff7a2af8ee0e1a32faacdb3a552c6c99c6 litmasjkt <litmasjkt@gmail.com> 1790508839 +0700	commit: Tambah halaman admin Pengaturan Presensi: kunci perangkat, batas percobaan, akurasi GPS, lama QR berputar, dan aturan presensi pulang kini bisa diubah admin tanpa akses server
fdea12ff7a2af8ee0e1a32faacdb3a552c6c99c6 37188d9a11ed1c3fb08c4f78746bb7dcc30bd2d6 litmasjkt <litmasjkt@gmail.com> 1790518163 +0700	commit: Tambah peran Admin Jurusan: kelola Data Mahasiswa, Kegiatan, dan Laporan Presensi terbatas pada jurusannya sendiri; admin pusat tetap melihat semuanya
37188d9a11ed1c3fb08c4f78746bb7dcc30bd2d6 cc39e41dcbac37d65aa32a21f84f4ccdfc56ac9d litmasjkt <litmasjkt@gmail.com> 1790520573 +0700	commit: Perbaiki kebocoran data admin jurusan: halaman Kehadiran kegiatan tanpa batasan angkatan/prodi/kelas sempat menampilkan mahasiswa jurusan lain
cc39e41dcbac37d65aa32a21f84f4ccdfc56ac9d 2d4e2e9e0ab876993126296d249f9462e7189477 litmasjkt <litmasjkt@gmail.com> 1790521030 +0700	commit: Halaman QR: sembunyikan kartu Bagikan Link untuk kegiatan Tanpa QR, tidak relevan karena tidak butuh scan
2d4e2e9e0ab876993126296d249f9462e7189477 c013d337ecb92a10ae69c24b69cc3c4a11bc2bfd litmasjkt <litmasjkt@gmail.com> 1790522298 +0700	commit: Dashboard: tambah grafik audit kehadiran per jurusan dan per prodi
c013d337ecb92a10ae69c24b69cc3c4a11bc2bfd d51cbae13d5b0e47014360fb32289b1851008b96 litmasjkt <litmasjkt@gmail.com> 1790551802 +0700	commit: Perbaiki test yang flaky dekat tengah malam & pindah kartu Selamat Datang ke atas
d51cbae13d5b0e47014360fb32289b1851008b96 a1d8a5620ec8f267b90d43a56931c99f49d31140 litmasjkt <litmasjkt@gmail.com> 1790555915 +0700	commit: Audit sisi admin: tutup celah akun admin jurusan "yatim" bisa lihat semua data
a1d8a5620ec8f267b90d43a56931c99f49d31140 32facb19c05a852aa1d9b2af6ce69fc30ca9f988 litmasjkt <litmasjkt@gmail.com> 1790558654 +0700	commit: Audit sisi mahasiswa: login dari perangkat lain tidak lagi auto-nonaktifkan akun
32facb19c05a852aa1d9b2af6ce69fc30ca9f988 bf30cd8cd8aa926b9ef3ba1a7b9b40c17e251f54 litmasjkt <litmasjkt@gmail.com> 1790561454 +0700	commit: Dashboard: rapikan tampilan grafik Kehadiran per Jurusan/Prodi saat itemnya banyak
bf30cd8cd8aa926b9ef3ba1a7b9b40c17e251f54 c971caf1ff88811f9ada90fea3e0c5e2877f802f litmasjkt <litmasjkt@gmail.com> 1790561770 +0700	commit: Dashboard: tambah kotak pencarian di grafik Kehadiran per Jurusan/Prodi
c971caf1ff88811f9ada90fea3e0c5e2877f802f a6dad8a22ca459768c0eba0d558fc6c2a9c8cb03 litmasjkt <litmasjkt@gmail.com> 1790562163 +0700	commit: Audit kegiatan daring: tambah deteksi link bukti yang dipakai bersama-sama
a6dad8a22ca459768c0eba0d558fc6c2a9c8cb03 2365bfddf40deb3fd589d75ac9c21349cd9537f8 litmasjkt <litmasjkt@gmail.com> 1790564648 +0700	commit: Sidebar: pindahkan Akun Admin Jurusan jadi menu atas sendiri
2365bfddf40deb3fd589d75ac9c21349cd9537f8 2f79aca89750b9a94848e517653f2aef6427fb78 litmasjkt <litmasjkt@gmail.com> 1790566692 +0700	commit: Tambah route diagnostik IP sementara + abaikan file .sql di git
2f79aca89750b9a94848e517653f2aef6427fb78 643420754d8ef8cbdb1696a07757b308f308a8a0 litmasjkt <litmasjkt@gmail.com> 1790568536 +0700	commit: Portal mahasiswa: perjelas detail Riwayat Kegiatan (mode & status masuk/pulang)
643420754d8ef8cbdb1696a07757b308f308a8a0 17b1fd309235b2f91210c25d1f9451b4b236e7c6 litmasjkt <litmasjkt@gmail.com> 1790569165 +0700	commit: Dashboard mahasiswa: perbaiki tampilan badge status kegiatan
17b1fd309235b2f91210c25d1f9451b4b236e7c6 4623281239bf15200ccb799b629eaa798fd9b371 litmasjkt <litmasjkt@gmail.com> 1790681781 +0700	commit: Tambah animasi pemindaian wajah kosmetik saat perangkat pertama kali didaftarkan
4623281239bf15200ccb799b629eaa798fd9b371 37af691ba2849cb5f58aa80a0a09614571edd8c0 litmasjkt <litmasjkt@gmail.com> 1790683226 +0700	commit: Export Rekap Ketidakhadiran: tambah kolom Prodi
37af691ba2849cb5f58aa80a0a09614571edd8c0 ac9bda6ca94deaf14f22efec3a68b6fdd6be50b6 litmasjkt <litmasjkt@gmail.com> 1790683707 +0700	commit: Halaman Log Error & Kecurangan: gabungkan 2 kotak info jadi satu kartu Informasi
ac9bda6ca94deaf14f22efec3a68b6fdd6be50b6 828499a81aeeb932a435fab566f9786aa2d42e7d litmasjkt <litmasjkt@gmail.com> 1790751842 +0700	commit: Laporan Presensi: tambah export PDF Laporan Tahun Akademik (filter Prodi/Angkatan/Kelas)
828499a81aeeb932a435fab566f9786aa2d42e7d 72df9f0aa5bccc5b8b6e348d64e820dc001dd8a4 litmasjkt <litmasjkt@gmail.com> 1790752376 +0700	commit: Data Mahasiswa: template contoh import diganti jadi Excel asli (.xlsx)
72df9f0aa5bccc5b8b6e348d64e820dc001dd8a4 ff110111b06c1552f47d9891f9cd93f6639676ad litmasjkt <litmasjkt@gmail.com> 1790753060 +0700	commit: Laporan Tahun Akademik: tambah filter Nama Kegiatan + roster hadir/tidak hadir per kejadian
ff110111b06c1552f47d9891f9cd93f6639676ad 84727f8cd337bf04bde59d53a7d315ca55de39f8 litmasjkt <litmasjkt@gmail.com> 1790753638 +0700	commit: Laporan Tahun Akademik: tandai mahasiswa tidak hadir 3x berturut-turut
84727f8cd337bf04bde59d53a7d315ca55de39f8 8c5f95efa48f6083eb8cabcc02e744d7cc5be050 litmasjkt <litmasjkt@gmail.com> 1790754172 +0700	commit: Laporan Tahun Akademik: kolom "Kejadian yang Dilewati" tampilkan nama kegiatan + tanggal bulan huruf
8c5f95efa48f6083eb8cabcc02e744d7cc5be050 c952207f6eeb52696fc1968f7f54fad7d2f158e4 litmasjkt <litmasjkt@gmail.com> 1790754496 +0700	commit: Laporan Tahun Akademik: sembunyikan rincian roster & berturut-turut dari halaman web
c952207f6eeb52696fc1968f7f54fad7d2f158e4 8f968e2bd6d067fa0b286703047f1cce92dd3633 litmasjkt <litmasjkt@gmail.com> 1790754921 +0700	commit: Laporan Presensi: export CSV pakai chunk() supaya tetap ringan saat data menumpuk
8f968e2bd6d067fa0b286703047f1cce92dd3633 244db7c264670a9b315a2524ef0e4e8d808c14b7 litmasjkt <litmasjkt@gmail.com> 1790755723 +0700	commit: Optimasi performa: tambah index database untuk kolom filter yang paling sering dipakai
244db7c264670a9b315a2524ef0e4e8d808c14b7 6c1556e92af22b7f41dcdc042160ed53aafc46b5 litmasjkt <litmasjkt@gmail.com> 1790756930 +0700	commit: Import Data Mahasiswa: normalisasi otomatis no_tlp yang kehilangan angka nol
6c1556e92af22b7f41dcdc042160ed53aafc46b5 eea5969f6c787a5d4ae4d3ca67f152aa854cc36c litmasjkt <litmasjkt@gmail.com> 1790757457 +0700	commit: Test: buktikan no_tlp bernotasi ilmiah di Excel tetap utuh saat diimport
eea5969f6c787a5d4ae4d3ca67f152aa854cc36c 2879254680413b4ced751e340c4b5b91ad1d1b1f litmasjkt <litmasjkt@gmail.com> 1790758522 +0700	commit: Data Mahasiswa: tambah fitur Hapus Massal (per angkatan)
2879254680413b4ced751e340c4b5b91ad1d1b1f 4a7e91fc5cd56176652a0cd22cbac49c58508c7b litmasjkt <litmasjkt@gmail.com> 1790758808 +0700	commit: Halaman Hapus Massal: perjelas warna tombol Centang Semua & Hapus Centang
4a7e91fc5cd56176652a0cd22cbac49c58508c7b 402b8bdc138d635806e640a8ca1f9691fe665093 litmasjkt <litmasjkt@gmail.com> 1790759598 +0700	commit: Import Data Mahasiswa: jangan hash ulang password kalau tanggal lahir tidak berubah
402b8bdc138d635806e640a8ca1f9691fe665093 8abebdd05d8054ef1a7189b7dca56d22d5fb9aaa litmasjkt <litmasjkt@gmail.com> 1790760115 +0700	commit: Import Data Mahasiswa: pesan error ramah + dokumentasi extension zip untuk hosting
8abebdd05d8054ef1a7189b7dca56d22d5fb9aaa 24070886fcc9969c5a0a4f34bfc39f32bc6726e6 litmasjkt <litmasjkt@gmail.com> 1790760498 +0700	commit: Import Data Mahasiswa: naikkan batas waktu eksekusi supaya tidak timeout 30 detik
24070886fcc9969c5a0a4f34bfc39f32bc6726e6 ff4bbb5b8c41928cabf043ebf28c0ad5aeac466f litmasjkt <litmasjkt@gmail.com> 1790761298 +0700	commit: Login mahasiswa: perbaiki field NIM supaya bisa ketik huruf P di HP
ff4bbb5b8c41928cabf043ebf28c0ad5aeac466f 39284d56140c9f525dcb5800f20ba24dbd5073ba litmasjkt <litmasjkt@gmail.com> 1790761614 +0700	commit: Data Mahasiswa: tambah filter Jurusan dan Prodi
39284d56140c9f525dcb5800f20ba24dbd5073ba f542a25074831d373ba36436c810cc904179c5a0 litmasjkt <litmasjkt@gmail.com> 1790769516 +0700	commit: Pemindaian wajah kosmetik: hapus tombol "Lewati" yang terlihat
f542a25074831d373ba36436c810cc904179c5a0 21c619c40dbdcc317ca87f6ce76c1db32da04d2f litmasjkt <litmasjkt@gmail.com> 1790771235 +0700	commit: Perbaiki peta lokasi tidak terbaca script picker saat edit/tambah
21c619c40dbdcc317ca87f6ce76c1db32da04d2f f7e66dfdc9f50cfbcc4103b5e42fc16a71d45052 litmasjkt <litmasjkt@gmail.com> 1790808917 +0700	commit: Tambah deteksi wajah nyata di verifikasi kamera presensi luring
f7e66dfdc9f50cfbcc4103b5e42fc16a71d45052 bb9c7185bc7fc7ca816615ae2b5c011831d06cb8 litmasjkt <litmasjkt@gmail.com> 1790809469 +0700	commit: Ubah label field wajib_pulang di form kegiatan jadi "Mode Presensi"
bb9c7185bc7fc7ca816615ae2b5c011831d06cb8 ee3ca6e75ee991e884544c1c98b5bbee82d80b85 litmasjkt <litmasjkt@gmail.com> 1790809687 +0700	commit: Rapikan header Laporan Presensi supaya tidak berantakan di HP
ee3ca6e75ee991e884544c1c98b5bbee82d80b85 fea072a0818806f317a9efde54dd002362f83020 litmasjkt <litmasjkt@gmail.com> 1790809967 +0700	commit: Rapikan label angka grafik dashboard di layar HP
fea072a0818806f317a9efde54dd002362f83020 a36dd939a538abdc23238747ca4b574c9381d7a9 litmasjkt <litmasjkt@gmail.com> 1790812168 +0700	commit: Batasi portal mahasiswa cuma bisa dibuka dari HP
a36dd939a538abdc23238747ca4b574c9381d7a9 78d820f3eb5568e37e4aa372bc94bdb18fe836ba litmasjkt <litmasjkt@gmail.com> 1790812672 +0700	commit: Tambah lapis deteksi layar sentuh untuk pembatasan akses mobile
78d820f3eb5568e37e4aa372bc94bdb18fe836ba 75f9f02a7550626397f8648cbe1c847f44cb800e litmasjkt <litmasjkt@gmail.com> 1790819963 +0700	commit: Lewati pembatasan akses mobile saat APP_ENV=local
75f9f02a7550626397f8648cbe1c847f44cb800e 704ab599a444b3fb0b26b19f6fa0d59a68aa1f0f litmasjkt <litmasjkt@gmail.com> 1790821442 +0700	commit: Perbaiki Ubah Kehadiran Massal yang tidak pernah benar-benar tersimpan
704ab599a444b3fb0b26b19f6fa0d59a68aa1f0f 472f9adfa798440114fd42b1dbc12fed929b1b52 litmasjkt <litmasjkt@gmail.com> 1790823043 +0700	commit: Tambah riwayat lengkap perubahan status presensi oleh admin
472f9adfa798440114fd42b1dbc12fed929b1b52 6ea0a01ff963888abda6301f0a83f50b623c27fe litmasjkt <litmasjkt@gmail.com> 1790823519 +0700	commit: Paksa redirect HTTPS -- GPS ditolak browser kalau diakses lewat HTTP
6ea0a01ff963888abda6301f0a83f50b623c27fe 9ffbcd2805255aba5b03925fbbb23c88bb96a1b2 litmasjkt <litmasjkt@gmail.com> 1790824416 +0700	commit: Beri tahu mahasiswa sendiri soal percobaan login dari perangkat lain
9ffbcd2805255aba5b03925fbbb23c88bb96a1b2 ee5e6fe05c33a6f2e053d043ba96085e7c0b447b litmasjkt <litmasjkt@gmail.com> 1790825637 +0700	commit: Kartu penjelasan khusus di login untuk akun nonaktif karena perangkat
ee5e6fe05c33a6f2e053d043ba96085e7c0b447b edb00a4d5dc8539411c13430dfdff833c94cf9bb litmasjkt <litmasjkt@gmail.com> 1790826488 +0700	commit: Tampilkan ringkasan percobaan perangkat tak dikenal di dashboard admin
edb00a4d5dc8539411c13430dfdff833c94cf9bb 878799d6187ffd5489af5d3f32a0120d4f08684b litmasjkt <litmasjkt@gmail.com> 1790827125 +0700	commit: Tolak login/presensi pertama kali di device yang sudah milik mahasiswa lain
878799d6187ffd5489af5d3f32a0120d4f08684b a4df38d218dde2ddcd545aabd9ccb1a158e5c991 litmasjkt <litmasjkt@gmail.com> 1790829160 +0700	commit: Pendaftaran perangkat pertama kali wajib lewat tautan email sekali-pakai
a4df38d218dde2ddcd545aabd9ccb1a158e5c991 125628e51c3980260d27e263052b07d84c5191a1 litmasjkt <litmasjkt@gmail.com> 1790832653 +0700	commit: Tambah antrian email sungguhan + fitur kirim massal link pendaftaran
125628e51c3980260d27e263052b07d84c5191a1 28eb9d579b9f97ff736117f51dda0b4c41b793fb litmasjkt <litmasjkt@gmail.com> 1790834328 +0700	commit: Tambah indikasi "GPS Mencurigakan" berbasis pola, bukan satu titik
28eb9d579b9f97ff736117f51dda0b4c41b793fb 251e4cab1ae292806af561c435c55fbb1f9ed18c litmasjkt <litmasjkt@gmail.com> 1790834605 +0700	commit: Gabungkan percobaan perangkat tak dikenal ke tab Indikasi Kecurangan
251e4cab1ae292806af561c435c55fbb1f9ed18c 6f62e230525e38d6b7d903ba8f642bcaf03ee142 litmasjkt <litmasjkt@gmail.com> 1790835711 +0700	commit: Rombak tab Indikasi Kecurangan jadi per-kegiatan + pencarian mahasiswa
6f62e230525e38d6b7d903ba8f642bcaf03ee142 09ae9fe48beff6fd0ecc245bc4dc08e034ed1d9a litmasjkt <litmasjkt@gmail.com> 1790836516 +0700	commit: Tampilkan kartu Cari Mahasiswa juga di halaman detail per kegiatan
09ae9fe48beff6fd0ecc245bc4dc08e034ed1d9a 1fb83633be5d92640aa60ce9ec6f801eeb148226 litmasjkt <litmasjkt@gmail.com> 1790836652 +0700	commit: Hapus kartu Cari Mahasiswa dari tab Indikasi Kecurangan
1fb83633be5d92640aa60ce9ec6f801eeb148226 f26468e6c2aa3c06b5a1d8b94137c8459b159d90 litmasjkt <litmasjkt@gmail.com> 1790836842 +0700	commit: Hapus kotak pencarian umum di tab Indikasi Kecurangan
f26468e6c2aa3c06b5a1d8b94137c8459b159d90 2319cdaf81c25c3cf1e7cdfa1fc112a75c4ff72c litmasjkt <litmasjkt@gmail.com> 1790836991 +0700	commit: Tambah kotak pencarian nama kegiatan di kartu Kegiatan dengan Indikasi Kecurangan
2319cdaf81c25c3cf1e7cdfa1fc112a75c4ff72c dd5fef4a9066bd605b53243ad1433b50bcdfa68c litmasjkt <litmasjkt@gmail.com> 1790837208 +0700	commit: Ganti kartu Cari Mahasiswa dengan pencarian lokal di detail kegiatan
dd5fef4a9066bd605b53243ad1433b50bcdfa68c b1863569918e6bcda53c136ea05f2640ed451e9b litmasjkt <litmasjkt@gmail.com> 1790837803 +0700	commit: Tampilkan bukti aktivitas lengkap di balik indikasi kecurangan saat Tinjau
b1863569918e6bcda53c136ea05f2640ed451e9b d8a070640a1ad6a122a671493d2c3e1fcc10b61f litmasjkt <litmasjkt@gmail.com> 1790839013 +0700	commit: Gabung riwayat perubahan admin dan bukti aktivitas jadi satu kartu
d8a070640a1ad6a122a671493d2c3e1fcc10b61f bf46ca9e13eca4b6a1fb3db5710714f0f180dc45 litmasjkt <litmasjkt@gmail.com> 1790844470 +0700	commit: Samakan istilah status "Nonaktif Otomatis (Perangkat)" di semua halaman
bf46ca9e13eca4b6a1fb3db5710714f0f180dc45 3e90052a17d52095343dac4055e726998b588a39 litmasjkt <litmasjkt@gmail.com> 1790847298 +0700	commit: Tampilkan percobaan perangkat tak dikenal di halaman detail kegiatan
3e90052a17d52095343dac4055e726998b588a39 d0a1d84115e1ed190eb07121365114faf32e9786 litmasjkt <litmasjkt@gmail.com> 1790847614 +0700	commit: Tambah rincian tiap percobaan perangkat tak dikenal per kegiatan
d0a1d84115e1ed190eb07121365114faf32e9786 028662c176c0e5ea982fd8ef90523c4c5812a827 litmasjkt <litmasjkt@gmail.com> 1790853979 +0700	commit: Tampilkan pemilik akun dari perangkat yang dicoba di rincian percobaan
028662c176c0e5ea982fd8ef90523c4c5812a827 5bfb64112536d11757b4c541356f6bc69c85a851 litmasjkt <litmasjkt@gmail.com> 1790855442 +0700	commit: Cegah tombol Back browser menampilkan halaman login lama dari cache
5bfb64112536d11757b4c541356f6bc69c85a851 23b93a83ddb25ed715765ff9850ac861b9b7db25 litmasjkt <litmasjkt@gmail.com> 1790855970 +0700	commit: Arahkan sesi/token kedaluwarsa ke login dengan pesan, bukan halaman 419 kosong
23b93a83ddb25ed715765ff9850ac861b9b7db25 ef63248b9b3dd4546aaeca370c970616ce05e0c4 litmasjkt <litmasjkt@gmail.com> 1790856556 +0700	commit: Terapkan cek device-lock juga ke login SSO, bukan cuma login biasa
ef63248b9b3dd4546aaeca370c970616ce05e0c4 682fdf6e798b466166d39ee9b72a5a68c750bf70 litmasjkt <litmasjkt@gmail.com> 1790857219 +0700	commit: Terapkan juga pesan "buka dari HP" ke login SSO mahasiswa
682fdf6e798b466166d39ee9b72a5a68c750bf70 2ff281adf18ae23c15983c08fcf8b58251ddc13f litmasjkt <litmasjkt@gmail.com> 1790857683 +0700	commit: Perbaikan dari tinjauan mendalam: batas ukuran riwayat_gps & 419 untuk AJAX
2ff281adf18ae23c15983c08fcf8b58251ddc13f 8ab2b7efd750f83784e1572ea0c98ee2fb531293 litmasjkt <litmasjkt@gmail.com> 1790858006 +0700	commit: Hapus route diagnostik sementara /cek-ip
8ab2b7efd750f83784e1572ea0c98ee2fb531293 68e64018d845414e9e45370625eca79a2a8e1d9e litmasjkt <litmasjkt@gmail.com> 1790858645 +0700	commit: Tanggal bulan huruf & urutkan roster hadir/tidak hadir per NIM di PDF
68e64018d845414e9e45370625eca79a2a8e1d9e 30e059f0aa67c6d1c5f26dc592fe9298a37e1a97 litmasjkt <litmasjkt@gmail.com> 1790859232 +0700	commit: Hapus tombol Rekap Ketidakhadiran dari halaman Laporan Presensi
30e059f0aa67c6d1c5f26dc592fe9298a37e1a97 41a19288c558bbf6fb13fa9129f8f7226bb69882 litmasjkt <litmasjkt@gmail.com> 1790859707 +0700	commit: Hapus tombol Rekap Ketidakhadiran dari halaman Kegiatan Presensi
41a19288c558bbf6fb13fa9129f8f7226bb69882 05f7eb57e1485ea38963d8fd6b7dcfeda265ab6b litmasjkt <litmasjkt@gmail.com> 1790860344 +0700	commit: Hapus layout horizontal duplikat yang bikin judul menu tampil dobel
05f7eb57e1485ea38963d8fd6b7dcfeda265ab6b bc74319e39ae623dcaf3c2b78d29ff2e9a90e9c9 litmasjkt <litmasjkt@gmail.com> 1790860583 +0700	commit: Hapus judul halaman duplikat di topbar admin (masih dobel setelah commit sebelumnya)
bc74319e39ae623dcaf3c2b78d29ff2e9a90e9c9 ceb459ab2378f8221a509ec0cad198cedde78671 litmasjkt <litmasjkt@gmail.com> 1790866212 +0700	commit: Hapus tulisan "Pulang" di kolom Status Laporan Presensi
ceb459ab2378f8221a509ec0cad198cedde78671 2eae3732099fe90d92084c99afbe80460a84ee37 litmasjkt <litmasjkt@gmail.com> 1790866243 +0700	commit: Perjelas warna tombol Centang Semua / Hapus Centang
2eae3732099fe90d92084c99afbe80460a84ee37 a97fd74b6be6c6e48fd4b7a989c4ff6f40692cef litmasjkt <litmasjkt@gmail.com> 1790866390 +0700	commit: Hapus info jam pulang di kolom Status Laporan Presensi
a97fd74b6be6c6e48fd4b7a989c4ff6f40692cef 0b13f3c33cf0596640ba76d0ff115b2e425de736 litmasjkt <litmasjkt@gmail.com> 1790866543 +0700	commit: Gabung info Mode Presensi (masuk saja/masuk & pulang) ke kolom Mode
0b13f3c33cf0596640ba76d0ff115b2e425de736 c4f8c2ecec82bc5f1aa42b8298225e51f82a0919 litmasjkt <litmasjkt@gmail.com> 1790866752 +0700	commit: Rapikan badge status perangkat di Data Mahasiswa
c4f8c2ecec82bc5f1aa42b8298225e51f82a0919 e9aaf61782b4f1bcdf7cab6588919e5a4fd907e0 litmasjkt <litmasjkt@gmail.com> 1790866898 +0700	commit: Perbaiki tooltip ikon Perangkat lain ditolak yang tidak muncul
e9aaf61782b4f1bcdf7cab6588919e5a4fd907e0 63caa5d876e2ecc0e9ad6698ce053a9567f9d378 litmasjkt <litmasjkt@gmail.com> 1790867289 +0700	commit: Perbaiki ikon shield yang tidak pernah tampil + tambah info pemilik perangkat ditolak
63caa5d876e2ecc0e9ad6698ce053a9567f9d378 678b691515217088de016e4d276f4c7894e7f9f3 litmasjkt <litmasjkt@gmail.com> 1790868384 +0700	commit: Cegah scroll horizontal di HP pada halaman Log Error & Kecurangan
678b691515217088de016e4d276f4c7894e7f9f3 381588d60370efb5f962176b36b38c549b9c8a4a litmasjkt <litmasjkt@gmail.com> 1790868844 +0700	commit: Hapus kotak pencarian dekoratif di topbar yang tidak pernah berfungsi
381588d60370efb5f962176b36b38c549b9c8a4a a8e0fcfff7d8bebdd866e85f92214a06f5049043 litmasjkt <litmasjkt@gmail.com> 1790869505 +0700	commit: Tampilkan info Mode Presensi di kartu Kegiatan Hari Ini mahasiswa
a8e0fcfff7d8bebdd866e85f92214a06f5049043 2b734c25c95cbf1c1c2773a0735bcb881ef24260 litmasjkt <litmasjkt@gmail.com> 1790869600 +0700	commit: Tambahkan label "Mode Presensi:" di kartu Kegiatan Hari Ini mahasiswa
2b734c25c95cbf1c1c2773a0735bcb881ef24260 4021f95fe043972f04e642d0ca05bc3aa16ba757 litmasjkt <litmasjkt@gmail.com> 1790870492 +0700	commit: Ubah urutan presensi: tombol muncul setelah masuk area, kamera setelah diklik
4021f95fe043972f04e642d0ca05bc3aa16ba757 aa60768971c61320d5080e5d89eb31f0951487a6 litmasjkt <litmasjkt@gmail.com> 1790870852 +0700	commit: Pakai titik GPS paling akurat dari riwayat live, bukan minta ulang
aa60768971c61320d5080e5d89eb31f0951487a6 cde755136d27840c66af1ad2a075e4a111a21937 litmasjkt <litmasjkt@gmail.com> 1790871400 +0700	commit: Ganti semua alert() browser di halaman admin jadi modal kustom
cde755136d27840c66af1ad2a075e4a111a21937 3e7227f6528de60d183068cc72f1cd0e34eeaf56 litmasjkt <litmasjkt@gmail.com> 1790871626 +0700	commit: Hapus gambar zona lama di peta saat admin ganti tipe area
3e7227f6528de60d183068cc72f1cd0e34eeaf56 eb8d423c86dc9927e0cd5048ab52c80df1b0f5c6 litmasjkt <litmasjkt@gmail.com> 1790872264 +0700	commit: Perbaiki hilangnya data zona saat ganti tipe area di form lokasi
eb8d423c86dc9927e0cd5048ab52c80df1b0f5c6 89cdcae46af7542bcbcff2ae9402d3ac75181db9 litmasjkt <litmasjkt@gmail.com> 1790872537 +0700	commit: Tampilkan kartu koordinat tiap titik sudut poligon
89cdcae46af7542bcbcff2ae9402d3ac75181db9 80e9902cde9c5b477b993eb648e4dd4dbd4c04ea litmasjkt <litmasjkt@gmail.com> 1790872864 +0700	commit: Sembunyikan angka akurasi GPS dari pesan error ke mahasiswa
80e9902cde9c5b477b993eb648e4dd4dbd4c04ea 2ed4bc54bc460374afa93188abf5f9c0fb75bad2 litmasjkt <litmasjkt@gmail.com> 1790872940 +0700	commit: Hapus saran teknis GPS dari pesan error akurasi ke mahasiswa
2ed4bc54bc460374afa93188abf5f9c0fb75bad2 b8f6eb60d41e428d30abee56741e42dfcc845f7a litmasjkt <litmasjkt@gmail.com> 1790873075 +0700	commit: Tampilkan Mode Presensi di halaman presensi mahasiswa
b8f6eb60d41e428d30abee56741e42dfcc845f7a c2636eb1e78918b834eee9b4b07accc28b3c2428 litmasjkt <litmasjkt@gmail.com> 1790873186 +0700	commit: Hapus teks instruksi izin lokasi di halaman presensi mahasiswa
c2636eb1e78918b834eee9b4b07accc28b3c2428 b7751ede4a8a8c95570ef07ce0329135d746e29f litmasjkt <litmasjkt@gmail.com> 1790874821 +0700	commit: Tambah indikator kecurangan: perangkat dipakai lintas kegiatan
b7751ede4a8a8c95570ef07ce0329135d746e29f e4d289a476922566e1a66e830970847f23fe9366 litmasjkt <litmasjkt@gmail.com> 1790891920 +0700	commit: Tampilkan jumlah presensi (1x/2x) di samping Mode Presensi
e4d289a476922566e1a66e830970847f23fe9366 b5eb02c2bff199ee3d3943ea89e027453077400b litmasjkt <litmasjkt@gmail.com> 1790892122 +0700	commit: Sederhanakan label Mode Presensi jadi 1x/2x Presensi saja
b5eb02c2bff199ee3d3943ea89e027453077400b 74afa2e5e323a091aefccb2aecb725973681882d litmasjkt <litmasjkt@gmail.com> 1790892304 +0700	commit: Tambah hitung mundur konfirmasi sebelum tombol presensi muncul
74afa2e5e323a091aefccb2aecb725973681882d 0489547a84e9dd4ce3671d71f52cfa1b16530afc litmasjkt <litmasjkt@gmail.com> 1790892840 +0700	commit: Deteksi fake-GPS dengan jitter buatan yang terlalu rapat
0489547a84e9dd4ce3671d71f52cfa1b16530afc 8d873d784c82447d1965f208e34ec5b4f6e0b35e litmasjkt <litmasjkt@gmail.com> 1790893630 +0700	commit: Deteksi GPS palsu dari akurasi vs goyangan titik tidak sejalan
8d873d784c82447d1965f208e34ec5b4f6e0b35e 563fab46e3837d616e9754928963a81f80e7a000 litmasjkt <litmasjkt@gmail.com> 1790894566 +0700	commit: Deteksi presensi yang dikirim tanpa riwayat GPS yang wajar
563fab46e3837d616e9754928963a81f80e7a000 0dbf01d4c4f4305eda268d33f9a237f65e3dbdbc litmasjkt <litmasjkt@gmail.com> 1790903650 +0700	commit: Evaluasi ulang anomali kerumunan begitu peer sudah cukup
0dbf01d4c4f4305eda268d33f9a237f65e3dbdbc ddc16a4303daeb6438485ff00836c4ab954a4c8e litmasjkt <litmasjkt@gmail.com> 1790905373 +0700	commit: Deteksi kolusi: banyak NIM ditolak dari IP non-kampus yang sama
ddc16a4303daeb6438485ff00836c4ab954a4c8e ab16954644f4002783f0e2cf7acb84455e9f8751 litmasjkt <litmasjkt@gmail.com> 1790905934 +0700	commit: Perbaiki O(n^2) pada sapuan retroaktif anomali kerumunan
ab16954644f4002783f0e2cf7acb84455e9f8751 bd3a948f04846ffb9e6709de0d53d064c1b28bbf litmasjkt <litmasjkt@gmail.com> 1790908162 +0700	commit: Cegah pengaturan admin melemahkan verifikasi ulang QR saat pulang
bd3a948f04846ffb9e6709de0d53d064c1b28bbf 7b87d39ed9824161f93b97c5a259d061b0f17d41 litmasjkt <litmasjkt@gmail.com> 1790919561 +0700	commit: Tambah tombol reset filter dan perjelas tampilan card ringkasan
7b87d39ed9824161f93b97c5a259d061b0f17d41 a45df690eb05056cd87d259bfe8a3ba2260ecd9c litmasjkt <litmasjkt@gmail.com> 1790922731 +0700	commit: Audit kecurangan kegiatan daring: perkuat link-duplikat & blokir device
a45df690eb05056cd87d259bfe8a3ba2260ecd9c 2ad6e4d8d70be708fe3b93b9a4bc6a7cb61e794a litmasjkt <litmasjkt@gmail.com> 1790924326 +0700	commit: Hapus link bukti kehadiran dari presensi daring
2ad6e4d8d70be708fe3b93b9a4bc6a7cb61e794a f2a11db50b110bb27bdfa359846aa7b00f6e7d25 litmasjkt <litmasjkt@gmail.com> 1790926613 +0700	commit: Tambah verifikasi kamera kosmetik ke presensi daring
f2a11db50b110bb27bdfa359846aa7b00f6e7d25 ab2eaa88d6daf1ebc256e40946a5e3ea35e91e3a litmasjkt <litmasjkt@gmail.com> 1790933041 +0700	commit: Tambah instrumen survei kepuasan kegiatan per Kelompok Kegiatan
ab2eaa88d6daf1ebc256e40946a5e3ea35e91e3a 4d41298665ee63943cc9742d1a6c6d31bc26e133 litmasjkt <litmasjkt@gmail.com> 1790933357 +0700	commit: Tambah link menu Kelompok Kegiatan ke sidebar admin pusat
4d41298665ee63943cc9742d1a6c6d31bc26e133 96f553817920df12473796ea8e914c14404d73c5 litmasjkt <litmasjkt@gmail.com> 1790934792 +0700	commit: Tampilkan Mode Presensi di halaman detail kehadiran kegiatan
96f553817920df12473796ea8e914c14404d73c5 93e7f6bd49e97e90e8754c4d83c7ba2be328b583 litmasjkt <litmasjkt@gmail.com> 1790941899 +0700	commit: Benahi 4 celah fitur survei: disambiguasi jurusan, hint kosong, laporan gabungan, toggle anonim
93e7f6bd49e97e90e8754c4d83c7ba2be328b583 0c72147e29e93b88a8b1020e0f43b3b4900bf40f litmasjkt <litmasjkt@gmail.com> 1790943105 +0700	commit: Tutup 4 celah isolasi data jurusan/prodi dari audit menyeluruh
0c72147e29e93b88a8b1020e0f43b3b4900bf40f 628184c6c5e778f37a6a5ddd98cf6dd26885bc77 litmasjkt <litmasjkt@gmail.com> 1790947235 +0700	commit: Cegah hapus Program Studi yang masih membatasi suatu kegiatan
628184c6c5e778f37a6a5ddd98cf6dd26885bc77 3feba70dcfd9281838cd8c0c185e8aa8225c10cd litmasjkt <litmasjkt@gmail.com> 1790948732 +0700	commit: Sebutkan nama browser terdaftar saat login ditolak karena beda perangkat
3feba70dcfd9281838cd8c0c185e8aa8225c10cd 813acc2c5ee8b38d078441a431fc033dfd88d66f litmasjkt <litmasjkt@gmail.com> 1790948938 +0700	commit: Ganti kata "Perangkat" jadi "Akun" di pesan info browser terdaftar
813acc2c5ee8b38d078441a431fc033dfd88d66f 718c49e5d837960227622ead81bad330d9bc794c litmasjkt <litmasjkt@gmail.com> 1790950212 +0700	commit: Perhalus komentar developer soal fitur verifikasi kamera & peta live
718c49e5d837960227622ead81bad330d9bc794c 6058648f0b1c59ea3755dc2bea3e65d80bd8ea88 litmasjkt <litmasjkt@gmail.com> 1790981667 +0700	commit: Tambah status Izin/Sakit untuk presensi mahasiswa
6058648f0b1c59ea3755dc2bea3e65d80bd8ea88 e142b2c8c921461f2322972f7e7f09cc09eb21f9 litmasjkt <litmasjkt@gmail.com> 1790982167 +0700	commit: Tambah export PDF pada pratinjau Ubah Kehadiran Massal
e142b2c8c921461f2322972f7e7f09cc09eb21f9 3aafbb357fc0cab4ee0c19de74b9a61f271d75b2 litmasjkt <litmasjkt@gmail.com> 1790982808 +0700	commit: Tambah field Narasumber untuk kegiatan Kelompok "Kuliah Tamu"
3aafbb357fc0cab4ee0c19de74b9a61f271d75b2 cc496316a13eb34073ed43315549309934711f18 litmasjkt <litmasjkt@gmail.com> 1790983153 +0700	commit: Cegah narasumber hilang diam-diam saat kelompok "Kuliah Tamu" diganti nama
cc496316a13eb34073ed43315549309934711f18 631543b81a4ed3a703b8a8fc3e3d1a5b86971b32 litmasjkt <litmasjkt@gmail.com> 1790983848 +0700	commit: Tampilkan Kelompok Kegiatan & Narasumber di halaman Kehadiran Kegiatan
631543b81a4ed3a703b8a8fc3e3d1a5b86971b32 985c84a06ea8f22d7ab79987cd0a4ab9021f64ad litmasjkt <litmasjkt@gmail.com> 1790984416 +0700	commit: Rekam jenis perangkat (iPhone/Android/dst) saat pendaftaran perangkat
985c84a06ea8f22d7ab79987cd0a4ab9021f64ad e4049789f880280df842bff15e11b4edda3d0390 litmasjkt <litmasjkt@gmail.com> 1790984713 +0700	commit: Tampilkan browser & perangkat terdaftar di tombol Reset Perangkat admin
e4049789f880280df842bff15e11b4edda3d0390 3f0a4397e5d84f487dcf20d9e2953b4a896ca4f0 litmasjkt <litmasjkt@gmail.com> 1790985229 +0700	commit: Perbaiki TypeError "Cannot read properties of null (reading classList)"
3f0a4397e5d84f487dcf20d9e2953b4a896ca4f0 fe5a26ce51b644a8dd0e86f8be143ebedbe065db litmasjkt <litmasjkt@gmail.com> 1790985781 +0700	commit: Saring laporan "Script error." (bukan dari kode aplikasi) dari Log Error
fe5a26ce51b644a8dd0e86f8be143ebedbe065db 17d826374173898a9be1a810f0d2026324a1bcc9 litmasjkt <litmasjkt@gmail.com> 1790986278 +0700	commit: Perjelas kolom Waktu Presensi di halaman Kehadiran Kegiatan
17d826374173898a9be1a810f0d2026324a1bcc9 06dcc45082dc7ba7be68f119cf9b2b85b3a517dd litmasjkt <litmasjkt@gmail.com> 1790991983 +0700	commit: Tambah export PDF di halaman Kehadiran Kegiatan + perbaiki status Izin/Sakit
06dcc45082dc7ba7be68f119cf9b2b85b3a517dd f411cd928963f408637b9693df00a4282e288299 litmasjkt <litmasjkt@gmail.com> 1790992712 +0700	commit: Terapkan judul_dokumen dari Template Ekspor aktif ke semua PDF admin
f411cd928963f408637b9693df00a4282e288299 cedd748060f30709bc2bbe84eb5638a8642635b8 litmasjkt <litmasjkt@gmail.com> 1790994626 +0700	commit: Tambah Format Ekspor: isi PDF bisa diatur admin lewat markup dinamis
cedd748060f30709bc2bbe84eb5638a8642635b8 0ce56fc3685bc4ebb071ec1ce1005cf86e4c1967 litmasjkt <litmasjkt@gmail.com> 1790995239 +0700	commit: Sertakan QR verifikasi keaslian dokumen di Format Ekspor Rekap Mahasiswa
0ce56fc3685bc4ebb071ec1ce1005cf86e4c1967 18c395a1b95326f2309904b88d46e2e9d5f3cba5 litmasjkt <litmasjkt@gmail.com> 1790995961 +0700	commit: Fix: halaman Tambah/Edit Format Ekspor gagal render (Blade compile error)
18c395a1b95326f2309904b88d46e2e9d5f3cba5 72a5927d36a8daeb495b27f2045c023b96ce975e litmasjkt <litmasjkt@gmail.com> 1790996843 +0700	commit: Sertakan kelas CSS khas tiap PDF bawaan ke shell Format Ekspor
72a5927d36a8daeb495b27f2045c023b96ce975e 24ce44b933ff3c3552044a8df7e9f2eeb4141590 litmasjkt <litmasjkt@gmail.com> 1791000490 +0700	commit: Pratinjau Format Ekspor bisa pakai data Kegiatan/Mahasiswa asli
24ce44b933ff3c3552044a8df7e9f2eeb4141590 874738b2a4a3e49637f6d15cee7d8e04b124f8d7 litmasjkt <litmasjkt@gmail.com> 1791000699 +0700	commit: Tambah tombol Duplikat di Format Ekspor
874738b2a4a3e49637f6d15cee7d8e04b124f8d7 b1f66650c67bbf78e518dfa22e787aaad4abdca0 litmasjkt <litmasjkt@gmail.com> 1791001436 +0700	commit: Fix: dropdown Jenis Export tidak menyinkronkan panel placeholder
b1f66650c67bbf78e518dfa22e787aaad4abdca0 ec1d5f0a66f18b42e203d1f37efd9552e1c778b3 litmasjkt <litmasjkt@gmail.com> 1791002182 +0700	commit: Tambah fitur unduh Daftar Placeholder (PDF) + penjelasan tiap placeholder
ec1d5f0a66f18b42e203d1f37efd9552e1c778b3 3ac22fcf02b20b08cadfac31794608561b909b68 litmasjkt <litmasjkt@gmail.com> 1791003430 +0700	commit: Sederhanakan halaman Format Ekspor: satu halaman, kolom Kategori (bukan tab)
3ac22fcf02b20b08cadfac31794608561b909b68 9e99a9f9061aca04dc8dcc9bc1d108c744e991c2 litmasjkt <litmasjkt@gmail.com> 1791014484 +0700	commit: Gabung Kop Surat + Isi Dokumen jadi satu form di Format Ekspor
9e99a9f9061aca04dc8dcc9bc1d108c744e991c2 a157a4eb42a9545059ea477f531005ba943bfafc litmasjkt <litmasjkt@gmail.com> 1791029080 +0700	commit: Kop surat per periode, arsip PDF, dan koreksi dokumen
a157a4eb42a9545059ea477f531005ba943bfafc 70552969bec86f47ca3b7842343ffd47634c704b litmasjkt <litmasjkt@gmail.com> 1791029582 +0700	commit: Tampilkan kondisi kop di halaman kehadiran sebelum ekspor
70552969bec86f47ca3b7842343ffd47634c704b f777369045218feb6f2fd95355f8b93912e856d6 litmasjkt <litmasjkt@gmail.com> 1791029764 +0700	commit: Terapkan pemeriksaan kop di halaman Massal dan Laporan Tahun
f777369045218feb6f2fd95355f8b93912e856d6 38fd65fea34941ceea6803ce657715a49a040ba3 litmasjkt <litmasjkt@gmail.com> 1791029984 +0700	commit: Pecah Laporan Tahun Akademik per periode kop dalam satu PDF
38fd65fea34941ceea6803ce657715a49a040ba3 ccbd2e2067c4579a0892be1868ee334c8d75cff7 litmasjkt <litmasjkt@gmail.com> 1791064346 +0700	commit: Tambah cadangan tampilkan QR tanpa verifikasi lokasi (admin pusat)
ccbd2e2067c4579a0892be1868ee334c8d75cff7 4838c6cc1d59b796393780304ca9b6c5a82c4c08 litmasjkt <litmasjkt@gmail.com> 1791064907 +0700	commit: Cadangan QR tanpa lokasi butuh persetujuan admin pusat lain
4838c6cc1d59b796393780304ca9b6c5a82c4c08 4bd9757fb0db34bf50bb7eed5e2caa3b560c4d04 litmasjkt <litmasjkt@gmail.com> 1791065851 +0700	revert: Revert "Cadangan QR tanpa lokasi butuh persetujuan admin pusat lain"
4bd9757fb0db34bf50bb7eed5e2caa3b560c4d04 c5e09408ee24967c834c6b96853bc78ed20b1109 litmasjkt <litmasjkt@gmail.com> 1791067200 +0700	commit: Kelompokkan roster Laporan Tahun per prodi lalu per kelas
c5e09408ee24967c834c6b96853bc78ed20b1109 e642b16c1f740c95ef2e6d608d7c181318f35d80 litmasjkt <litmasjkt@gmail.com> 1791067636 +0700	commit: Urutkan roster Laporan Tahun: kegiatan dulu, lalu prodi dan kelas
e642b16c1f740c95ef2e6d608d7c181318f35d80 59466d7505eff47740551e392665d43eb14e9bae litmasjkt <litmasjkt@gmail.com> 1791068074 +0700	commit: Izinkan tabel roster Laporan Tahun terpotong antarhalaman
59466d7505eff47740551e392665d43eb14e9bae 41f3e2e7720750f86993ea820d526c709fc34694 litmasjkt <litmasjkt@gmail.com> 1791068422 +0700	commit: Rapikan blok roster Laporan Tahun per kegiatan, prodi, dan kelas
41f3e2e7720750f86993ea820d526c709fc34694 52b80d073646cfbd6f55aab4b1a83a56aa0cc891 litmasjkt <litmasjkt@gmail.com> 1791074981 +0700	commit: Ikat heading grup roster ke baris tabelnya biar tidak ada halaman kosong
52b80d073646cfbd6f55aab4b1a83a56aa0cc891 da236dee6dcd30c88099e0cbd1cce2b4d382819f litmasjkt <litmasjkt@gmail.com> 1791075376 +0700	commit: Tambah unduh PDF per baris kegiatan di Laporan Tahun Akademik
da236dee6dcd30c88099e0cbd1cce2b4d382819f ac59a15349a2ca5391708fb8c97c6fc59578e999 litmasjkt <litmasjkt@gmail.com> 1791076044 +0700	commit: Tambah validasi keaslian dokumen (QR) ke PDF ekspor admin
ac59a15349a2ca5391708fb8c97c6fc59578e999 84aa29a25644a657b8114221e3fd6c69ab3a1f14 litmasjkt <litmasjkt@gmail.com> 1791076502 +0700	commit: Tampilkan pratinjau PDF asli di halaman verifikasi dokumen
84aa29a25644a657b8114221e3fd6c69ab3a1f14 c9f6e9f94c9dcb91dddffc54c27bedae3c84a12d litmasjkt <litmasjkt@gmail.com> 1791076562 +0700	commit: Hapus keterangan "bukan sertifikat/bukti resmi" di footer PDF Laporan Tahun
c9f6e9f94c9dcb91dddffc54c27bedae3c84a12d d9af100f752cc896c0506000e63130e8be88a910 litmasjkt <litmasjkt@gmail.com> 1791079220 +0700	commit: Kegiatan terverifikasi: persentase hanya dihitung dari yang punya catatan presensi
d9af100f752cc896c0506000e63130e8be88a910 5afd54a6ce0bf236fd8cd843d45d662080f3d367 litmasjkt <litmasjkt@gmail.com> 1791081377 +0700	commit: Pisahkan kuota kehadiran-sebagian dari status Verifikasi
5afd54a6ce0bf236fd8cd843d45d662080f3d367 9c3180d277c19478526bd20d0d21890bd13df4f8 litmasjkt <litmasjkt@gmail.com> 1791082374 +0700	commit: Tambah test ujung-ke-ujung: kegiatan wajib vs perwakilan tidak bentrok
9c3180d277c19478526bd20d0d21890bd13df4f8 af16f21e6ff2fa09055a3fde565b09ab790ce74d litmasjkt <litmasjkt@gmail.com> 1791083351 +0700	commit: Batasi peringatan "3x berturut-turut tidak hadir" ke Kelompok Kegiatan Upacara
af16f21e6ff2fa09055a3fde565b09ab790ce74d 611aed18d8f1bebc86900485c38fbbf43ad3ea1f litmasjkt <litmasjkt@gmail.com> 1791086785 +0700	commit: Khusus Upacara: izin/sakit tidak dihitung setara hadir
611aed18d8f1bebc86900485c38fbbf43ad3ea1f 611e720a89bd3101485b114bdc0f2d372cb702f9 litmasjkt <litmasjkt@gmail.com> 1791089093 +0700	commit: Persingkat narasi checkbox Kehadiran Sebagian di form kegiatan
611e720a89bd3101485b114bdc0f2d372cb702f9 5025e1f6cf7547067ee9c1fe847b9940c2f056e3 litmasjkt <litmasjkt@gmail.com> 1791114222 +0700	commit: Wajibkan verifikasi kegiatan sebelum semua export PDF bisa dipakai
5025e1f6cf7547067ee9c1fe847b9940c2f056e3 28c82d6482d86ddcc0b08d23330b607b383fc220 litmasjkt <litmasjkt@gmail.com> 1791120402 +0700	commit: Tambah Link Cadangan: QR tanpa login dan tanpa verifikasi lokasi
28c82d6482d86ddcc0b08d23330b607b383fc220 23c853478dcd8c9c60b4d23308d30d67ad3c25a2 litmasjkt <litmasjkt@gmail.com> 1791125081 +0700	commit: Kelompokkan ulang halaman QR: pisahkan tampilkan langsung vs bagikan link
23c853478dcd8c9c60b4d23308d30d67ad3c25a2 efc5c01d965f3f0b936da44929951e230b3c36ca litmasjkt <litmasjkt@gmail.com> 1791125302 +0700	commit: Persingkat narasi kartu Bagikan sebagai Link di halaman QR
efc5c01d965f3f0b936da44929951e230b3c36ca df69d44ce79bcc8eb6abd2483890a163011f25b3 litmasjkt <litmasjkt@gmail.com> 1791125957 +0700	commit: Pindahkan peringatan link lama ke modal konfirmasi pada tombol QR
df69d44ce79bcc8eb6abd2483890a163011f25b3 8d51171267ca9ee34ffcc758fe615115b33e4eb3 litmasjkt <litmasjkt@gmail.com> 1791162704 +0700	commit: Samakan tombol Generate Ulang QR dengan pola modal konfirmasi
8d51171267ca9ee34ffcc758fe615115b33e4eb3 fab2687a916baa03c771f7f121ae9fb0536f0b40 litmasjkt <litmasjkt@gmail.com> 1791163804 +0700	commit: Kelompokkan halaman QR berdasarkan kebutuhan verifikasi lokasi
fab2687a916baa03c771f7f121ae9fb0536f0b40 264905c42662b9839f97b555ba126996598c4a72 litmasjkt <litmasjkt@gmail.com> 1791166304 +0700	commit: Rapikan header judul kegiatan di halaman QR
264905c42662b9839f97b555ba126996598c4a72 192325b17f59ec9c5f553ef06fbebd9f582ce002 litmasjkt <litmasjkt@gmail.com> 1791166438 +0700	commit: Tampilkan Mode Presensi di header halaman QR
192325b17f59ec9c5f553ef06fbebd9f582ce002 c1493ef04c85c15cc92a6a2f62539a8b218a5546 litmasjkt <litmasjkt@gmail.com> 1791166567 +0700	commit: Pindahkan tombol Kembali ke pojok kiri atas halaman QR
c1493ef04c85c15cc92a6a2f62539a8b218a5546 0b6b3054bc258a1f1318b66191e25c70941032a2 litmasjkt <litmasjkt@gmail.com> 1791168781 +0700	commit: Tambah rentang tanggal bebas khusus Upacara di Laporan Tahun Akademik
0b6b3054bc258a1f1318b66191e25c70941032a2 5b65839617fa09cc66c2e83e5241e6e1e76407d9 litmasjkt <litmasjkt@gmail.com> 1791169093 +0700	commit: Perbaiki field Rentang Tanggal tidak muncul saat pilih saran autocomplete
5b65839617fa09cc66c2e83e5241e6e1e76407d9 64f6bb6fb4583b78e043fd4287e69080d6a5dae1 litmasjkt <litmasjkt@gmail.com> 1791170964 +0700	commit: Kelompokkan daftar Tidak Hadir 3x Berturut-turut per Prodi dan Kelas di PDF
64f6bb6fb4583b78e043fd4287e69080d6a5dae1 a8f23f9edbc854eae8f53195923cdb5678be0019 litmasjkt <litmasjkt@gmail.com> 1791171892 +0700	commit: Urutkan NIM di dalam tiap kelompok Prodi/Kelas pada Tidak Hadir 3x Berturut-turut
a8f23f9edbc854eae8f53195923cdb5678be0019 4ae2ad1f88ccd8d9a0976323ade6467427a6c399 litmasjkt <litmasjkt@gmail.com> 1791173903 +0700	commit: Kelompokkan Laporan Presensi per kegiatan dan percepat query-nya
4ae2ad1f88ccd8d9a0976323ade6467427a6c399 eeac77b3322753bb6a90d04b15c4ac44a9924182 litmasjkt <litmasjkt@gmail.com> 1791174538 +0700	commit: Samakan saran Nama Kegiatan di Laporan Presensi dengan Kelompok Kegiatan
eeac77b3322753bb6a90d04b15c4ac44a9924182 b6bed658c1a52f8b2fee124800a118de07e3b84c litmasjkt <litmasjkt@gmail.com> 1791174778 +0700	commit: Pisahkan Mode Presensi ke baris sendiri di halaman Kehadiran Kegiatan
b6bed658c1a52f8b2fee124800a118de07e3b84c e6cfec535378af78154a1a23fd800bbcc77e33e7 litmasjkt <litmasjkt@gmail.com> 1791174968 +0700	commit: Tambah label Mode Kegiatan dan pisah ke baris sendiri
e6cfec535378af78154a1a23fd800bbcc77e33e7 5ddff63b66b82caca46201f7695e2ccd5defcbaa litmasjkt <litmasjkt@gmail.com> 1791175700 +0700	commit: Tambah kolom Detail di Kehadiran Kegiatan untuk ubah status per mahasiswa
5ddff63b66b82caca46201f7695e2ccd5defcbaa 11447354115b8f3efbb4a5242482f82d0227195d litmasjkt <litmasjkt@gmail.com> 1791175873 +0700	commit: Ganti tombol Detail jadi ikon mata saja, tanpa teks Ubah
11447354115b8f3efbb4a5242482f82d0227195d c73db919452d08268302c1e97d590bf618184c47 litmasjkt <litmasjkt@gmail.com> 1791176031 +0700	commit: Tambah teks "Lihat" di tombol Detail Kehadiran Kegiatan
c73db919452d08268302c1e97d590bf618184c47 a2a8f3b8e67c2951b7ef0628cc20d828056668f0 litmasjkt <litmasjkt@gmail.com> 1791176885 +0700	commit: Catat log riwayat untuk finalisasi otomatis "tidak presensi pulang"
a2a8f3b8e67c2951b7ef0628cc20d828056668f0 38b95db64f95cd3fd41914d34616a49e81b5e011 litmasjkt <litmasjkt@gmail.com> 1791177611 +0700	commit: Pisahkan badge indikasi kecurangan Pulang ke bagian Presensi Pulang
38b95db64f95cd3fd41914d34616a49e81b5e011 9e357df101c8088a96d6dae4838ed8368f33640b litmasjkt <litmasjkt@gmail.com> 1791186229 +0700	commit: Pindahkan tombol Ajukan Izin/Sakit dari halaman presensi ke dashboard
9e357df101c8088a96d6dae4838ed8368f33640b 79902a0e1993783afb7d731aff4162c566117385 litmasjkt <litmasjkt@gmail.com> 1791191861 +0700	commit: Perbaiki 4 temuan simulasi kegiatan luring+berbayar: mahasiswa nonaktif & info Berbayar
79902a0e1993783afb7d731aff4162c566117385 9c2519d4f9eae8cc2c0b94d8181dc66e5d788ea2 litmasjkt <litmasjkt@gmail.com> 1791192089 +0700	commit: Perbaiki test izin/sakit yang gagal deterministik tiap hari Senin
9c2519d4f9eae8cc2c0b94d8181dc66e5d788ea2 61829d55f645d6376bb473b6bff71566ed8090cc litmasjkt <litmasjkt@gmail.com> 1791202019 +0700	commit: Tambah audit lokasi GPS opsional untuk presensi daring
61829d55f645d6376bb473b6bff71566ed8090cc 6a236461629ccdc56e74fcc2c69e7e72aa17111a litmasjkt <litmasjkt@gmail.com> 1791203105 +0700	commit: Tampilkan lokasi GPS audit presensi daring sebagai peta tertanam
6a236461629ccdc56e74fcc2c69e7e72aa17111a 0da82c476514824ce1154518508e408758bff3c1 litmasjkt <litmasjkt@gmail.com> 1791203311 +0700	commit: Perbarui teks bantuan Mode Kegiatan Daring di form admin, hapus sisa referensi link bukti kehadiran
0da82c476514824ce1154518508e408758bff3c1 a3061257d978423a7909ced3ab7822fda3c32e9b litmasjkt <litmasjkt@gmail.com> 1791203724 +0700	commit: Hapus sisa tampilan fitur link bukti kehadiran daring yang sudah dicabut
a3061257d978423a7909ced3ab7822fda3c32e9b 14cbf82e578a21b5337dfd97371ffa3b9cc04c6e litmasjkt <litmasjkt@gmail.com> 1791209288 +0700	commit: Tambah menu Laporan (dropdown) dengan halaman listing Laporan Survei
14cbf82e578a21b5337dfd97371ffa3b9cc04c6e f1b506f75496c704a9ed91482edcfb5c22b85ba2 litmasjkt <litmasjkt@gmail.com> 1791210524 +0700	commit: Tambah grafik rata-rata skor per pertanyaan di halaman Hasil Survei Kegiatan
f1b506f75496c704a9ed91482edcfb5c22b85ba2 357afd9b8312976ccf69e88d9f80745b65a7201d litmasjkt <litmasjkt@gmail.com> 1791212192 +0700	commit: Tambah pengelompokan kategori untuk pertanyaan survei
357afd9b8312976ccf69e88d9f80745b65a7201d f7774846574ac1f050daa82c7ced86e06eda36d5 litmasjkt <litmasjkt@gmail.com> 1791214183 +0700	commit: Ubah input Daftar Pertanyaan survei jadi per-kategori, bukan per-baris
f7774846574ac1f050daa82c7ced86e06eda36d5 d6486e5230b746db2e3e7205e1d6792f123c2ba2 litmasjkt <litmasjkt@gmail.com> 1791215650 +0700	commit: Ubah label skala survei jadi per titik, bukan cuma ujung bawah/atas
d6486e5230b746db2e3e7205e1d6792f123c2ba2 6d70ce8ea76104258809d7d1cf80e9a90bb1a234 litmasjkt <litmasjkt@gmail.com> 1791215825 +0700	commit: Persingkat teks petunjuk di form Kelompok Kegiatan
6d70ce8ea76104258809d7d1cf80e9a90bb1a234 d0cd589395577d64902aef547817f0af4f021dcc litmasjkt <litmasjkt@gmail.com> 1791216804 +0700	commit: Tambah akun admin tingkat prodi (hanya lihat, satu program studi)
d0cd589395577d64902aef547817f0af4f021dcc 946455f2cf4d33c921cd4c3d5e7107d42e827c92 litmasjkt <litmasjkt@gmail.com> 1791217536 +0700	commit: Kunci celah akses akun admin prodi
946455f2cf4d33c921cd4c3d5e7107d42e827c92 a1971e6fe68dc7984f2fdda99813f40b366ce805 litmasjkt <litmasjkt@gmail.com> 1791217781 +0700	commit: Sembunyikan tombol tulis dan tutup pengajuan untuk akun admin prodi
a1971e6fe68dc7984f2fdda99813f40b366ce805 160cd1fc58177601eb3878800226259928eadcca litmasjkt <litmasjkt@gmail.com> 1791235053 +0700	commit: Tambah filter Jurusan di Laporan Tahun Akademik (PDF)
160cd1fc58177601eb3878800226259928eadcca 20782fd6c4500cc5f4080c0f0af6fdbed569f6f4 litmasjkt <litmasjkt@gmail.com> 1791238060 +0700	commit: Tampilkan data Jurusan di laporan PDF lainnya
20782fd6c4500cc5f4080c0f0af6fdbed569f6f4 77b6d58d567a16bcd6ec1da475ff13da38e7cc47 litmasjkt <litmasjkt@gmail.com> 1791238463 +0700	commit: Tampilkan Jurusan Penyelenggara di kop PDF Kehadiran & Ubah Massal
77b6d58d567a16bcd6ec1da475ff13da38e7cc47 d211091bb81157cda79708ae60a888706e2f338b litmasjkt <litmasjkt@gmail.com> 1791240909 +0700	commit: Ubah Admin Prodi jadi setara Admin Jurusan, dipersempit ke satu prodi
d211091bb81157cda79708ae60a888706e2f338b 67ca91f8ebc38c059b9fe30e759443ae5f05e6fb litmasjkt <litmasjkt@gmail.com> 1791241632 +0700	commit: Tutup celah lintas-prodi: admin prodi tidak bisa ubah kegiatan bersama
67ca91f8ebc38c059b9fe30e759443ae5f05e6fb 2bcd2e3e12a0cf09c1118802282f3fdec664fd94 litmasjkt <litmasjkt@gmail.com> 1791242086 +0700	commit: Tutup celah: admin prodi bisa memutuskan pengajuan mahasiswa prodi lain
2bcd2e3e12a0cf09c1118802282f3fdec664fd94 a2d708c757cc6094af02f53f3a84987f3453a316 litmasjkt <litmasjkt@gmail.com> 1791242913 +0700	commit: Cache statistik dashboard 5 menit supaya tidak melambat tiap semester
a2d708c757cc6094af02f53f3a84987f3453a316 21308c5ebc402baddb87973e436ddd303deced14 litmasjkt <litmasjkt@gmail.com> 1791297975 +0700	commit: Tutup celah: halaman tinjau pengajuan kegiatan bisa dibuka lintas prodi
21308c5ebc402baddb87973e436ddd303deced14 a35d2480cd03456035104f3c907482a26f1a935a litmasjkt <litmasjkt@gmail.com> 1791298777 +0700	commit: Tambah riwayat perubahan Kegiatan (audit trail)
a35d2480cd03456035104f3c907482a26f1a935a 191ebae2975d2fd54a20a9549261a5034dfcff06 litmasjkt <litmasjkt@gmail.com> 1791299841 +0700	commit: Tambah riwayat perubahan Akun Admin (audit trail)
191ebae2975d2fd54a20a9549261a5034dfcff06 89f7fad3c01b376c33ccb46014f767d3b5a7790c litmasjkt <litmasjkt@gmail.com> 1791300319 +0700	commit: Perkuat audit trail: log gagal tidak menggagalkan aksi utama + batasi riwayat
89f7fad3c01b376c33ccb46014f767d3b5a7790c 5cf4c8daef55fd66bbf06f57d47d8d4c062a5cec litmasjkt <litmasjkt@gmail.com> 1791300649 +0700	commit: Lengkapi riwayat setujui(): catat detail field, bukan cuma label aksi
5cf4c8daef55fd66bbf06f57d47d8d4c062a5cec 72265e90975ea83fdf38f64652de505f5b3626e4 litmasjkt <litmasjkt@gmail.com> 1791301260 +0700	commit: Tampilkan riwayat jumlah reset perangkat di konfirmasi tombol Reset
72265e90975ea83fdf38f64652de505f5b3626e4 261f1d3e2237db4e4f492e16cae40391c9ab09c7 litmasjkt <litmasjkt@gmail.com> 1791329694 +0700	commit: Tambah saran perbaikan saat wajah tidak terdeteksi di verifikasi kamera
261f1d3e2237db4e4f492e16cae40391c9ab09c7 8f515c93e77ff7ecb2a675c510530f37ab140c96 litmasjkt <litmasjkt@gmail.com> 1791334964 +0700	commit: Tolak presensi kalau wajah tidak terdeteksi 20 detik, minta ulangi
8f515c93e77ff7ecb2a675c510530f37ab140c96 9572f0d11fd70105028528d668eb79803633f7ad litmasjkt <litmasjkt@gmail.com> 1791338096 +0700	commit: Perpanjang sesi QR saat gagal deteksi wajah, supaya tidak perlu scan ulang
9572f0d11fd70105028528d668eb79803633f7ad 2b1f5b2c153257f1bdfd2ef4b58a9f6f3a6a8352 litmasjkt <litmasjkt@gmail.com> 1791342427 +0700	commit: Simpan riwayat GPS sebelum reload akibat gagal deteksi wajah
2b1f5b2c153257f1bdfd2ef4b58a9f6f3a6a8352 7d47d0e0e51075203be1133176dad3f19fa315e2 litmasjkt <litmasjkt@gmail.com> 1791361579 +0700	commit: Pulihkan juga status pemantauan live GPS saat reload akibat gagal wajah
7d47d0e0e51075203be1133176dad3f19fa315e2 f74cd93e315fa4d8cf58ef13f7d405a87f64c0bf litmasjkt <litmasjkt@gmail.com> 1791363444 +0700	commit: Batalkan verifikasi kegiatan otomatis saat presensi diubah setelahnya
f74cd93e315fa4d8cf58ef13f7d405a87f64c0bf 8d93432f1a052c894242ecab1445fd137b81acd2 litmasjkt <litmasjkt@gmail.com> 1791364000 +0700	commit: Cegah approval izin/sakit menimpa presensi yang sudah diterima
8d93432f1a052c894242ecab1445fd137b81acd2 54fc0d61df29c79bac079d8305172e4f5ff3105f litmasjkt <litmasjkt@gmail.com> 1791372435 +0700	commit: Tambah pertanyaan survei opsional, perbaiki gerbang survei yang bisa mentok
54fc0d61df29c79bac079d8305172e4f5ff3105f b671db37caed27be8f9e6bbb509ae8f01961520a litmasjkt <litmasjkt@gmail.com> 1791373301 +0700	commit: Perjelas peringatan saat hapus mahasiswa satu-per-satu
b671db37caed27be8f9e6bbb509ae8f01961520a 5b17c6a3e17dc8aae2afd29220cfd15a9f62634b litmasjkt <litmasjkt@gmail.com> 1791375193 +0700	commit: Kadaluwarsakan Link Cadangan otomatis saat kegiatan sudah selesai
5b17c6a3e17dc8aae2afd29220cfd15a9f62634b 79366686a9938915db2c2d145b825c643c7709bd litmasjkt <litmasjkt@gmail.com> 1791375854 +0700	commit: Kadaluwarsakan Link Publik QR otomatis saat kegiatan sudah selesai
79366686a9938915db2c2d145b825c643c7709bd 74f28e36189c4095e5a8727ba8cb4b94c428bea9 litmasjkt <litmasjkt@gmail.com> 1791380963 +0700	commit: Konsistenkan qrToken() admin ikut berhenti setelah kegiatan selesai
74f28e36189c4095e5a8727ba8cb4b94c428bea9 d96493b1fbb0518774d912025541cb326101f614 litmasjkt <litmasjkt@gmail.com> 1791382069 +0700	commit: Batasi daftar Semua Pengajuan Kegiatan ke jurusan sendiri
d96493b1fbb0518774d912025541cb326101f614 9c02f92043b387c9af93a48a014ef90070a0d06d litmasjkt <litmasjkt@gmail.com> 1791382891 +0700	commit: Cegah hapus akun admin ikut menghapus kegiatan & riwayat presensinya
9c02f92043b387c9af93a48a014ef90070a0d06d 2821402d66e9f8ea5cd825612d2470699485bc03 litmasjkt <litmasjkt@gmail.com> 1791383387 +0700	commit: Jangan hapus jejak audit override QR saat akun adminnya dihapus
2821402d66e9f8ea5cd825612d2470699485bc03 e5787cb1f3c16d201af0a2233fc3a3fd41527e41 litmasjkt <litmasjkt@gmail.com> 1791410103 +0700	commit: Jadikan aturan khusus Upacara pengaturan dinamis per Kelompok Kegiatan
e5787cb1f3c16d201af0a2233fc3a3fd41527e41 882b92855a8f7b0f9d55f8b05b7695ad28deade3 litmasjkt <litmasjkt@gmail.com> 1791411008 +0700	commit: Tambah test: toggle hitung_izin_sakit & rutin_mingguan lolos walau survei terkunci
882b92855a8f7b0f9d55f8b05b7695ad28deade3 7fc97a9ad1052354249ed783572f8710ebb7fa2d litmasjkt <litmasjkt@gmail.com> 1791412525 +0700	commit: Cegah import mahasiswa menimpa data lintas jurusan/prodi lewat NIM
7fc97a9ad1052354249ed783572f8710ebb7fa2d 283a0c68b2a9644affd45c6879a4ff6d248fe6bf litmasjkt <litmasjkt@gmail.com> 1791413393 +0700	commit: Hapus scaffolding Auth yang benar-benar tidak terpakai
283a0c68b2a9644affd45c6879a4ff6d248fe6bf a7caa6e6c5be4d26c4f12618f8db182bc3500397 litmasjkt <litmasjkt@gmail.com> 1791413993 +0700	commit: Tolak area Kotak yang kolaps jadi garis/titik tanpa luas
a7caa6e6c5be4d26c4f12618f8db182bc3500397 1080a0db1565d5d9571a049d26310e9b3d416590 litmasjkt <litmasjkt@gmail.com> 1791416040 +0700	commit: Perbarui dependency composer untuk menutup celah keamanan yang diketahui
1080a0db1565d5d9571a049d26310e9b3d416590 e752ad514efb8ba11e4a3145c2547c2382c84217 litmasjkt <litmasjkt@gmail.com> 1791425949 +0700	commit: Tambah header keamanan HTTP dasar (X-Frame-Options, HSTS, dkk)
e752ad514efb8ba11e4a3145c2547c2382c84217 e8cc4917a5336a706205b2518c22a484eb145dad litmasjkt <litmasjkt@gmail.com> 1791427993 +0700	commit: Jadikan token SSO sekali-pakai untuk cegah replay
e8cc4917a5336a706205b2518c22a484eb145dad f1cf4a3164c2661c671dd6834e321bf7f517e911 litmasjkt <litmasjkt@gmail.com> 1791430358 +0700	commit: Tambah dua faktor (OTP email) opsional untuk akun admin
f1cf4a3164c2661c671dd6834e321bf7f517e911 22ad9a73b1ea3246ff4421f356add952c03f6c37 litmasjkt <litmasjkt@gmail.com> 1791432124 +0700	commit: Catat log & kirim notifikasi email saat status 2FA admin berubah
22ad9a73b1ea3246ff4421f356add952c03f6c37 e6b7a88d5b2f3bb92fabd384fa03de7030d284ac litmasjkt <litmasjkt@gmail.com> 1791432587 +0700	commit: Tambah jalan keluar darurat: pusat bisa matikan 2FA admin lain
e6b7a88d5b2f3bb92fabd384fa03de7030d284ac b285a678cfd89f15e7bba831afc05ed2df81e14c litmasjkt <litmasjkt@gmail.com> 1791432708 +0700	commit: Perbarui DEPLOY.md: queue worker juga wajib untuk kode OTP 2FA
b285a678cfd89f15e7bba831afc05ed2df81e14c f00d8d671bbf53f4ebd94cc84187d4d0ee3c0393 litmasjkt <litmasjkt@gmail.com> 1791433441 +0700	commit: Perbarui tip kegiatan berulang: arahkan ke toggle kegiatan_rutin_mingguan
f00d8d671bbf53f4ebd94cc84187d4d0ee3c0393 52b6d77593ffb90682f4295d07f6a219cea3a04c litmasjkt <litmasjkt@gmail.com> 1791433880 +0700	commit: Perbaiki teks halaman Laporan Tahun Akademik: tidak lagi hardcode "Upacara"
52b6d77593ffb90682f4295d07f6a219cea3a04c 7dc494ed1da66b553ad1cd424fd471e1c99554d6 litmasjkt <litmasjkt@gmail.com> 1791435567 +0700	commit: Tambah skrip backup database + panduan Cron Job di DEPLOY.md
