# Execution Log: Phase 2 - Scripting

## Task 2.1: File Skeleton & Import

### Deskripsi
Menulis *boilerplate* untuk `benchmark_chunking.py` dengan menginisialisasi pustaka Python yang diperlukan dan mengimpor modul target (`smart_chunker.py`) dari direktori `app`.

### Langkah-langkah Eksekusi
1. Membuat file `benchmark_chunking.py` di dalam `scripts/Testing-Pipeline/`.
2. Menambahkan `import sys`, `os`, `json`, `time`, `psutil`, `logging`, dan `datetime`.
3. Mengatur sys.path menggunakan `sys.path.append` agar direktori aplikasi (`app/`) dikenali oleh Python.
4. Melakukan *import* fungsi target: `from app.services.parser.smart_chunker import generate_parent_child_chunks`.

### Status Eksekusi
✅ Berhasil

---

## Task 2.2: I/O Handlers

### Deskripsi
Mengatur fungsionalitas Input dan Output dari dokumen teks. 

### Langkah-langkah Eksekusi
1. Mengamankan path konstan untuk `INPUT_DIR`, `OUTPUT_DIR`, `MATRIX_DIR`, dan `ERROR_DIR` pada variabel global.
2. Membangun logika pembacaan file yang mencari dokumen dalam format *Markdown*.
3. Menyusun output dari `generate_parent_child_chunks` menjadi objek *Dictionary* yang menampung `metadata`, `parent_chunks`, dan `child_chunks`.
4. Menggunakan `json.dump` untuk memuat data ke penyimpanan `/Output-Chunking/<filename>_chunked.json`.

### Status Eksekusi
✅ Berhasil

---

## Task 2.3: Profiling Logic

### Deskripsi
Membangun algoritma pemantauan untuk sistem (*hardware*) maupun evaluasi kualitas struktural semantik data (*Chunk metrics*).

### Langkah-langkah Eksekusi
1. Membuat fungsi penangkap *Resource* (`get_process_metrics`) berbasis pustaka `psutil` untuk mendapatkan nilai *Resident Set Size* (RSS) dalam MB dan *CPU Percent*.
2. Memposisikan timer (`time.time()`) persis di antara pemanggilan fungsi chunker untuk kalkulasi durasi.
3. Mengembangkan fungsi kustom `calculate_metrics(p_chunks, c_chunks)` untuk mengekstraksi:
   - Jumlah `p_chunks` dan `c_chunks`.
   - Total panjang karakter untuk menentukan rata-rata ukuran tiap chunk (Parent & Child).
   - Melakukan iterasi pengecekan kunci string tak kosong pada properti `metadata_header` untuk mengakumulasi persentase `P-HEADER RATE`.

### Status Eksekusi
✅ Berhasil

---

## Task 2.4: Metrics Logger

### Deskripsi
Menyusun fungsi *log append-only* berformat Markdown yang memastikan ketahanan (robustness) terhadap gangguan (fail-safe).

### Langkah-langkah Eksekusi
1. Mendeklarasikan nama path `performance_matrix_chunking.md`.
2. Menyusun logika fungsi `log_performance_matrix(metrics)`.
3. Memastikan injeksi Header Tabel dilakukan sekali pada saat file belum ada (baru pertama kali ditulis).
4. Menyusun formating tipe variabel (pembatasan desimal `round` dan perbaikan *fallback default* value `N/A`) agar kompatibel dengan tabel 12 kolom yang telah didesain.
5. Menyertakan mekanisme blokir `try/except` yang akan merutekan kegagalan skrip `smart_chunker` ke file `chunking_errors.log`.

### Status Eksekusi
✅ Berhasil
