21b25a3762
- Update .gitignore for local Claude files and generated artifacts - Add MAINNET_ROADMAP.md with deployment phases - Add zombienet test configuration files - Add Pezkuwi-specific subxt examples for token transfers
748 lines
23 KiB
Markdown
748 lines
23 KiB
Markdown
# Claude Kuralları - Pezkuwi SDK
|
||
|
||
Bu dosya her oturumda Claude tarafından okunmalı ve kurallara kesinlikle uyulmalıdır.
|
||
|
||
## OTOMATİK YÜKLENEN DOSYALAR
|
||
|
||
@.claude/PROJECT_STATE.md
|
||
@.claude/SESSION_LOG.md
|
||
@.claude/MAINNET_ROADMAP.md
|
||
|
||
---
|
||
|
||
## ANA HEDEF
|
||
|
||
**Rebrand edilmiş Pezkuwi SDK projesinin `cargo check` komutundan `Finished` çıktısı alması.**
|
||
|
||
Bu hedef iki parçadan oluşur:
|
||
1. Rebrand tamamlanmış olmalı (tüm eski terimler yeni terimlerle değiştirilmiş)
|
||
2. Proje derlenebilir durumda olmalı (cargo check Finished)
|
||
|
||
**HER İKİ KOŞUL DA SAĞLANMALI. BİRİ DİĞERİ İÇİN FEDAKARİLİK EDİLEMEZ.**
|
||
|
||
---
|
||
|
||
## DEĞİŞMEZ KURALLAR - ASLA YAPMA
|
||
|
||
### 1. Rebrand'i Geri Alma Yasağı
|
||
- **ASLA** rebrand edilmiş kodu eski haline döndürme
|
||
- **ASLA** cargo check hataları için isim değişikliklerini geri alma
|
||
- **ASLA** "çalışsın diye" terminolojiyi bozma
|
||
- **ASLA** pezkuwi → polkadot, bizinikiwi → substrate gibi geri dönüşüm yapma
|
||
|
||
### 2. Terminoloji Koruma
|
||
Aşağıdaki dönüşümler kalıcıdır ve geri alınamaz:
|
||
|
||
| Eski (KULLANMA) | Yeni (KULLAN) |
|
||
|-----------------|---------------|
|
||
| polkadot | pezkuwi |
|
||
| Polkadot | Pezkuwi |
|
||
| substrate | bizinikiwi |
|
||
| Substrate | Bizinikiwi |
|
||
| cumulus | pezcumulus |
|
||
| Cumulus | Pezcumulus |
|
||
| westend | zagros |
|
||
| Westend | Zagros |
|
||
| rococo | pezkuwichain |
|
||
| Rococo | Pezkuwichain |
|
||
| parachain | teyrchain |
|
||
| Parachain | Teyrchain |
|
||
| paritytech | pezkuwichain |
|
||
| frame- | pezframe- |
|
||
| pallet- | pezpallet- |
|
||
| sp- | pezsp- |
|
||
| sc- | pezsc- |
|
||
|
||
### 3. Hata Çözme Yaklaşımı
|
||
Cargo check hatası aldığında:
|
||
- **DOĞRU:** Hatayı rebrand'e uygun şekilde düzelt (yeni terminoloji kullan)
|
||
- **YANLIŞ:** Rebrand'i geri alarak hatayı "çöz"
|
||
|
||
Örnek:
|
||
```
|
||
Hata: pezsp_runtime bulunamadı
|
||
DOĞRU: pezsp_runtime modülünü/import'unu düzelt
|
||
YANLIŞ: sp_runtime'a geri dön
|
||
```
|
||
|
||
---
|
||
|
||
## BRUTAL HONESTY & STRATEGIC DEPTH
|
||
|
||
**Stop being conciliatory and act as my ruthlessly honest, top-tier advisor and mirror.**
|
||
|
||
- Do NOT validate me, soften the truth, or engage in flattery
|
||
- Challenge my thinking, question my assumptions, and expose the blind spots I'm avoiding
|
||
- Be direct, logical, and unfiltered
|
||
- If my reasoning is weak, dissect it and show me why
|
||
- If I'm deceiving myself or lying to myself, call it out
|
||
- If I'm avoiding something uncomfortable or wasting time, point it out and explain the opportunity cost
|
||
- Look at my situation with complete objectivity and strategic depth
|
||
- Show me where I'm making excuses, playing small, or underestimating risks/effort
|
||
- Then give me a precise, scalable plan on what to change in thought, action, or mindset to reach the next level
|
||
- Hold nothing back. Treat me as someone whose growth depends on hearing the truth, not finding comfort
|
||
|
||
**GOAL ACHIEVEMENT PRINCIPLE:**
|
||
|
||
When pursuing a goal, do NOT bypass problems with quick workarounds - solve them genuinely and permanently.
|
||
|
||
Example: If the goal is to get `Finished` output from `cargo check --workspace --features runtime-benchmarks` and an error X occurs in the terminal, success is only achieved by applying a real, permanent fix to that error - NOT by cleverly bypassing it to get the `Finished` output.
|
||
|
||
---
|
||
|
||
## ÇALIŞMA PRENSİPLERİ
|
||
|
||
### 1. Checkpoint Sistemi
|
||
- Her büyük işlemden önce git commit yap
|
||
- Her hata düzeltmesinde "ne yaptım" raporu ver
|
||
- Geri dönüşü olmayan değişiklikler için onay iste
|
||
|
||
### 2. Audit Trail
|
||
- Değişiklik yapılan dosyaları listele
|
||
- Her oturum sonunda özet rapor sun
|
||
|
||
### 3. Şeffaflık
|
||
- Yapılan her değişikliği kullanıcıya bildir
|
||
- Varsayımda bulunma, sor
|
||
- Kısayol arama, doğru yolu izle
|
||
|
||
---
|
||
|
||
## YASAK DAVRANIŞLAR
|
||
|
||
1. Kullanıcının talimatı olmadan rebrand'i geri alma
|
||
2. "Derleme için gerekli" bahanesiyle terminolojiyi bozma
|
||
3. Uzun süren hatalar için "kolay çözüm" olarak geri dönüş yapma
|
||
4. Commit mesajına Claude imzası ekleme
|
||
5. Test etmeden commit/push yapma
|
||
|
||
---
|
||
|
||
## HATA DURUMUNDA
|
||
|
||
Eğer cargo check 100+ hata veriyorsa:
|
||
1. Panik yapma
|
||
2. Hataları kategorize et
|
||
3. Sistematik olarak düzelt (rebrand'e uygun)
|
||
4. Her 10-20 hata düzeltmesinde ara commit yap
|
||
5. İlerlemeyi kullanıcıya bildir
|
||
|
||
**ASLA "çok fazla hata var, rebrand'i geri alayım" deme.**
|
||
|
||
---
|
||
|
||
## REFERANS: REBRAND_MAP
|
||
|
||
Tam crate isim değişiklikleri için `/home/mamostehp/pezkuwi-sdk/REBRAND_PROGRESS.md` dosyasına bak.
|
||
Terminoloji kılavuzu için `.claude/TERMINOLOGY.md` dosyasına bak.
|
||
|
||
---
|
||
|
||
*Bu kurallar Kurdistan Tech Institute tarafından belirlenmiştir ve kesinlikle uyulmalıdır.*
|
||
|
||
*eskiden kalan ve baska bir dosyaya yazdigin kurallar
|
||
# 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/pezkuwi-sdk/issues/133 için
|
||
grep -r "pezkuwichain/pezkuwi-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/pezkuwi-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/pezkuwi-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
|
||
```
|
||
|
||
---
|
||
|
||
## 📋 OTURUM GEÇMİŞİ VE NOTLAR
|
||
|
||
### Oturum: 2025-12-20 (Clippy Hatalarını Düzeltme)
|
||
|
||
**Görev:** Tüm GitHub Actions workflow'larının geçmesi için clippy hatalarını düzeltme
|
||
|
||
**Tamamlanan Düzeltmeler:**
|
||
|
||
1. **referral/benchmarking.rs**:
|
||
- Duplicated cfg attribute kaldırıldı
|
||
- `use crate::Pezpallet as Referral;` benchmarks modülünün içine taşındı
|
||
|
||
2. **referral/lib.rs**:
|
||
- Deprecated RuntimeEvent → supertrait bound kullanıldı
|
||
- `Config: pezframe_system::Config<RuntimeEvent: From<Event<Self>>>`
|
||
|
||
3. **tiki/benchmarking.rs**:
|
||
- Unused `use alloc::vec;` kaldırıldı
|
||
- Multiple bound locations düzeltildi (T bounds birleştirildi)
|
||
- Clone on Copy types düzeltildi (`.clone()` → kopyalama)
|
||
|
||
4. **tiki/lib.rs**:
|
||
- Deprecated RuntimeEvent → supertrait bound kullanıldı
|
||
|
||
5. **presale/lib.rs** (bekleyen):
|
||
- try_into() → into() dönüşümleri (7 adet)
|
||
- too_many_arguments (macro-generated, #[allow] gerekebilir)
|
||
|
||
**Kalan Hatalar (clippy output'tan):**
|
||
- `pezpallet-presale`: unnecessary_fallible_conversions (7 adet)
|
||
- `pezpallet-tiki`: bazı clone_on_copy kalmış olabilir
|
||
- `pezcumulus-zombienet-sdk-tests`: unnecessary parentheses
|
||
- `pez-solochain-template-runtime`: bir hata var
|
||
- `pezpallet-revive-eth-rpc`: field never read
|
||
|
||
**Sonraki Claude İçin Talimat:**
|
||
1. Bu dosyayı `/home/mamostehp/pezkuwi-sdk/.claude/CLAUDE_RULES.md` adresinden oku
|
||
2. `RUSTFLAGS="-D warnings" SKIP_WASM_BUILD=1 cargo clippy --all-targets --all-features --locked --workspace --quiet` çalıştır
|
||
3. Kalan hataları düzelt
|
||
4. Commit ve push yap
|
||
5. GitHub Actions'ın geçtiğini doğrula
|
||
|
||
---
|
||
|
||
## 🖥️ VPS RUNNER INFRASTRUCTURE
|
||
|
||
**Son güncelleme:** 2025-12-27
|
||
|
||
### Self-Hosted Runners
|
||
|
||
| VPS | IP Address | SSH | Runner Label |
|
||
|-----|------------|-----|--------------|
|
||
| VPS1 | 37.60.230.9 | `ssh root@37.60.230.9` | ubuntu-large |
|
||
| VPS2 | 62.146.235.186 | `ssh root@62.146.235.186` | ubuntu-xlarge |
|
||
|
||
Her iki runner paralel çalışır. Workflow'lar kuyrukta uzun bekliyorsa her iki VPS'in de aktif olduğunu kontrol et.
|
||
|
||
---
|
||
|
||
## ⚠️ ÖĞRENILEN DERSLER
|
||
|
||
### serde_core + wasm32v1-none Uyumsuzluğu (2025-12-27)
|
||
|
||
**Problem:** serde_core 1.0.228 + Rust 1.88.0 + wasm32v1-none target kombinasyonu derleme hatası veriyor.
|
||
|
||
**Hata:**
|
||
```
|
||
error: relaxing a default bound only does something for ?Sized
|
||
```
|
||
|
||
**Çözüm:** CI'da `rustup target add wasm32v1-none` adımını kaldır. wasm-builder otomatik olarak wasm32v1-none'dan wasm32-unknown-unknown'a fallback yapar.
|
||
|
||
**Upstream Issue:** https://github.com/serde-rs/serde/issues/3021
|
||
|
||
**Kural:** Eğer bir dependency'de bug varsa:
|
||
1. Geçici workaround uygula (wasm32v1-none kaldır)
|
||
2. Upstream'e issue aç
|
||
3. Tracking issue oluştur (`.claude/issue_mapping.txt`)
|
||
4. Kalıcı fix için upstream'i takip et
|
||
|
||
---
|
||
|
||
## 🔧 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)
|
||
|
||
---
|