Files
sp/teknikborc.md
Semih 230ef63433 docs: mark super_panel_reader role as done
Role created on the Sase.tr standalone Postgres with SELECT-only
privileges on schema public + ALTER DEFAULT PRIVILEGES so future
tables inherit the grant. Panel-web DATABASE_URL_SASE_RO switched to
this role; panel redeployed; UPDATE/INSERT/DELETE rejected with
'permission denied' as expected; SELECT count(*) FROM users still
works.

Process: temporarily exposed sase-postgres on port 54320, ran the
SQL via psql, then closed the public port. Password generated with
openssl rand -hex 24 (lives only in Coolify env).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 16:46:22 +03:00

140 lines
7.1 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.
# Teknik Borç
Süper Panel'in shipped'i takip etmediği açık iş listesi. Her item'ın **ne zaman/neden** yapılması gerekiyor not'lu.
---
## Süper Panel Phase 7 (User Management) — DONE
Phase 7a7c (foundation + tüm AF mutation faz'ları) **shipped** (2026-05-18):
- Adım 1: User listesi sayfası
- Adım 2: User detay 360° (header + 5 sekme)
- Adım 3: Read-only impersonation (Sase.tr + panel, signed cookie + readonly guard)
- Phase A: Founder notes (panel-only)
- Phase B: Suspend / Reactivate / Ban (users.status + session kill)
- Phase C: Trial extend + manual activate
- Phase D: Plan change + cancel/resume
- Phase E: Refund (Stripe) + bonus süre extension
- Phase F: Brand reassignment (per-plan brandCount validate)
**Henüz yok (PRD §6.5, §9.2-5):**
- Support actions: password reset link, email verify (resend + manuel), 2FA reset
- KVKK export + erase (right-to-erasure)
- Active session yönetimi (revoke individual / revoke all)
- API key + webhook yönetimi (Sase.tr'de tablo yok, defer)
- Bulk operations (segment + bulk email/quota/plan)
- Automation rules (auto-suspend, churn alert, trial-end handling)
---
## Süper Panel Phase 8 (VIN Decode Observability) — DONE
Faz 14 + regression alert **shipped** (2026-05-18):
- Faz 1: Operational health + provider performans dashboard
- Faz 2a: Error fingerprint drill-down
- Faz 2b: Deploy regression analizi (Coolify deploys + ±30dk window)
- Faz 2c: BIP insight integration (provider_quality + keyword filter)
- Faz 3: Business impact dashboard (8 metric, quota'sız model)
- Faz 4: Trends (90g volume, peak heatmap, cache, efficiency) + provider drill-down
- Regression Telegram alert (per-deploy 24h dedupe)
- VIN anomaly detection + Telegram (success drop, latency spike, volume drop/spike, timeout dominance)
**Henüz yok (Phase 8 defer):**
- Alert threshold config UI — eşikleri panel'den ayarla (şimdi hardcoded)
- Anomali kayıt persistance — `vin_anomaly_log` tablosu yok; sadece Redis dedupe + Telegram
- Documentation / runbook (bu commit'te [RUNBOOK.md](./RUNBOOK.md) eklendi)
---
## PRD ↔ Sase.tr gerçeği gap'leri
`super-panel-user-management-prd-v1.md` ve `super-panel-vin-decode-observability-prd-v1.md` Sase.tr için bazı yapıları varsayıyor; gerçek Drizzle şeması daha sade:
- **EFT akışı kaldırıldı** — Stripe Migration sonrası (May 2026) EFT alınmıyor; `payments.method='eft'` historical. PRD §7.1 işlevsiz.
- **B2B / company / multi-seat yok** — PRD §8 (Grup 4) ve company görünümleri uygulanamaz.
- **API key + webhook yönetimi yok** — Sase.tr'de tablolar yok, defer.
- **Quota tablosu yok** — `queryLogs` + `plans.brandCount` üzerinden türetiliyor; observability Faz 3 quota-bağımsız tasarlandı.
- **WhatsApp chatbot conversation entegrasyonu** — sistem bilinmiyor, defer.
- **ML decoder events emit edilmiyor** — `vin_decode_succeeded.ml_decoder_used/ml_confidence` Sase.tr backend'inde set edilmiyor (Sase.tr VAG ML pipeline kod akışında değil).
---
## Defansif teknik borç
### ~~super_panel_reader DB rolü~~ — DONE (2026-05-18)
Panel `DATABASE_URL_SASE_RO` env'i artık `super_panel_reader` rolüyle bağlanıyor. Smoke test doğrulandı: SELECT çalışıyor, UPDATE/INSERT/DELETE → `permission denied for table`. Rol Coolify standalone postgres'te `GRANT SELECT ON ALL TABLES IN SCHEMA public` + `ALTER DEFAULT PRIVILEGES` ile kuruldu (geçici public port üzerinden psql ile, sonra port kapatıldı).
### `prisma db push` multi-replica güvensizliği
`apps/web/package.json` `start` scripti: `prisma db push --skip-generate && next start`. Tek replica'da OK; multi-replica olursa race condition. İlerideki bir Coolify pre-deployment hook'una taşı veya proper migrations'a geç.
### Sase.tr `apps/web` pre-existing typecheck error'ları
`FULL_PLAN_BRAND_LIMIT` eksik, `@radix-ui/react-accordion` types eksik. Phase 7/8 patch'lerimiz etkilemedi ama temizlik borç.
---
## Sase.tr-side (Süper Panel için)
### Faz 0 + Faz 1 PostHog event taxonomy
`sase-posthog-events-prd.md` referansı. BIP'in 15 tag rule'unun yaklaşık 9'u henüz fire etmiyor:
| Tag | Beklediği event |
|---|---|
| `payment_ui_silent_failure` (P0) | `payment_succeeded` + `payment_success_ui` (dual-capture rename) |
| `payment_friction` (P1) | `payment_initiated` |
| `vin_decode_fail_pattern` (P1) | `vin_decode_failed` (mevcut alias çalışıyor) |
| `provider_reliability_issue` (P2) | `provider_fallback_triggered` |
| `provider_mismatch` (P2) | `provider_fallback_triggered` + `vin_decode_succeeded` |
| `compatibility_quality_gap` (P2) | `compatibility_check_completed` |
| `parts_export_abandoned` (P3) | `parts_export_initiated` |
| `search_validation_friction` (P3) | `search_input_validation_failed` |
| `at_risk_active_session` (P2) | identify() ile `subscription_status` + `total_vin_queries_last_30d` |
**Etki:** Pipeline %30-40 → tam kapasite. LLM analizleri çok daha specific olur.
Faz 0 (2 gün): identify schema + group + alias + data-private audit + 5 parts/compat event.
Faz 1 (5-7 gün): VIN decode + provider + search + feature discovery + API key/webhook + subscription funnel + payment dual-capture.
**Not:** VIN decode backend telemetry'sini PR #32'de eklemiştik, **PR #33 ile revert ettik** (`query_logs` zaten her şeyi tutuyor, PostHog hop gereksiz). Frontend UX event'leri için bu Faz 0+1 hala değerli.
---
## BIP (Behavioral Insight Pipeline) açık işler
### 1. Pilot'un bulduğu P1 bug'ı fix et (highest ROI)
**Insight ID:** `cmp4oipcr000amsdsu2t8qnyi` · `/insights/i/cmp4oipcr000amsdsu2t8qnyi`
Başarılı VIN decode sonrası frontend `/api/vehicles/undefined` ve `/api/categories/tree/undefined` çağırıyor → 500. ~30-60 dk Sase.tr fix. Loop kapanışı: Fix → Gitea issue kapat → `github-sync` 10dk içinde `shipped``validation` cron 14d sonra `validated`.
### 2. Eval golden set
Şu an sadece `bug_triage` 2-case. 6 prompt için 0 case. Her aktif prompt için 15-20 gerçek session'dan elle ground truth. ~yarım gün (per prompt ~30dk).
### 3. Pattern bundle gerçek veri ile validate
`pattern_bundle` prompt deploy ama ≥3 same-fingerprint senaryo gelmedi (volume düşük). Sase.tr Faz 0+1 sonrası 1 hafta bekle veya aylık session ≥1000 olunca.
### 4. Embedding-based cross-fingerprint similarity
PRD Phase 6e içinde defer edilmiş. Pattern aggregation şu an string match. 50+ insight birikince pgvector + sentence-transformers/MiniLM.
### 5. Multi-project routing
`INSIGHT_PROJECT_KEY=sase` hardcoded. Spokes (`catvicer`, `kokpit`, `otoyedekparca`, `eryaman`, `doner312`) `status='planned'`. İlk spoke canlandığında: per-project PostHog polling + per-spoke budget alloc + `GITEA_REPO_<KEY>` (env mapping zaten supportluyor).
---
## Minor / Düşük öncelik
- **`pattern_bundle` UI surface** — `/insights/patterns` ayrı başlık
- **Cost dashboard chartlar** — şu an tablo; recharts ile daily trend
- **POST /api/webhooks/gitea** — receiver yazıldı, polling primary; webhook real-time gerekirse Cloudflare/Tailscale çözümü gerekli
- **github-sync job rename** — `issue-sync`'e taşı (BullMQ state cleanup gerekir)
- **Audit log retention** — şu an pruning yok, aylık partition + 90gün retention eklenebilir