Files
pezkuwi-sdk/CLAUDE.md
T

523 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Claude Code Kuralları - Pezkuwi SDK
## 🚨 GITHUB ACTIONS KURALI - KESİNLİKLE UYULMALI
**Workflow hata verdiğinde veya değişiklik yapılacağında:**
1. **ÖNCE** tüm mevcut workflow run'larını iptal et (`gh run cancel`)
2. **SONRA** hepsini sil (`gh run delete`)
3. **EN SON** tek bir commit/push ile temiz başlat
**ASLA eski workflow'ların üzerine yeni workflow bırakma!**
**ASLA kuyrukta onlarca workflow biriktirme!**
```bash
# Temizlik komutu (her zaman önce bunu çalıştır):
gh run list --limit 100 --json databaseId,status | jq -r '.[] | select(.status == "queued" or .status == "in_progress" or .status == "pending") | .databaseId' | xargs -I{} gh run cancel {} 2>/dev/null
sleep 5
gh run list --limit 100 --json databaseId -q '.[].databaseId' | xargs -I{} gh run delete {} 2>/dev/null
```
---
## ⚠️ PEZKUWI SDK TERMİNOLOJİSİ - KRİTİK
**ASLA POLKADOT SDK TERİMLERİ KULLANMA! Bu bağımsız bir blockchain projesi.**
### Doğru Terminoloji Tablosu:
| YANLIŞ (Polkadot SDK) | DOĞRU (Pezkuwi SDK) |
|-----------------------|---------------------|
| parachain | **teyrchain** |
| rococo | **pezkuwichain** |
| westend | **zagros** |
| kusama | **zagros** |
| polkadot | **pezkuwichain** |
| `[[parachains]]` | **`[[teyrchains]]`** |
| `[[parachains.collators]]` | **`[[teyrchains.collators]]`** |
| `-lparachain=debug` | **`-lteyrchain=debug`** |
| `parachain=debug` | **`teyrchain=debug`** |
### 🔄 CRATE REBRAND KURALLARI (76 Crate)
**Prefix Dönüşümleri:**
| Polkadot SDK Prefix | Pezkuwi SDK Prefix | Örnek |
|---------------------|-------------------|-------|
| `sp-` | `pezsp-` | sp-core → pezsp-core |
| `sc-` | `pezsc-` | sc-client → pezsc-client |
| `frame-` | `pezframe-` | frame-support → pezframe-support |
| `pezpallet-` | `pezpallet-` | pezpallet-balances → pezpallet-balances |
| `cumulus-` | `pezcumulus-` | cumulus-client → pezcumulus-client |
| `bridge-hub-` | `pezbridge-hub-` | bridge-hub-runtime → pezbridge-hub-runtime |
| `bridge-runtime-` | `pezbridge-runtime-` | bridge-runtime-common → pezbridge-runtime-common |
| `mmr-` | `pezmmr-` | mmr-gadget → pezmmr-gadget |
| `snowbridge-` | `pezsnowbridge-` | snowbridge-core → pezsnowbridge-core |
**snowbridge-pezpallet-* Dönüşümü:**
```
snowbridge-pezpallet-* → pezsnowbridge-pezpallet-*
```
Örnek: `snowbridge-pezpallet-ethereum-client``pezsnowbridge-pezpallet-ethereum-client`
**Özel Dönüşümler:**
| Polkadot SDK | Pezkuwi SDK |
|--------------|-------------|
| `bp-runtime` | `pezbp-runtime` |
| `bp-header-chain` | `bp-header-pez-chain` |
| `asset-test-utils` | `asset-test-pezutils` |
| `test-runtime-constants` | `peztest-runtime-constants` |
| `xcm-docs` | `xcm-pez-docs` |
| `xcm-emulator` | `xcm-pez-emulator` |
| `xcm-procedural` | `xcm-pez-procedural` |
| `xcm-runtime-apis` | `xcm-runtime-pezapis` |
| `xcm-simulator` | `xcm-pez-simulator` |
**Genel pez- Prefix Eklenen Crate'ler:**
| Polkadot SDK | Pezkuwi SDK |
|--------------|-------------|
| fork-tree | pez-fork-tree |
| subkey | pez-subkey |
| generate-bags | pez-generate-bags |
| kitchensink-runtime | pez-kitchensink-runtime |
| minimal-template-node | pez-minimal-template-node |
| minimal-template-runtime | pez-minimal-template-runtime |
| node-bench | pez-node-bench |
| node-primitives | pez-node-primitives |
| node-rpc | pez-node-rpc |
| node-testing | pez-node-testing |
| solochain-template-node | pez-solochain-template-node |
| solochain-template-runtime | pez-solochain-template-runtime |
| tracing-gum | pez-tracing-gum |
| tracing-gum-proc-macro | pez-tracing-gum-proc-macro |
| equivocation-detector | pez-equivocation-detector |
| finality-relay | pez-finality-relay |
| messages-relay | pez-messages-relay |
| slot-range-helper | pez-slot-range-helper |
| penpal-emulated-chain | pez-penpal-emulated-chain |
| penpal-runtime | pez-penpal-runtime |
**Dosya İsimlendirme Kuralı:**
- Cargo.toml `name` alanı rebrand edilmeli
- Rust dosya isimleri mod bildirimleriyle eşleşmeli
- Örnek: `mod pezsnowbridge_pezpallet_system;` → dosya `pezsnowbridge_pezpallet_system.rs` olmalı
### Token'lar:
- **HEZ**: Relay chain native token (200M genesis, inflationary)
- **PEZ**: Asset Hub governance token (5B sabit supply)
- **TYR**: Base unit (1 HEZ = 10^18 TYR)
### System Teyrchains:
- **Asset Hub Teyrchain**: ID 1000
- **People Chain Teyrchain**: ID 1004
### Zombienet Config Örneği (DOĞRU):
```toml
[relaychain]
default_args = ["-lteyrchain=debug"]
chain = "pezkuwichain-dev"
[[teyrchains]]
id = 1000
chain = "asset-hub-pezkuwichain-dev"
[[teyrchains.collators]]
args = ["-lteyrchain=debug"]
```
---
## 🎯 ANA HEDEF VE ÇALIŞMA PRENSİPLERİ
### Hedef
Pezkuwi blockchain'i mainnet'e taşımak. Her test aşamasında (dev → local → alpha → beta → staging → mainnet) tüm bug/hataları kalıcı olarak çözmeden bir sonraki aşamaya GEÇİLMEZ.
### Mevcut Aşama: DEV NETWORK
**Başarı Kriterleri (hepsi sağlanmalı):**
- [ ] 3 runtime çalışmalı (Relay Chain, Asset Hub, People Chain)
- [ ] Birbirini görmeli (peer discovery)
- [ ] Bloklar üretilmeli
- [ ] Finalized olmalı
- [ ] Alice hesabında genesis token'ları görülmeli (HEZ, PEZ)
### Test Aşamaları Sırası
1. **DEV** (1 validator - Alice) ← ŞU AN BURADAYIZ
2. **LOCAL** (2 validator - Alice + Bob)
3. **ALPHA** (4 validator)
4. **BETA** (8 validator)
5. **STAGING** (21 validator)
6. **MAINNET** (100 validator)
### Çalışma Prensibi
```
Her aşamada:
1. Planlanan testleri yap
2. Tüm testlerden başarılı sonuç al
3. Hata/bug varsa → düzelt → tekrar test et
4. Başarılı olunca → blockchain upgrade → sonraki aşama
```
**ÖNEMLİ:** Ekranda geçici başarı görmek yeterli DEĞİL. Kalıcı çözümler, tam testler, sonra ilerleme.
---
## Dizin Kuralları
| Dizin | Kullanım |
|-------|----------|
| `/home/mamostehp/Pezkuwi-SDK` | **Tüm işlemler burada yapılır** (edit, commit, push) |
## Ekran Görüntüleri
Kullanıcı "ekran" veya "ekrana bak" dediğinde:
```
/home/mamostehp/DKSweb_ekran/Screenshot.png
```
dosyasını oku.
## Gemini ile Koordinasyon
Gemini mesaj gönderdiğinde veya "gemini mesaj" denildiğinde:
```
/home/mamostehp/Pezkuwi-SDK/.ai-coordination/messages.md
```
dosyasını oku. Diğer koordinasyon dosyaları:
- `claude-status.md` - Claude'un mevcut durumu
- `gemini-status.md` - Gemini'nin mevcut durumu
- `task-board.md` - Görev tablosu
## Commit Kuralları
- Commit mesajlarına `🤖 Generated with [Claude Code]` ve `Co-Authored-By: Claude` **EKLEME**
- Sadece düz commit mesajı yaz
## Proje Bilgileri
- **Proje:** Pezkuwi SDK - Bağımsız blockchain projesi
- **Teknoloji:** Polkadot SDK fork'u (ama Polkadot DEĞİL, bağımsız)
- **Ana branch:** `main`
- **GitHub:** `pezkuwichain/pezkuwi-sdk`
- **Discord:** `https://discord.gg/Y3VyEC6h8W` (Server: 1444335345935057049)
## Önemli Notlar
1. `paritytech` referansları `pezkuwichain` olmalı
2. `polkadot-sdk` referansları `pezkuwi-sdk` olmalı
3. Kaliteyi düşüren "kolay çözümler" yerine doğru çözümü uygula
4. Geride iş bırakma - kapsamlı da olsa tamamla
---
## 🔗 UPSTREAM ISSUE TRACKING SİSTEMİ
**Polkadot SDK'daki issue'ları Pezkuwi SDK'ya nasıl taşıyoruz:**
### Mantık
Upstream Polkadot SDK'de TODO/issue referansları varsa, bunları **tracking issue** sistemi ile takip ediyoruz.
### Adımlar
**1. Upstream'de Kontrol Et:**
```bash
# Örnek: pezkuwichain/kurdistan-sdk/issues/133 için
grep -r "pezkuwichain/kurdistan-sdk/issues/133" /home/mamostehp/polkadot-sdk-check/
```
**2. Tracking Issue Oluştur:**
```bash
gh issue create --repo pezkuwichain/pezkuwi-sdk --label "upstream-tracking" \
--title "[Upstream Tracking] paritytech/polkadot#2403" \
--body "**Upstream:** https://github.com/pezkuwichain/kurdistan-sdk/issues/133
**Status Tracking:**
- [x] Pending - Upstream not yet resolved
- [ ] Resolved - Fix merged upstream
- [ ] Evaluated - Assessed if needed for PezkuwiChain
- [ ] Applied - Fix applied to our chain
- [ ] Closed - Upstream issue closed
- [ ] Skipped - Not relevant for us
**Last Check:** 2025-12-06
**Next Check:** 2026-01-06
**Notes:**
ValidatorIndex From<u32> trait implementation issue.
Periodically check upstream and update checkboxes above based on status changes."
```
**3. Koddaki Linki Güncelle:**
```rust
// ÖNCEKİ:
// https://github.com/pezkuwichain/kurdistan-sdk/issues/133
// SONRA (bizim tracking issue'ya işaret et):
// https://github.com/pezkuwichain/pezkuwi-sdk/issues/163
```
### Örnek Tamamlanmış Tracking Issue'lar
- **#163** → paritytech/polkadot#2403 (ValidatorIndex)
- **#164** → paritytech/polkadot#222 (CommittedCandidateReceipt Ord)
- **#165** → paritytech/polkadot#7575 (ScheduledCore.collator DEPRECATED)
- **#166** → paritytech/polkadot#6586 (SessionInfo frozen)
### Neden Böyle Yapıyoruz?
1. **Broken link olmasın:** Upstream issue linklerini kendi repo'muza çeviriyoruz
2. **Takip:** Upstream'de issue çözüldü mü, bizde uygulamamız gerekiyor mu takip ediyoruz
3. **Workflow:** `.github/workflows/upstream-issue-tracker.yml` haftalık kontrol ediyor
---
## ✅ CI/CD QUICK-CHECKS DÜZELTMELERİ TAMAMLANDI
**Son güncelleme:** 2025-11-29
### Tamamlanan İşler
1. **check-workspace.py düzeltmesi**
- `polkadot-sdk``pezkuwi-sdk` değiştirildi
- Umbrella crate için hem `path` hem `workspace = true` kabul ediliyor
2. **Bridge crate workspace inheritance (16 crate)**
- Tüm bridge crate'leri `workspace = true` kullanıyor
3. **Markdown lint kuralları**
- MD004 (ul-style): Devre dışı - çok fazla legacy dosya
- MD013 (line-length): Devre dışı - URL'ler satırları uzatıyor
4. **TOML format (taplo)**
- `.config/taplo.toml` path'leri `polkadot``pezkuwi` düzeltildi
- 435+ TOML dosyası formatlandı
5. **Zepter check**
- `.config/zepter.yaml`: `-p=polkadot-sdk``-p=pezkuwi-sdk` düzeltildi
- Feature propagation: 36+ issue fix edildi
- Duplicate deps: `pezpallet-identity-kyc` ve `pezpallet-tiki` düzeltildi
6. **Umbrella crate**
- `generate-umbrella.py` çalıştırıldı
- `umbrella/Cargo.toml` ve `umbrella/src/lib.rs` yeniden oluşturuldu
### Değiştirilen Dosyalar (438 dosya)
- Config dosyaları: `.config/taplo.toml`, `.config/zepter.yaml`, `.github/.markdownlint.yaml`
- Script: `.github/scripts/check-workspace.py`
- Pezpallet Cargo.toml: `pezpallet-identity-kyc`, `pezpallet-tiki` + 12 özel pezpallet feature propagation
- Tüm Cargo.toml dosyaları (taplo format)
- Umbrella crate dosyaları
### Sonraki Adım
Commit atılıp push edilmeli - CI/CD artık geçmeli.
---
## 🧪 ZOMBIENET TEST ENVIRONMENT VARIABLES
**Zombienet SDK test'leri için gerekli environment variable'lar:**
### Problem
`zombienet_sdk::environment::get_images_from_env()` fonksiyonu, test'lerde kullanılacak Docker image'larını environment variable'lardan alır. Pezkuwi SDK için bu variable'lar tanımlanmalı.
### Çözüm
**Lokal test için:**
```bash
export ZOMBIENET_IMAGE_PEZKUWI="docker.io/pezkuwichain/pezkuwi:latest"
export ZOMBIENET_IMAGE_CUMULUS="docker.io/pezkuwichain/pezcumulus:latest"
cargo test --workspace --features runtime-benchmarks
```
**CI/CD workflow'larına eklenecek:**
Test yapan tüm workflow'lara (`.github/workflows/tests*.yml`) şu environment variable'lar eklenmelidir:
```yaml
env:
ZOMBIENET_IMAGE_PEZKUWI: "docker.io/pezkuwichain/pezkuwi:latest"
ZOMBIENET_IMAGE_CUMULUS: "docker.io/pezkuwichain/pezcumulus:latest"
```
**Not:** Bu değişkenler compile-time'da image alanlarının doldurulması için gerekli. Gerçek image path'leri production'da güncellenebilir.
**İlgili dosyalar:**
- `bizinikiwi/client/transaction-pool/tests/zombienet/yap_test.rs:38`
- Tüm zombienet SDK test dosyaları
**Tarih:** 2025-12-09
---
## 🛑 SİSTEMATİK ÇALIŞMA KURALLARI - KRİTİK
**Son güncelleme:** 2025-12-13
Bu kurallar, tekrarlanan hatalardan öğrenilerek oluşturulmuştur. **KESİNLİKLE** uyulmalı.
### 1. ÇALIŞAN KODA DOKUNMA
```
"If it ain't broke, don't fix it"
```
- Çalışan workflow'lara, test geçen dosyalara **gereksiz değişiklik yapma**
- Bir şeyi "iyileştirmek" için çalışan kodu değiştirme
- Düzeltme yaparken **sadece hatalı olan yere** odaklan
### 2. TEK DEĞİŞİKLİK → TEK TEST
```
Her seferinde SADECE BİR değişiklik yap
→ Test et
→ Sonucu gör
→ Sonra diğerine geç
```
- Birden fazla değişikliği aynı anda yapmak = hangi değişikliğin hataya sebep olduğunu anlayamama
- Bir commit'te birden fazla bağımsız fix varsa, sorun çıktığında rollback zor
### 3. LOKAL TEST ÖNCE
```
Mümkünse önce lokal test et, sonra push et
```
- `cargo check --workspace`
- `cargo test -p <crate>`
- `cargo clippy --workspace`
GitHub'a push edip sonucu beklemek = zaman kaybı + gereksiz workflow kuyruğu
### 4. GERİ DÖNÜŞ NOKTASI BELİRLE
```
Her başarılı durumda commit at ve işaretle
```
- "Bu çalışıyor" diye bilinen commit SHA'sını not al
- Sorun çıkarsa o commit'e dön, karmaşık düzeltmeler deneme
- Git history'si temiz tutulmalı
### 5. PANİK YAPMA
```
İlk hata geldiğinde:
1. DURMA
2. Hata mesajını OKU
3. Root cause analizi YAP
4. Sonra düzelt
```
- Hızlıca "düzeltme" yapmaya çalışmak = durumu daha da kötüleştirmek
- Bir düzeltme işe yaramazsa → geri al → farklı yaklaşım dene
- Aynı şeyi tekrar tekrar deneme
### 6. ROLLBACK > DEBUG
```
Düzeltme 2-3 denemede işe yaramazsa → ROLLBACK
```
- Çalışan versiyona geri dön
- Temiz bir başlangıç noktasından tekrar başla
- Sonsuz debug döngüsüne girme
### Örnek Senaryo (YANLIŞ):
```
1. Clippy hatası var → düzelt
2. Düzeltme sırasında isdraft workflow'una dokundum (gereksiz)
3. isdraft patladı
4. isdraft'ı düzeltmeye çalıştım (5 farklı deneme)
5. Hepsi başarısız
6. Sonunda revert ettim
7. Zaman kaybı: 2 saat
```
### Örnek Senaryo (DOĞRU):
```
1. Clippy hatası var → düzelt
2. Sadece clippy ile ilgili dosyalara dokun
3. Test et, push et
4. Başka bir şey patlarsa → o dosyalara bak
5. Çalışan koda dokunma
```
---
## 🔧 DEVAM EDEN GÖREV: pezpallet-revive-eth-rpc DERLEME
**Son güncelleme:** 2025-12-19 14:50 UTC
### Mevcut Durum
`pezpallet-revive-eth-rpc` crate'i compile edilemiyor. İlerleme kaydedildi ama henüz tamamlanmadı.
### TAMAMLANAN ADIMLAR ✅
1.`pez-revive-dev-node` başarıyla derlendi
2. ✅ Dev node çalıştırıldı
3. ✅ Yeni metadata generate edildi (`revive_chain.scale`)
- Artık sadece `pezsp_runtime`, `pezpallet_revive` path'leri var
- `sp_runtime`, `pallet_revive` (upstream) yok
4.`no_default_substitutions` eklendi (`subxt_client.rs`)
### KALAN SORUNLAR
**SORUN 1: subxt hala `sp_runtime` arıyor**
`no_default_substitutions` eklense de subxt bazı type'lar için hala `sp_runtime` path'i kullanıyor:
```
error[E0433]: could not find `sp_runtime` in `runtime_types`
```
**Olası çözüm:** `crate_path` veya ek `substitute_type` direktifleri gerekebilir.
**SORUN 2: H160, H256 type substitutions eksik**
`no_default_substitutions` ile varsayılan type mapping'ler de kayboluyor:
```
error[E0277]: the trait bound `H160: From<[u8; 20]>` is not satisfied
```
**Çözüm:** Eksik type'lar için substitute_type ekle:
```rust
substitute_type(
path = "primitive_types::H160",
with = "::subxt::utils::Static<::pezsp_core::H160>"
),
substitute_type(
path = "primitive_types::H256",
with = "::subxt::utils::Static<::pezsp_core::H256>"
),
```
**SORUN 3: SQLX Query Cache**
```
error: `SQLX_OFFLINE=true` but there is no cached data for this query
```
**Çözüm seçenekleri:**
1. `cargo sqlx prepare` ile cache regenerate (PostgreSQL/SQLite gerekli)
2. `query!``query_unchecked!` ile compile-time check'i devre dışı bırak
### SONRAKİ ADIMLAR
1. [ ] H160, H256 ve diğer primitive_types için substitute_type ekle
2. [ ] `crate_path` veya alternatif subxt yapılandırması araştır
3. [ ] SQLX sorununu çöz (unchecked query veya cache regenerate)
4. [ ] `cargo check -p pezpallet-revive-eth-rpc` başarılı olmalı
5. [ ] `cargo check --workspace` başarılı olmalı
### İlgili Dosyalar
- `bizinikiwi/pezframe/revive/rpc/src/subxt_client.rs` - subxt macro
- `bizinikiwi/pezframe/revive/rpc/revive_chain.scale` - YENİ metadata (tamamen rebranded)
- `bizinikiwi/pezframe/revive/rpc/.sqlx/` - SQLX query cache (güncellenmeli)
---