﻿# Estimate Activity History - Enterprise Hardening Checklist

Dokumen ini adalah checklist eksekusi untuk menaikkan standar implementasi ke level enterprise (audit-ready, scalable, dan compliance-aware).

## Metadata
- Project: Estimate Activity History
- Scope: Hardening arsitektur, keamanan, integritas, performa, dan UX operasional
- Status: In Progress
- Last update: 2026-04-16

## Legend Status
- [ ] Not Started
- [~] In Progress
- [x] Done
- [!] Blocked

## Fase 0 - Baseline & Safety (Target: 0.5 hari)
- [ ] Freeze perubahan fitur selama hardening
- [ ] Backup schema + data:
  - `rise_estimate_activity_history`
  - `rise_estimate_activity_state`
  - `rise_estimate_activity_master`
- [ ] Catat baseline metric:
  - save latency estimate
  - error rate save
  - volume history per hari

Kriteria selesai:
- Backup tervalidasi bisa di-restore
- Baseline metric tersimpan sebagai acuan sebelum hardening

## Fase 1 - Immutability & Atomicity (Target: 1-2 hari)
- [x] Terapkan kebijakan insert-only untuk history (blok update/delete)
- [x] Wajibkan `snapshot_hash` selalu terisi
- [x] Validasi hash saat baca/tampil snapshot
- [x] Pastikan update estimate + insert history + update state berjalan dalam 1 transaksi DB atomik
- [x] Tambahkan logging error terstruktur saat transaksi gagal

Kriteria selesai:
- Tidak ada update/delete history via flow aplikasi
- Semua event history memiliki hash valid
- Tidak ada partial write saat error transaksi

## Fase 2 - Concurrency & Version Safety (Target: 1-2 hari)
- [x] Perketat penghitungan `version_no` untuk kondisi paralel
- [x] Tambah mekanisme retry/lock saat bentrok versi
- [x] Cegah over-logging saat save tanpa perubahan data
- [x] Tambah observability untuk konflik versi

Kriteria selesai:
- Tidak ada duplikasi `(estimate_id, version_no)` di uji paralel
- Konflik versi terdeteksi dan tertangani otomatis

## Fase 3 - Security & Compliance (Target: 2-3 hari)
- [x] Definisikan field sensitif (PII) dalam snapshot
- [x] Terapkan masking/enkripsi field sensitif sesuai kebijakan
- [~] Tetapkan kebijakan retensi dan arsip data history
- [~] Pastikan kontrol akses role untuk baca snapshot detail

Kriteria selesai:
- Data sensitif terlindungi sesuai policy
- Retensi data terdokumentasi dan bisa dijalankan

## Fase 4 - Performance & Scale (Target: 1-2 hari)
- [x] Review dan optimalkan index untuk timeline/filter
- [x] Definisikan strategi growth:
  - arsip periodik
  - opsi partisi tabel
- [x] Tambahkan monitoring:
  - write latency
  - hash mismatch rate
  - version conflict rate

Kriteria selesai:
- Query timeline stabil di volume tinggi
- Monitoring aktif untuk indikator kritikal

## Fase 5 - UX & I18N Cleanup (Target: 1 hari)
- [ ] Hilangkan hardcoded text, gunakan language helper 100%
- [ ] Pastikan diff menampilkan konteks bisnis:
  - item apa yang berubah
  - field apa yang berubah
- [ ] Uji responsivitas timeline untuk data besar:
  - skeleton loading
  - pagination/load more
  - empty state

Kriteria selesai:
- UI konsisten multi-bahasa
- Compare mudah dipahami user non-teknis

## Fase 6 - UAT & Rollout (Target: 1-2 hari)
- [ ] Jalankan UAT backend flow:
  - create/edit/header/item/status
- [ ] Jalankan UAT UX timeline + compare
- [ ] Pilot rollout ke admin/sales leader
- [ ] Rollout bertahap ke seluruh user
- [ ] Hypercare monitoring 3-7 hari

Kriteria selesai:
- UAT pass minimal 95%
- Tidak ada regresi mayor pada alur estimate

## Risk Register (Ringkas)
- [ ] Risiko race condition pada save paralel
- [ ] Risiko pertumbuhan tabel history cepat
- [ ] Risiko eksposur data sensitif pada snapshot
- [ ] Risiko hardcoded label menurunkan kualitas i18n

## Daily Tracking
Gunakan tabel ini untuk update progres harian.

| Date | Phase | Task | Owner | Status | Notes |
|---|---|---|---|---|---|
| 2026-04-16 | Fase 0 | Dokumen checklist dibuat | Team | [x] | Baseline plan siap |
| 2026-04-16 | Fase 1 | Guard insert-only di model history + SQL trigger DB disiapkan | Codex | [x] | SQL trigger sudah dieksekusi di server |
| 2026-04-16 | Fase 1 | Snapshot hash guard + validasi hash + atomic transaction + error logging | Codex | [x] | Implementasi service selesai, siap UAT backend | 
| 2026-04-16 | Fase 2 | Retry bentrok version + observability conflict + no-op skip logging | Codex | [x] | Implementasi service selesai, siap uji race condition | 
| 2026-04-16 | Fase 3 | Definisi PII + masking deterministik snapshot | Codex | [x] | Policy + implementasi service selesai |
| 2026-04-16 | Fase 4 | SQL index optimization + monitoring pack + scale strategy docs | Codex | [~] | Script siap eksekusi di server |
| 2026-04-16 | Fase 4 | Monitoring SQL pack dieksekusi (8 query sukses, 0 error/warning) | Team | [x] | Integrity duplicate version: 0 row |
| 2026-04-16 | Fase 4 | Performance SQL executed (19 query sukses, 0 error/warning), index optimization applied | Team | [x] | Verifikasi index query mengembalikan 10 baris |
| 2026-04-16 | Fase 1 | SQL trigger immutability dieksekusi di server | Team | [x] | Update/Delete history diblok di level DB |
| 2026-04-16 | Fase 3 | Role permission `can_view_estimate_activity_snapshot` ditambahkan (controller + role form + language key) | Codex | [~] | Menunggu deploy + UAT role matrix |
| 2026-04-16 | Fase 3 | SQL retention & archive pack disiapkan (`SQL_ESTIMATE_ACTIVITY_HISTORY_RETENTION_STEP3.sql`) | Codex | [~] | Menunggu eksekusi di server dan verifikasi |

## Approval Checkpoint
- [ ] Approval teknis
- [ ] Approval compliance/security
- [ ] Approval rollout production



