# Execution Log: Phase 2 - Scripting

## Task 2.1: File Skeleton & Import

### Deskripsi
Menulis kerangka kode dasar `benchmark_retrieval.py` dan menginisialisasi pustaka Python yang diperlukan.

### Langkah-langkah Eksekusi
1. Membuat file `benchmark_retrieval.py` di dalam direktori `scripts/Testing-Pipeline/`.
2. Melakukan *import* modul penting: `sys`, `os`, `json`, `time`, `psutil`, `logging`, `datetime`, dan `numpy`.
3. Menambahkan penyesuaian `sys.path` untuk menjangkau direktori `app/`.
4. Berhasil memanggil kelas inti `from app.services.parser.semantic_retriever import SemanticRetriever`.

### Status Eksekusi
✅ Berhasil

---

## Task 2.2: Model & I/O Setup

### Deskripsi
Membangun algoritma pembacaan JSON dan persiapan instansiasi model `SentenceTransformer`.

### Langkah-langkah Eksekusi
1. Mendeklarasikan konstanta direktori (INPUT, OUTPUT_JSON, OUTPUT_MD, MATRIX, ERROR).
2. Di dalam *main block*, melakukan instansiasi `retriever = BenchmarkRetriever()` yang memuat model lokal `all-MiniLM-L6-v2`.
3. Menyusun fungsi `process_file` untuk memuat data JSON (*parent_chunks* dan *child_chunks*) dari fase sebelumnya.
4. Membangun struktur *mapping* `parent_chunks_map` (`{parent_id: data}`) untuk akses O(1) ke data *Header* dan *Content* asli.

### Status Eksekusi
✅ Berhasil

---

## Task 2.3: Retrieval & Scoring Logic

### Deskripsi
Melakukan modifikasi (*Wrapper*) pada fungsi SemanticRetriever agar memaparkan nilai Cosine Similarity tanpa merusak *source code* utama.

### Langkah-langkah Eksekusi
1. Membuat *class* `BenchmarkRetriever` yang mewarisi `SemanticRetriever`.
2. Mendefinisikan metode `find_top_k_parents_with_scores` yang identik dengan logika asli namun mengembalikan struktur *Tuple* `(results_ids, results_scores, embed_time, search_time)`.
3. Menambahkan *timer* di sekililing pemanggilan `_embed_batch` dan kalkulasi *cosine similarity*.
4. Menghitung rata-rata skor pada masing-masing 5 pilar kueri secara iteratif.

### Status Eksekusi
✅ Berhasil

---

## Task 2.4: Artifact Generation

### Deskripsi
Menyusun fungsi pembuat dokumen Markdown (*Human Verification*) dan keluaran programatik (*JSON*).

### Langkah-langkah Eksekusi
1. Merangkai fungsi `create_human_verification_md` yang menyatukan *Query*, ID yang terpilih, skor kalkulasi, nilai `metadata_header`, serta blok *Content* dalam urutan vertikal.
2. Menyimpan luaran JSON ke `archive/Testing-Pipeline/benchmark-retrieval/Output-JSON/`.
3. Menyimpan artifak `.md` bacaan manusia ke `archive/Testing-Pipeline/benchmark-retrieval/Output-Human-Verification/`.

### Status Eksekusi
✅ Berhasil

---

## Task 2.5: Metrics Logger

### Deskripsi
Merancang matriks performa tabel untuk memantau waktu kalkulasi dan konsumsi *hardware*.

### Langkah-langkah Eksekusi
1. Menambahkan fungsi `get_process_metrics(process)` berbasis `psutil` di dalam `process_file`.
2. Menyusun string berformat (`avg_score_str`) untuk merepresentasikan kelima skor pilar di 1 sel tabel.
3. Menulis implementasi `log_performance_matrix` yang aman (*append-only*), lengkap dengan validasi keberadaan tabel *header* sebelumnya.

### Status Eksekusi
✅ Berhasil
