# Artifact Plan: Task 1 - Foundation (Research Policy & History Setup)

## 1. Judul
Implementasi Fondasi Agentic Chatbot: Research Policy Protocol & Supabase Chat History

## 2. Tanggal
Rabu, 6 Mei 2026

## 3. Deskripsi
Fase pertama dari pembangunan Chatbot BRAIN MySRE. Fokus pada pembuatan regulasi perilaku AI (Research Policy) yang menggantikan konsep "Master Prompt" tradisional, serta membangun mekanisme persisten untuk menyimpan dan mengelola riwayat percakapan di Supabase PostgreSQL agar chatbot memiliki *memory* antar-giliran.

## 4. Metodologi
*   **Policy Driven Configuration:** Mendefinisikan batasan AI melalui struktur data (class/dict) yang kaku, bukan teks bebas yang panjang, untuk mengurangi bias.
*   **Database First Interaction:** Membangun *schema* di Supabase sebelum menulis logika aplikasi. Menggunakan `supabase-py` untuk manajemen *history*.
*   **Token Optimization:** Menerapkan algoritma *sliding window* pada pemanggilan *history* (hanya memuat *N* pesan terakhir) untuk mencegah *token limit exceeded* pada LLM.

## 5. Keputusan
*   File `research_policy.py` akan menggunakan `pydantic` atau *data class* untuk menstrukturkan *System Prompt*.
*   Riwayat percakapan tidak akan disimpan di memori lokal, melainkan wajib menggunakan *database* agar aman dari masalah *stateless* FastAPI.
*   Pustaka `supabase-py` akan digunakan untuk interaksi database.

## 6. Alur Diagram
```mermaid
flowchart TD
    Init["Chatbot Init"] --> LoadPolicy["Load Research Policy\n(Persona & Rules)"]
    LoadPolicy --> FetchHist["Fetch Chat History\n(from Supabase)"]
    FetchHist --> Truncate["Apply Sliding Window\n(Keep last N messages)"]
    Truncate --> Context["Context Ready for PRAL"]
```

## 7. Struktur Folder (Tree)
```text
app/
└── services/
    └── chatbot/
        ├── research_policy.py
        └── chat_history.py
```

## 8. Asumsi
*   Koneksi Supabase (`SUPABASE_URL`, `SUPABASE_KEY`) sudah tersedia dan valid di `.env`.
*   Hak akses pembuatan tabel (`CREATE TABLE`) tersedia di Supabase via *SQL Editor* atau *client*.

## 9. Konsep Tabel Metriks
*   Tabel Supabase: `chat_messages`
    *   `id` (uuid, PK)
    *   `session_id` (varchar, index)
    *   `role` (varchar: 'user'/'assistant')
    *   `content` (text)
    *   `created_at` (timestamp)

## 10. Konsep Logika Prompting
Di dalam `research_policy.py`, `CORE_RESEARCH_RUBRIC` akan berisi template terisolasi:
*   `SYSTEM_PERSONA`: Definisi peran asisten riset.
*   `GROUNDEDNESS_RULES`: Aturan ketat larangan halusinasi.
*   `CITATION_FORMAT`: Format wajib sitasi *inline* (e.g., `[hash_ID]`).

## 11. Langkah Implementasi
1.  Buat skrip SQL untuk membuat tabel `chat_messages` di Supabase.
2.  Buat `app/services/chatbot/chat_history.py` dengan fungsi `save_message(session_id, role, content)` dan `get_history(session_id, limit=5)`.
3.  Buat `app/services/chatbot/research_policy.py` yang mengembalikan format pesan standar LangChain/Gemini.

## 12. Tabel Eksekusi Task

| Check | Fase | Task | Detail Task | Deskripsi | Acceptance Criteria |
| :---: | :---: | :--- | :--- | :--- | :--- |
| [ ] | 1A | **Foundation** | Define Research Policy | Buat `research_policy.py`. | Kelas Python mengembalikan string format Prompt yang mengunci persona dan aturan sitasi. |
| [ ] | 1B | **Foundation** | Create Supabase Table | Buat tabel `chat_messages`. | Skema tabel terbuat di *database* dengan index pada `session_id`. |
| [ ] | 1C | **Foundation** | History Logic | Buat `chat_history.py`. | Fungsi `get_history` mengembalikan *array* *dictionary* pesan (max *N*) dan `save_message` berhasil menulis ke DB. |
