tillerhand 3.43.0 → 3.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/.claude/agents/board-chair.md +20 -20
  2. package/.claude/agents/code-reviewer.md +20 -20
  3. package/.claude/agents/council-advisor.md +14 -14
  4. package/.claude/agents/security-auditor.md +30 -30
  5. package/.claude/agents/test-writer.md +22 -22
  6. package/.claude/board/board-ai.md +25 -25
  7. package/.claude/board/board-api.md +25 -25
  8. package/.claude/board/board-architect.md +28 -28
  9. package/.claude/board/board-devops.md +25 -25
  10. package/.claude/board/board-mobile.md +25 -25
  11. package/.claude/board/board-performance.md +24 -24
  12. package/.claude/board/board-privacy.md +25 -25
  13. package/.claude/board/board-product.md +26 -26
  14. package/.claude/board/board-qa.md +28 -28
  15. package/.claude/board/board-ux.md +26 -26
  16. package/.claude/board/council.md +76 -76
  17. package/.claude/board/rules.md +61 -61
  18. package/.claude/claude-security-guidance.md +10 -10
  19. package/.claude/commands/adopt.md +70 -69
  20. package/.claude/commands/ask-mode.md +9 -9
  21. package/.claude/commands/board.md +15 -15
  22. package/.claude/commands/build.md +47 -47
  23. package/.claude/commands/dashboard.md +17 -17
  24. package/.claude/commands/design.md +31 -31
  25. package/.claude/commands/findings-all.md +14 -14
  26. package/.claude/commands/findings-business.md +7 -7
  27. package/.claude/commands/findings-legal.md +7 -7
  28. package/.claude/commands/findings-perf.md +7 -7
  29. package/.claude/commands/findings-security.md +9 -9
  30. package/.claude/commands/findings-tech.md +7 -7
  31. package/.claude/commands/findings-ux.md +7 -7
  32. package/.claude/commands/fix-bug.md +15 -15
  33. package/.claude/commands/freeze.md +8 -8
  34. package/.claude/commands/handoff.md +38 -38
  35. package/.claude/commands/kit-update.md +17 -14
  36. package/.claude/commands/language.md +13 -0
  37. package/.claude/commands/maintain.md +19 -19
  38. package/.claude/commands/plan-task.md +32 -32
  39. package/.claude/commands/qa.md +17 -17
  40. package/.claude/commands/release.md +40 -40
  41. package/.claude/commands/research.md +31 -31
  42. package/.claude/commands/retro.md +32 -32
  43. package/.claude/commands/review-changes.md +15 -15
  44. package/.claude/commands/rollback.md +24 -24
  45. package/.claude/commands/start.md +116 -113
  46. package/.claude/commands/tools.md +11 -11
  47. package/.claude/commands/user-feedback.md +11 -11
  48. package/.claude/commands/wrap-up.md +18 -18
  49. package/.claude/findings/lenses/business.md +24 -24
  50. package/.claude/findings/lenses/legal.md +29 -29
  51. package/.claude/findings/lenses/perf.md +19 -19
  52. package/.claude/findings/lenses/security.md +30 -30
  53. package/.claude/findings/lenses/tech.md +23 -23
  54. package/.claude/findings/lenses/ux.md +19 -19
  55. package/.claude/findings/protocol.md +54 -54
  56. package/.claude/findings/report-template.md +30 -30
  57. package/.claude/hooks/budget.mjs +7 -7
  58. package/.claude/hooks/checkpoint.mjs +12 -12
  59. package/.claude/hooks/commit-gate.mjs +38 -37
  60. package/.claude/hooks/cost.mjs +2 -2
  61. package/.claude/hooks/council.mjs +3 -3
  62. package/.claude/hooks/dashboard-data.mjs +3 -2
  63. package/.claude/hooks/dashboard.mjs +164 -149
  64. package/.claude/hooks/destructive-guard.mjs +74 -64
  65. package/.claude/hooks/edit-rounds.mjs +3 -3
  66. package/.claude/hooks/flow.mjs +10 -10
  67. package/.claude/hooks/freeze-guard.mjs +27 -23
  68. package/.claude/hooks/gate.mjs +25 -25
  69. package/.claude/hooks/guard-secrets.mjs +11 -11
  70. package/.claude/hooks/lang.mjs +114 -0
  71. package/.claude/hooks/messages.mjs +495 -0
  72. package/.claude/hooks/models.mjs +14 -11
  73. package/.claude/hooks/notify.mjs +3 -2
  74. package/.claude/hooks/package-gate.mjs +17 -15
  75. package/.claude/hooks/plugins-sync.mjs +9 -9
  76. package/.claude/hooks/prefs.mjs +19 -19
  77. package/.claude/hooks/preview.mjs +11 -11
  78. package/.claude/hooks/progress.mjs +14 -14
  79. package/.claude/hooks/qa-report.mjs +11 -10
  80. package/.claude/hooks/reminder.mjs +6 -3
  81. package/.claude/hooks/session-start.mjs +23 -17
  82. package/.claude/hooks/shared.mjs +1 -1
  83. package/.claude/hooks/status-read.mjs +5 -4
  84. package/.claude/hooks/statusline.mjs +14 -11
  85. package/.claude/hooks/structure-guard.mjs +9 -9
  86. package/.claude/hooks/test-guard.mjs +12 -12
  87. package/.claude/hooks/tools.mjs +28 -29
  88. package/.claude/hooks/usage.mjs +18 -15
  89. package/.claude/output-styles/anlatici.md +28 -28
  90. package/.claude/security-patterns.json +3 -3
  91. package/.claude/settings.json +2 -0
  92. package/.claude/skills/logo-design/SKILL.md +42 -42
  93. package/.claude/skills/motion-video/SKILL.md +52 -52
  94. package/.claude/skills/source-research/SKILL.md +35 -35
  95. package/.claude/skills/ui-motion/SKILL.md +38 -38
  96. package/.github/workflows/kit-tests.yml +7 -7
  97. package/.github/workflows/npm-publish.yml +16 -16
  98. package/AGENTS.md +56 -56
  99. package/CHANGELOG.md +7 -7
  100. package/CLAUDE.md +5 -5
  101. package/README.md +199 -172
  102. package/README.tr.md +292 -0
  103. package/docs/architecture/overview.md +31 -31
  104. package/docs/architecture/stack.md +2 -2
  105. package/docs/archive/README.md +4 -4
  106. package/docs/decisions/adr-template.md +14 -14
  107. package/docs/decisions/log.md +10 -10
  108. package/docs/findings/README.md +13 -13
  109. package/docs/findings/config.md +13 -13
  110. package/docs/legal/privacy-kvkk.md +1 -1
  111. package/docs/operations/accounts.md +25 -25
  112. package/docs/operations/deploy-setup.md +64 -64
  113. package/docs/operations/feature-flags.md +17 -17
  114. package/docs/operations/maintenance.md +48 -48
  115. package/docs/operations/release-checklist.md +61 -61
  116. package/docs/operations/spend-alarms.md +28 -28
  117. package/docs/product/feedback.md +9 -8
  118. package/docs/product/glossary.md +16 -16
  119. package/docs/product/launch.md +28 -28
  120. package/docs/product/prd.md +43 -42
  121. package/docs/product/roadmap.md +31 -30
  122. package/docs/product/specs/_template.md +13 -12
  123. package/docs/product/unit-economics.md +23 -22
  124. package/docs/quality/metrics.md +14 -14
  125. package/docs/quality/retros.md +11 -11
  126. package/docs/quality/test-plan.md +48 -48
  127. package/docs/security/checklist.md +57 -57
  128. package/docs/workflow/board.md +7 -7
  129. package/docs/workflow/cost-log.md +4 -4
  130. package/docs/workflow/decision-protocol.md +70 -70
  131. package/docs/workflow/learning.md +4 -4
  132. package/docs/workflow/mcp-catalog.md +31 -31
  133. package/docs/workflow/models.md +35 -35
  134. package/docs/workflow/progress.md +7 -7
  135. package/docs/workflow/skills.md +108 -108
  136. package/docs/workflow/usage-limits.md +62 -62
  137. package/kit/CHANGELOG.md +876 -841
  138. package/kit/VERSION +1 -1
  139. package/kit/guide.html +713 -477
  140. package/kit/guide.tr.html +1328 -0
  141. package/kit/kit.mjs +56 -54
  142. package/kit/project/README.md +29 -29
  143. package/kit/project/gitignore +12 -12
  144. package/kit/templates/addons/ai/.env.example.append +5 -5
  145. package/kit/templates/addons/ai/ai/evals/README.md +11 -11
  146. package/kit/templates/addons/ai/ai/evals/cases.jsonl +2 -2
  147. package/kit/templates/addons/ai/ai/prompts/README.md +8 -8
  148. package/kit/templates/addons/ai/docs/ai/guide.md +56 -56
  149. package/kit/templates/backend/.claude/hooks/format.mjs +1 -1
  150. package/kit/templates/backend/.claude/structure.json +1 -1
  151. package/kit/templates/backend/.env.example +6 -6
  152. package/kit/templates/backend/.github/dependabot.yml +1 -1
  153. package/kit/templates/backend/.github/workflows/ci.yml +13 -13
  154. package/kit/templates/backend/.github/workflows/claude-ci-fix.yml +19 -19
  155. package/kit/templates/backend/.github/workflows/claude-maintenance.yml +18 -18
  156. package/kit/templates/backend/.github/workflows/live-monitoring.yml +14 -14
  157. package/kit/templates/backend/.pre-commit-config.yaml +3 -3
  158. package/kit/templates/backend/docs/architecture/stack.md +98 -98
  159. package/kit/templates/backend/docs/architecture/structure.md +34 -34
  160. package/kit/templates/mobile/.claude/structure.json +1 -1
  161. package/kit/templates/mobile/.env.example +6 -6
  162. package/kit/templates/mobile/.github/dependabot.yml +2 -2
  163. package/kit/templates/mobile/.github/workflows/ci.yml +18 -18
  164. package/kit/templates/mobile/.github/workflows/claude-ci-fix.yml +19 -19
  165. package/kit/templates/mobile/.github/workflows/claude-maintenance.yml +18 -18
  166. package/kit/templates/mobile/.gitignore.append +2 -2
  167. package/kit/templates/mobile/docs/architecture/stack.md +113 -113
  168. package/kit/templates/mobile/docs/architecture/structure.md +33 -33
  169. package/kit/templates/mobile/docs/design/design-guide.md +37 -37
  170. package/kit/templates/mobile/tests/security/rls.mjs +22 -22
  171. package/kit/templates/web-saas/.claude/structure.json +1 -1
  172. package/kit/templates/web-saas/.env.example +11 -11
  173. package/kit/templates/web-saas/.github/dependabot.yml +3 -3
  174. package/kit/templates/web-saas/.github/workflows/ci.yml +20 -20
  175. package/kit/templates/web-saas/.github/workflows/claude-ci-fix.yml +19 -19
  176. package/kit/templates/web-saas/.github/workflows/claude-maintenance.yml +18 -18
  177. package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +12 -12
  178. package/kit/templates/web-saas/docs/architecture/stack.md +116 -116
  179. package/kit/templates/web-saas/docs/architecture/structure.md +44 -44
  180. package/kit/templates/web-saas/docs/design/design-guide.md +38 -38
  181. package/kit/templates/web-saas/tests/live/smoke.spec.ts +4 -4
  182. package/kit/templates/web-saas/tests/security/rls.mjs +22 -22
  183. package/kit/tools/codex/.codex/hooks.json +1 -1
  184. package/package.json +2 -2
  185. package/README.en.md +0 -267
@@ -1,43 +1,44 @@
1
- # Yol Haritası
1
+ # Roadmap
2
2
 
3
- > Her görev **tek oturumda bitebilecek** büyüklükte olmalı (yaklaşık 1-3 saat, 1-5 dosya).
4
- > Büyük görünen görevi böl. AI'ya her zaman tek bir görev ver.
5
- > Biçim: `- [ ] G-NNN: [ne] — kabul: [nasıl anlarım bitti?]`
3
+ > Each task must be small enough to **finish in one session** (about 1-3 hours, 1-5 files).
4
+ > Split a task that looks big. Always give the AI a single task.
5
+ > Format: `- [ ] G-NNN: [what] — done when: [how do I know it is done?]`
6
+ > Phase headings keep the word "Faz" (phase): the dashboard reads it.
6
7
 
7
- ## Faz 0 — Kurulum (iskelet)
8
+ ## Faz 0 — Setup (skeleton)
8
9
 
9
- - [ ] G-001: Repo, git, `.gitignore`, `.env.example` hazır — kabul: ilk commit atıldı
10
- - [ ] G-002: Proje iskeleti kuruldu, lokal çalışıyor — kabul: `dev` komutu hatasız açılıyor
11
- - [ ] G-003: Lint, format, tip kontrolü, test altyapısı — kabul: 4 komut da çalışıyor
12
- - [ ] G-004: Pre-commit + CI (`docs/architecture/stack.md` → "Otomatik kontroller") — kabul: sır içeren deneme commit'i reddediliyor; GitHub'da CI yeşil
13
- - [ ] G-005: **"Merhaba dünya" canlıda** — kabul: prod URL açılıyor (deploy hattını ilk gün kur)
14
- - [ ] G-006: Hata takibi (Sentry vb.) bağlandı — kabul: test hatası panelde görünüyor
15
- - [ ] G-007: Tasarım sistemi koda aktarıldı (arayüz varsa): `DESIGN.md` belirteçleri tema/CSS değişkenlerinde — kabul: örnek ekran yalnız belirteçleri kullanıyor
10
+ - [ ] G-001: Repo, git, `.gitignore`, `.env.example` ready — done when: first commit made
11
+ - [ ] G-002: Project skeleton set up, runs locally — done when: the `dev` command starts without errors
12
+ - [ ] G-003: Lint, format, type check, test setup — done when: all 4 commands work
13
+ - [ ] G-004: Pre-commit + CI (`docs/architecture/stack.md` → "Automatic checks") — done when: a trial commit with a secret is rejected; CI is green on GitHub
14
+ - [ ] G-005: **"Hello world" live** — done when: the prod URL opens (set up the deploy pipeline on day one)
15
+ - [ ] G-006: Error tracking (Sentry etc.) connected — done when: a test error shows up in the dashboard
16
+ - [ ] G-007: Design system moved into code (if there is an interface): `DESIGN.md` tokens in theme/CSS variables — done when: a sample screen uses only tokens
16
17
 
17
- ## Faz 1 — Çekirdek (MVP'nin olmazsa olmazları)
18
+ ## Faz 1 — Core (the must-haves of the MVP)
18
19
 
19
- - [ ] G-010: [Auth: kayıt / giriş / çıkış] — kabul: [...]
20
- - [ ] G-011: [Ana veri modeli + migration] — kabul: [...]
21
- - [ ] G-012: [Ana özellik Ö-01] — kabul: [PRD'deki kriterler]
22
- - [ ] G-019: Refactor turu (faz sonu) — kabul: `node .claude/hooks/budget.mjs --check` tüm depoda temiz; tekrar eden ve kullanılmayan kod temizlendi; testler yeşil
20
+ - [ ] G-010: [Auth: sign up / sign in / sign out] — done when: [...]
21
+ - [ ] G-011: [Main data model + migration] — done when: [...]
22
+ - [ ] G-012: [Main feature Ö-01] — done when: [criteria in the PRD]
23
+ - [ ] G-019: Refactor round (end of phase) — done when: `node .claude/hooks/budget.mjs --check` is clean across the whole repo; duplicate and unused code cleaned up; tests green
23
24
 
24
- ## Faz 2 — MVP tamamlama
25
+ ## Faz 2 — Finishing the MVP
25
26
 
26
- - [ ] G-020: [Ö-02] — kabul: [...]
27
- - [ ] G-021: Boş / hata / yükleniyor durumları tüm ekranlarda — kabul: [...]
28
- - [ ] G-029: Refactor turu (faz sonu) — kabul: `node .claude/hooks/budget.mjs --check` tüm depoda temiz; tekrar eden ve kullanılmayan kod temizlendi; testler yeşil
27
+ - [ ] G-020: [Ö-02] — done when: [...]
28
+ - [ ] G-021: Empty / error / loading states on all screens — done when: [...]
29
+ - [ ] G-029: Refactor round (end of phase) — done when: `node .claude/hooks/budget.mjs --check` is clean across the whole repo; duplicate and unused code cleaned up; tests green
29
30
 
30
- ## Faz 3 — Canlıya hazırlık
31
+ ## Faz 3 — Preparing for launch
31
32
 
32
- - [ ] G-030: `docs/security/checklist.md` kontrol listesi tamam
33
- - [ ] G-031: `docs/legal/privacy-kvkk.md` metinleri yayında
34
- - [ ] G-032: `docs/operations/release-checklist.md` kontrol listesi tamam (`/release`)
35
- - [ ] G-033: Yedekleme + izleme + alarm kuruldu
33
+ - [ ] G-030: `docs/security/checklist.md` checklist complete
34
+ - [ ] G-031: `docs/legal/privacy-kvkk.md` texts published
35
+ - [ ] G-032: `docs/operations/release-checklist.md` checklist complete (`/release`)
36
+ - [ ] G-033: Backup + monitoring + alerts set up
36
37
 
37
- ## Faz 4 — Lansman sonrası
38
+ ## Faz 4 — After launch
38
39
 
39
- - [ ] [İlk kullanıcı geri bildirimlerinden gelen işler]
40
+ - [ ] [Work that comes from the first user feedback]
40
41
 
41
- ## Fikir havuzu (planlanmamış)
42
+ ## Idea pool (not planned)
42
43
 
43
- - [PRD'de "kapsam dışı" olan ama ileride yapılabilecek şeyler]
44
+ - [Things that are "out of scope" in the PRD but could be done later]
@@ -1,22 +1,23 @@
1
- # Spec: [görev kodu veya hata kısa adı] [başlık]
1
+ # Spec: [task code or short bug name] [title]
2
2
 
3
- > Kopyala: `docs/product/specs/<görev kodu>.md`. Özellik spec'i `/plan-task` 3+ dosyalık işte, hata spec'i `/fix-bug` her hatada yazar; küçük işte spec yok.
4
- > "Değişmemesi gereken davranış" satırları kabul kriteri kimliğiyle başlar (`- Ö-01.1: ...`). Kapı (`gate.mjs --run`) bu kimliklerin testi yoksa veya son test raporunda kırmızıysa kırmızı olur.
5
- > Kapı yalnız kendi koşusunda yazılan test raporuna bakar; test komutu JUnit raporu yazmıyorsa sadece testin var olduğunu denetler.
6
- > Davranışı bilerek değiştiriyorsan veya bir kriter kimliğini değiştiriyorsan önce bu dosyayı güncelle; spec artık geçerli değilse `docs/archive/`'e taşı.
3
+ > Copy to: `docs/product/specs/<task code>.md`. `/plan-task` writes a feature spec for work on 3+ files, `/fix-bug` writes a bug spec for every bug; small work has no spec.
4
+ > The "behavior that must not change" lines start with an acceptance criterion id (`- Ö-01.1: ...`). The gate (`gate.mjs --run`) goes red if these ids have no test or if they are red in the last test report.
5
+ > The gate reads only the test report written in its own run; if the test command writes no JUnit report, it only checks that the test exists.
6
+ > If you change behavior on purpose or change a criterion id, update this file first; if the spec is no longer valid, move it to `docs/archive/`.
7
+ > The labels, values and one heading below stay Turkish because the dashboard reads them. Tür = type (özellik = feature, hata = bug), Sınıf = class, Kural = rule, "Değişmemesi gereken davranış" = behavior that must not change. Bug classes: boş-girdi = empty input, doğrulama = validation, yetki = authorization, tarih-saat = date-time, yerel-dil = locale, sıralama = ordering, eşzamanlılık = concurrency, yapılandırma = configuration, dış-servis = external service, sözleşme = contract, arayüz-durumu = UI state, diğer = other.
7
8
 
8
9
  **Tür:** [özellik / hata]
9
- **Sınıf:** [sadece hata: boş-girdi / doğrulama / yetki / tarih-saat / yerel-dil / sıralama / eşzamanlılık / yapılandırma / dış-servis / sözleşme / arayüz-durumu / diğer]
10
- **Kural:** [sadece hata, aynı sınıf tekrarlayınca `/fix-bug` yazar: eklenen kuralın yeri veya "gerek yok" · YYYY-AA-GG]
10
+ **Sınıf:** [bug only: boş-girdi / doğrulama / yetki / tarih-saat / yerel-dil / sıralama / eşzamanlılık / yapılandırma / dış-servis / sözleşme / arayüz-durumu / diğer]
11
+ **Kural:** [bug only, written by `/fix-bug` when the same class repeats: where the added rule is, or "gerek yok" (not needed) · YYYY-AA-GG]
11
12
 
12
- ## Mevcut davranış
13
+ ## Current behavior
13
14
 
14
- [Şu an ne oluyor. Hatada: yeniden üretme adımları ve görülen sonuç.]
15
+ [What happens now. For a bug: the reproduction steps and the result seen.]
15
16
 
16
- ## Beklenen davranış
17
+ ## Expected behavior
17
18
 
18
- [İşten sonra ne olmalı. Ölçülebilir yaz; kabul kriteri varsa kimliğiyle (`Ö-03.1`).]
19
+ [What should happen after the work. Write it measurably; if there is an acceptance criterion, give its id (`Ö-03.1`).]
19
20
 
20
21
  ## Değişmemesi gereken davranış
21
22
 
22
- - [Ö-01.1: Bu iş bozmamalı; kimliği olan ve testi bulunan kriter]
23
+ - [Ö-01.1: This work must not break it; a criterion that has an id and a test]
@@ -1,11 +1,12 @@
1
- # Birim Ekonomisi
1
+ # Unit Economics
2
2
 
3
- > Ürün her yeni kullanıcıda para kazandırıyor mu, kaybettiriyor mu? AI özellikli ürünlerde kullanıcı başı maliyet
4
- > fark edilmeden fiyatı geçebilir. `/dashboard` panosu aşağıdaki girdilerden hesabı **otomatik** yapar.
5
- > `/start` Adım 5'te doldurulur; `/maintain monthly` gerçek faturalarla günceller.
6
- > Sayılarda nokta ondalık ayırıcıdır (örn. `3.5`). Para birimi tek olmalı.
3
+ > Does the product earn money or lose money on each new user? In AI products the cost per user
4
+ > can pass the price without anyone noticing. `/dashboard` does the calculation from the inputs below **automatically**.
5
+ > Filled in at `/start` Step 5; `/maintain monthly` updates it with real bills.
6
+ > Use a dot as the decimal separator in numbers (e.g. `3.5`). Use a single currency.
7
+ > The input labels stay Turkish because the dashboard reads them: Para birimi = currency, Fiyat = price per user per month, Ödeme komisyonu = payment fee, Sabit aylık maliyet = fixed monthly cost, Kullanıcı başı değişken maliyet = variable cost per user, Hedef aktif kullanıcı = target active users, Ücretsiz kullanıcı oranı = free user share.
7
8
 
8
- ## Girdiler
9
+ ## Inputs
9
10
 
10
11
  **Para birimi:** TL
11
12
  **Fiyat (kullanıcı başı aylık):** 0
@@ -15,27 +16,27 @@
15
16
  **Hedef aktif kullanıcı:** 0
16
17
  **Ücretsiz kullanıcı oranı (%):** 0
17
18
 
18
- ## Değişken maliyetin dökümü (kullanıcı başı, aylık)
19
+ ## Breakdown of variable cost (per user, monthly)
19
20
 
20
- | Kalem | Varsayım | Tutar |
21
+ | Item | Assumption | Amount |
21
22
  |---|---|---|
22
- | AI / LLM çağrıları | [örn. kullanıcı başı ayda 200 istek × ortalama token × fiyat] | |
23
- | E-posta | | |
24
- | Depolama / bant genişliği | | |
25
- | Diğer | | |
23
+ | AI / LLM calls | [e.g. 200 requests per user per month × average tokens × price] | |
24
+ | Email | | |
25
+ | Storage / bandwidth | | |
26
+ | Other | | |
26
27
 
27
- ## Sabit maliyetin dökümü (aylık)
28
+ ## Breakdown of fixed cost (monthly)
28
29
 
29
- | Kalem | Tutar |
30
+ | Item | Amount |
30
31
  |---|---|
31
32
  | Hosting | |
32
- | Veritabanı | |
33
- | Alan adı (aylığa bölünmüş) | |
34
- | Diğer abonelikler | |
33
+ | Database | |
34
+ | Domain name (divided per month) | |
35
+ | Other subscriptions | |
35
36
 
36
- ## Notlar
37
+ ## Notes
37
38
 
38
- - **Katkı payı** = fiyat × (1 − komisyon) − değişken maliyet. Negatifse her yeni ödeyen kullanıcı zarar ettirir.
39
- - **Başa baş** = sabit maliyet ÷ katkı payı (ödeyen kullanıcı sayısı).
40
- - Ücretsiz kullanıcılar da değişken maliyet doğurur; hesap bunu "ücretsiz kullanıcı oranı" ile dahil eder.
41
- - Değişken maliyet fiyatın %30'unu geçiyorsa fiyat veya kullanım limiti kararı `maliyet` konusu olarak sorulur.
39
+ - **Contribution margin** = price × (1 − commission) − variable cost. If it is negative, every new paying user causes a loss.
40
+ - **Break-even** = fixed cost ÷ contribution margin (number of paying users).
41
+ - Free users also create variable cost; the calculation includes it through the "Ücretsiz kullanıcı oranı (%)" input (free user share).
42
+ - If variable cost passes 30% of the price, a price or usage-limit decision is asked as a `maliyet` topic.
@@ -1,21 +1,21 @@
1
- # Metrikler
1
+ # Metrics
2
2
 
3
- > His değil veri. Araştırmalar, AI ile çalışan geliştiricilerin kendilerini daha hızlı sanırken daha yavaş
4
- > çalışabildiğini gösteriyor (METR, 2025). Burada projenin gerçek gidişatı aylık olarak kayıt altında.
5
- > `/maintain monthly` ve `/retro` birer satır ekler; `/dashboard` panosu eğilimi gösterir.
3
+ > Data, not feeling. Studies show that developers working with AI can feel faster while actually working
4
+ > slower (METR, 2025). Here the real course of the project is recorded monthly.
5
+ > `/maintain monthly` and `/retro` each add one row; the `/dashboard` dashboard shows the trend.
6
6
 
7
- ## Tanımlar
7
+ ## Definitions
8
8
 
9
- - **Tamamlanan görev:** Dönemde işaretlenen yol haritası görevi sayısı.
10
- - **Ort. görev süresi (dk):** `docs/workflow/cost-log.md` → "Süre (dk)" ortalaması.
11
- - **Ort. limit maliyeti (%):** Aynı günlükteki 5 saatlik kullanım farkı ortalaması.
12
- - **Düzeltme oranı (%):** Dönemdeki `fix` commit'leri ÷ (`feat` + `fix`). Yüksekse yeni özellikler sık bozuluyor.
13
- - **Geri alma:** Dönemdeki `revert` commit sayısı.
14
- - **Kopya kod (%):** `npx jscpd` raporundaki tekrar oranı.
15
- - **Açık kritik:** Kapanmamış kurul RET bulgusu sayısı.
16
- - **Kabul testi (%):** MVP kabul kriterlerinden testi geçenlerin oranı.
9
+ - **Completed tasks:** The number of roadmap tasks checked off in the period.
10
+ - **Avg. task duration (min):** The average of "Time (min)" in `docs/workflow/cost-log.md`.
11
+ - **Avg. limit cost (%):** The average 5-hour usage difference in the same log.
12
+ - **Fix rate (%):** `fix` commits in the period ÷ (`feat` + `fix`). If high, new features break often.
13
+ - **Rollbacks:** The number of `revert` commits in the period.
14
+ - **Duplicate code (%):** The duplication ratio in the `npx jscpd` report.
15
+ - **Open critical:** The number of board RET findings that are not closed.
16
+ - **Acceptance tests (%):** The share of MVP acceptance criteria whose tests pass.
17
17
 
18
18
  ## Kayıtlar
19
19
 
20
- | Dönem | Tamamlanan görev | Ort. görev süresi (dk) | Ort. limit maliyeti (%) | Düzeltme oranı (%) | Geri alma | Kopya kod (%) | Açık kritik | Kabul testi (%) | Not |
20
+ | Period | Completed tasks | Avg. task duration (min) | Avg. limit cost (%) | Fix rate (%) | Rollbacks | Duplicate code (%) | Open critical | Acceptance tests (%) | Note |
21
21
  |---|---|---|---|---|---|---|---|---|---|
@@ -1,18 +1,18 @@
1
- # Retrolar
1
+ # Retros
2
2
 
3
- > Her faz sonunda ve proje sonunda `/retro` ile doldurulur. Genel dersler kite geri yazılır,
4
- > böylece aynı hata bir sonraki projede tekrar etmez.
3
+ > Filled in with `/retro` at the end of every phase and at the end of the project. General lessons are written back to the kit,
4
+ > so the same mistake does not repeat in the next project.
5
5
 
6
- ## Şablon
6
+ ## Template
7
7
 
8
8
  ```
9
- ## YYYY-AA-GG — [Faz / Proje sonu]
10
- **İyi giden:** [...]
11
- **Zaman kaybettiren:** [...]
12
- **Tekrar eden AI hataları:** [hata türü — kaç kez — nasıl çözüldü]
13
- **Eksik/gereksiz kontrol:** [...]
14
- **Projeye eklenen kurallar:** [dosya: kural]
15
- **Kite önerilen değişiklikler:** [dosya: değişiklik — onaylandı/reddedildi]
9
+ ## YYYY-MM-DD — [Phase / End of project]
10
+ **Went well:** [...]
11
+ **Lost time:** [...]
12
+ **Repeated AI mistakes:** [mistake type — how many times — how it was solved]
13
+ **Missing/unneeded checks:** [...]
14
+ **Rules added to the project:** [file: rule]
15
+ **Changes proposed to the kit:** [file: change — approved/rejected]
16
16
  ```
17
17
 
18
18
  ---
@@ -1,78 +1,78 @@
1
- # Test Planı
1
+ # Test Plan
2
2
 
3
- > Yaklaşım: **Dengeli.** Kritik akışlarda otomatik test zorunlu, geri kalanında manuel kontrol listesi yeterli.
4
- > Test araçları ve komutlar: `docs/architecture/stack.md`.
3
+ > Approach: **Balanced.** Automatic tests are required for critical flows; a manual checklist is enough for the rest.
4
+ > Test tools and commands: `docs/architecture/stack.md`.
5
5
 
6
- ## 1. Kritik akışlar (otomatik test ZORUNLU)
6
+ ## 1. Kritik akışlar (critical flows; automatic test REQUIRED)
7
7
 
8
- Bu akışlardan birine dokunan her değişiklik test ile gelir. Test kırmızıysa merge/deploy yok.
8
+ Every change that touches one of these flows comes with a test. If a test is red, there is no merge/deploy.
9
9
 
10
- | # | Akış | Neden kritik | Test türü | Test dosyası | Durum |
10
+ | # | Flow | Why critical | Test type | Test file | Status |
11
11
  |---|---|---|---|---|---|
12
- | K1 | Kayıt / giriş / çıkış | Herkes kullanır | e2e | | ⬜ |
13
- | K2 | Yetki: kullanıcı başkasının verisini göremez | Veri sızıntısı | entegrasyon | | ⬜ |
14
- | K3 | Ödeme / abonelik (varsa) | Para | e2e + webhook | | ⬜ |
15
- | K4 | Ana veri yazma işlemi (oluştur/güncelle/sil) | Veri kaybı | entegrasyon | | ⬜ |
16
- | K5 | [Projeye özel] | | | | ⬜ |
12
+ | K1 | Sign-up / sign-in / sign-out | Everyone uses it | e2e | | ⬜ |
13
+ | K2 | Authorization: a user cannot see another user's data | Data leak | integration | | ⬜ |
14
+ | K3 | Payment / subscription (if any) | Money | e2e + webhook | | ⬜ |
15
+ | K4 | Main data write operation (create/update/delete) | Data loss | integration | | ⬜ |
16
+ | K5 | [Project-specific] | | | | ⬜ |
17
17
 
18
- ## 1a. Kabul testleri (yaşayan şartname)
18
+ ## 1a. Acceptance tests (living specification)
19
19
 
20
- PRD'deki her kabul kriteri (`Ö-01.1` gibi) **kod yazılmadan önce** çalıştırılabilir bir teste dönüşür ve önce kırmızı olur.
21
- Test adı kriter kimliğini içerir. Örnekler:
20
+ Every acceptance criterion in the PRD (like `Ö-01.1`) becomes a runnable test **before any code is written**, and it is red first.
21
+ The test name contains the criterion id. Examples:
22
22
 
23
23
  ```ts
24
- test('Ö-01.1 geçersiz e-posta ile form gönderilmez', async ({ page }) => { /* ... */ });
24
+ test('Ö-01.1 the form is not submitted with an invalid email', async ({ page }) => { /* ... */ });
25
25
  ```
26
26
  ```python
27
- def test_O_01_1_gecersiz_eposta_form_gonderilmez(client): ... # Python: "Ö-01.1" yerine "O_01_1"
27
+ def test_O_01_1_invalid_email_form_not_submitted(client): ... # Python: use "O_01_1" instead of "Ö-01.1"
28
28
  ```
29
29
 
30
- - Testler JUnit XML raporu üretecek şekilde çalıştırılır. Pano bu raporu okur:
30
+ - Tests are run so that they produce a JUnit XML report. The dashboard reads this report:
31
31
  - Playwright: `--reporter=junit` → `test-results/junit.xml`
32
32
  - Vitest: `--reporter=junit --outputFile=test-results/junit.xml`
33
33
  - pytest: `--junitxml=test-results/junit.xml`
34
- - PRD'deki kutucuğu sadece testi geçen kriter için işaretle. Pano iki kaynağı karşılaştırır: kutucuk işaretli ama test yoksa veya kırmızıysa "Dikkat" alanında uyarır.
35
- - AI "yaptım" dese bile kriterin testi yeşil değilse kriter bitmemiştir.
34
+ - Check the box in the PRD only for a criterion whose test passes. The dashboard compares the two sources: if the box is checked but the test is missing or red, it warns in the "Needs attention" area.
35
+ - Even if the AI says "done", a criterion whose test is not green is not finished.
36
36
 
37
- ## 1b. Saldırgan testleri
37
+ ## 1b. Adversarial tests
38
38
 
39
- AI kodunun yaklaşık yarısında güvenlik açığı bulunuyor (Veracode, 2025). Bu yüzden veri döndüren veya veri yazan her uç nokta / server action için şu testler yazılır:
39
+ About half of AI code has a security hole (Veracode, 2025). So for every endpoint / server action that returns or writes data, these tests are written:
40
40
 
41
- | Test | Ne dener | Beklenen |
41
+ | Test | What it tries | Expected |
42
42
  |---|---|---|
43
- | Başkasının kaydı (IDOR) | Kullanıcı B, A'nın kaydının kimliğiyle okur / günceller / siler | 403 veya 404; veri değişmez |
44
- | Oturumsuz erişim | Giriş yapmadan istek | 401 / yönlendirme |
45
- | Rol aşımı | Normal kullanıcı admin ucunu çağırır | 403 |
46
- | XSS | Metin alanına `<script>alert(1)</script>` ve `"><img src=x onerror=alert(1)>` | Metin olarak görünür, çalışmaz |
47
- | Girdi sınırları | Çok uzun metin, negatif sayı, boş dizi, beklenmeyen alan | Doğrulama hatası; 500 değil |
48
- | Log enjeksiyonu | Girdide satır sonu (`
49
- `) ve sahte log satırı | Loglarda kaçışlı/tek satır |
43
+ | Someone else's record (IDOR) | User B reads / updates / deletes with the id of A's record | 403 or 404; data does not change |
44
+ | Access without a session | Request without signing in | 401 / redirect |
45
+ | Role escalation | A normal user calls an admin endpoint | 403 |
46
+ | XSS | `<script>alert(1)</script>` and `"><img src=x onerror=alert(1)>` in a text field | Shown as text, does not run |
47
+ | Input limits | Very long text, negative number, empty array, unexpected field | Validation error; not 500 |
48
+ | Log injection | A line break (`
49
+ `) and a fake log line in the input | Escaped / single line in the logs |
50
50
 
51
- Test adları `SALDIRI:` önekiyle başlar. `security-auditor` ajanı eksik saldırgan testlerini KRİTİK sayar.
51
+ Test names start with the prefix `SALDIRI:`. The `security-auditor` agent counts missing adversarial tests as KRİTİK.
52
52
 
53
- **Supabase kullanılıyorsa** veritabanı katmanının saldırgan testi hazır gelir: `tests/security/rls.mjs`. Anonim ve ikinci kullanıcı, birinci kullanıcının satırını okumayı, güncellemeyi, silmeyi ve onun adına yazmayı dener; RLS'i kapalı veya teste kayıtsız public tablo varsa kırmızı olur. Sadece yerel Supabase'e karşı çalışır (CI `rls` işi, sır gerekmez). Her yeni tablo `TABLES` listesine eklenir. Uygulama katmanındaki (server action, route handler) testler yine yukarıdaki tabloya göre ayrıca yazılır.
53
+ **If Supabase is used,** the adversarial test of the database layer comes ready: `tests/security/rls.mjs`. An anonymous user and a second user try to read, update, delete and write on behalf of the first user's rows; it is red if there is a public table with RLS off or not registered in the test. It runs only against local Supabase (CI `rls` job, no secret needed). Every new table is added to the `TABLES` list. Tests at the application layer (server action, route handler) are still written separately according to the table above.
54
54
 
55
- ## 2. Kurallar
55
+ ## 2. Rules
56
56
 
57
- - **Her hata düzeltmesi bir regresyon testiyle gelir.** Önce hatayı gösteren test kırmızı olur, sonra düzeltme ile yeşile döner.
58
- - Testi geçirmek için testi değiştirmek yasak; test yanlışsa önce bunu açıkla.
59
- - Saf iş mantığı (hesaplama, fiyat, tarih, izin kontrolü) birim testiyle kaplanır.
60
- - Dış servisler (ödeme, e-posta, AI API) testte taklit (mock) edilir; gerçek anahtar kullanılmaz.
57
+ - **Every bug fix comes with a regression test.** First the test that shows the bug goes red, then it turns green with the fix.
58
+ - Changing a test to make it pass is forbidden; if the test is wrong, explain that first.
59
+ - Pure business logic (calculation, price, date, permission check) is covered by unit tests.
60
+ - External services (payment, email, AI API) are mocked in tests; no real key is used.
61
61
 
62
- ## 3. Manuel kontrol listesi (her sürüm öncesi, ~10 dk)
62
+ ## 3. Manual checklist (before every release, ~10 min)
63
63
 
64
- - [ ] Yeni kullanıcı olarak baştan sona ana akış
65
- - [ ] Yanlış girişler: boş form, çok uzun metin, özel karakter, emoji
66
- - [ ] Yavaş/kesik ağ (tarayıcı/cihaz ağ kısıtlama)
67
- - [ ] Mobil genişlik / küçük ekran
68
- - [ ] Çıkış yapıp geri tuşu ile korumalı sayfaya erişim denemesi
69
- - [ ] Boş durum (hiç verisi olmayan kullanıcı)
70
- - [ ] [Projeye özel]
64
+ - [ ] The main flow from start to finish as a new user
65
+ - [ ] Wrong inputs: empty form, very long text, special characters, emoji
66
+ - [ ] Slow/interrupted network (browser/device network throttling)
67
+ - [ ] Mobile width / small screen
68
+ - [ ] Sign out, then try to reach a protected page with the back button
69
+ - [ ] Empty state (a user with no data at all)
70
+ - [ ] [Project-specific]
71
71
 
72
- ## 4. Komutlar
72
+ ## 4. Commands
73
73
 
74
74
  ```bash
75
- [test komutu] # tümü
76
- [test komutu] [dosya] # tek dosya
77
- [e2e komutu] # uçtan uca
75
+ [test komutu] # all
76
+ [test komutu] [dosya] # single file
77
+ [e2e komutu] # end to end
78
78
  ```
@@ -1,80 +1,80 @@
1
- # Güvenlik
1
+ # Security
2
2
 
3
- > Geliştirme boyunca referans, canlıya almadan önce tam kontrol listesi.
4
- > AI'nın en sık yaptığı güvenlik hataları: sırrı istemciye koymak, yetkiyi sadece arayüzde kontrol etmek,
5
- > girdiyi doğrulamamak, DB kurallarını kapalı bırakmak. Bu dosya bunları yakalamak için var.
6
- > Tipe özel ek maddeler: `docs/architecture/stack.md` → "Güvenlik".
3
+ > A reference during development, and the full checklist before go-live.
4
+ > The security mistakes AI makes most often: putting a secret in the client, checking authorization only in the interface,
5
+ > not validating input, leaving DB rules off. This file exists to catch these.
6
+ > Extra items specific to the project type: `docs/architecture/stack.md` → "Security (extra)".
7
7
 
8
- ## 1. Sır (secret) yönetimi
8
+ ## 1. Secret management
9
9
 
10
- - [ ] Tüm sırlar ortam değişkeninde; kodda, testte, dokümanda gerçek değer yok.
11
- - [ ] `.env*` dosyaları `.gitignore`'da; sadece `.env.example` (değersiz) commit edilir.
12
- - [ ] Git geçmişinde sır taraması yapıldı: `gitleaks detect` veya `git log -p | grep -iE "key|secret|token|password"`.
13
- - [ ] İstemciye giden kodda (tarayıcı JS, mobil paket) gizli anahtar yok. İstemciye giden her şey herkese açıktır.
14
- - [ ] Prod, staging ve lokal için **ayrı** anahtarlar kullanılıyor.
15
- - [ ] Bir sır sızdıysa: önce anahtarı iptal et/yenile, sonra geçmişi temizle. Sırası önemli.
10
+ - [ ] All secrets are in environment variables; no real value in code, tests or docs.
11
+ - [ ] `.env*` files are in `.gitignore`; only `.env.example` (with no values) is committed.
12
+ - [ ] A secret scan of the git history was done: `gitleaks detect` or `git log -p | grep -iE "key|secret|token|password"`.
13
+ - [ ] No secret key in client-bound code (browser JS, mobile package). Everything that goes to the client is public.
14
+ - [ ] **Separate** keys are used for prod, staging and local.
15
+ - [ ] If a secret leaked: first revoke/rotate the key, then clean the history. The order matters.
16
16
 
17
- ## 2. Kimlik doğrulama ve yetki
17
+ ## 2. Authentication and authorization
18
18
 
19
- - [ ] Yetki kontrolü **sunucuda** (veya DB kuralında) yapılıyor; arayüzde butonu gizlemek yetki değildir.
20
- - [ ] Her veri sorgusu "bu kayıt bu kullanıcıya mı ait?" kontrolünü içeriyor (IDOR koruması).
21
- - [ ] DB satır seviyesi güvenlik (RLS vb.) kullanılıyorsa **her tabloda açık** ve politikaları saldırgan testiyle doğrulandı (Supabase: `tests/security/rls.mjs`, CI `rls` işi; anonim ve ikinci kullanıcı okuyamıyor, yazamıyor, silemiyor).
22
- - [ ] Dev/prod ayrımı: yerel ortam ve AI (MCP dahil) sadece dev projesine bağlı; prod sırları sadece barındırma panelinde (`docs/operations/accounts.md` → Ortamlar).
23
- - [ ] Admin işlemleri ayrı rol ile korunuyor.
24
- - [ ] Şifre sıfırlama, e-posta doğrulama, oturum süresi hazır bir auth sağlayıcısından geliyor (kendin yazma).
25
- - [ ] Giriş ve şifre sıfırlama uçlarında hız sınırı (rate limit) var.
19
+ - [ ] The authorization check happens **on the server** (or in a DB rule); hiding a button in the interface is not authorization.
20
+ - [ ] Every data query includes the check "does this record belong to this user?" (IDOR protection).
21
+ - [ ] If DB row-level security (RLS etc.) is used, it is **on for every table** and its policies are verified with an adversarial test (Supabase: `tests/security/rls.mjs`, CI `rls` job; anonymous and a second user cannot read, write or delete).
22
+ - [ ] Dev/prod separation: the local environment and the AI (MCP included) are connected only to the dev project; prod secrets live only in the hosting dashboard (`docs/operations/accounts.md` → "Ortamlar" (environments)).
23
+ - [ ] Admin operations are protected by a separate role.
24
+ - [ ] Password reset, email verification and session lifetime come from a ready-made auth provider (do not write your own).
25
+ - [ ] Sign-in and password-reset endpoints have a rate limit.
26
26
 
27
- ## 3. Girdi ve çıktı
27
+ ## 3. Input and output
28
28
 
29
- - [ ] Sunucuya gelen her girdi şema ile doğrulanıyor (Zod / Pydantic vb.).
30
- - [ ] SQL sorguları parametreli / ORM ile; string birleştirme yok.
31
- - [ ] Kullanıcı içeriği HTML olarak basılmıyor (XSS); zorunluysa temizleniyor (sanitize).
32
- - [ ] Dosya yükleme: tür ve boyut sınırı, rastgele dosya adı, herkese açık olmayan depolama.
33
- - [ ] Hata mesajları iç detay (stack trace, SQL, dosya yolu) sızdırmıyor.
29
+ - [ ] Every input to the server is validated with a schema (Zod / Pydantic etc.).
30
+ - [ ] SQL queries are parameterized / through an ORM; no string concatenation.
31
+ - [ ] User content is not rendered as HTML (XSS); if it must be, it is sanitized.
32
+ - [ ] File upload: type and size limit, random file name, non-public storage.
33
+ - [ ] Error messages do not leak internal detail (stack trace, SQL, file path).
34
34
 
35
- ## 4. Ağ ve altyapı
35
+ ## 4. Network and infrastructure
36
36
 
37
- - [ ] Sadece HTTPS.
38
- - [ ] CORS sadece bilinen alan adlarına açık (`*` değil).
39
- - [ ] Webhook'larda imza doğrulaması var (ödeme sağlayıcı vb.).
40
- - [ ] Pahalı veya herkese açık uçlarda hız sınırı var.
41
- - [ ] Veritabanı internete doğrudan açık değil veya güçlü erişim kuralı var.
37
+ - [ ] HTTPS only.
38
+ - [ ] CORS is open only to known domains (not `*`).
39
+ - [ ] Webhooks verify the signature (payment provider etc.).
40
+ - [ ] Expensive or public endpoints have a rate limit.
41
+ - [ ] The database is not directly open to the internet, or it has a strong access rule.
42
42
 
43
- ## 5. Bağımlılıklar
43
+ ## 5. Dependencies
44
44
 
45
- - [ ] Bağımlılık açık taraması temiz: `npm audit` / `uv run --with pip-audit pip-audit`.
46
- - [ ] AI'nın önerdiği her yeni paket gerçekten var ve yaygın kullanılıyor (sahte/benzer isimli paket riski).
47
- - [ ] Kilit dosyası (`package-lock.json`, `uv.lock` vb.) commit edildi.
45
+ - [ ] The dependency vulnerability scan is clean: `npm audit` / `uv run --with pip-audit pip-audit`.
46
+ - [ ] Every new package the AI suggests really exists and is widely used (risk of fake or look-alike package names).
47
+ - [ ] The lock file (`package-lock.json`, `uv.lock` etc.) is committed.
48
48
 
49
- ## 6. Loglama
49
+ ## 6. Logging
50
50
 
51
- - [ ] Loglarda şifre, token, tam kart numarası, TC kimlik no gibi veri yok.
52
- - [ ] Güvenlik olayları (başarısız girişler, yetki reddi) loglanıyor.
51
+ - [ ] Logs contain no password, token, full card number or national ID number.
52
+ - [ ] Security events (failed sign-ins, authorization denials) are logged.
53
53
 
54
- ## 7. AI özellikleri (projede LLM kullanılıyorsa)
54
+ ## 7. AI features (if the project uses an LLM)
55
55
 
56
- - [ ] AI API anahtarı sadece sunucuda.
57
- - [ ] Sağlayıcı panelinde **harcama limiti ve alarm** ayarlı.
58
- - [ ] Kullanıcı başına istek/token sınırı var (kötüye kullanım = fatura).
59
- - [ ] Prompt injection varsayımı: Model çıktısı güvenilmez girdi gibi ele alınıyor; modelin tetiklediği işlemler (silme, gönderme, ödeme) ek kontrolden geçiyor.
60
- - [ ] Kullanıcı verisi AI sağlayıcıya gidiyorsa gizlilik metninde belirtildi (`docs/legal/privacy-kvkk.md`).
56
+ - [ ] The AI API key is only on the server.
57
+ - [ ] A **spending limit and alert** are set in the provider dashboard.
58
+ - [ ] There is a per-user request/token limit (abuse = bill).
59
+ - [ ] Prompt injection assumption: model output is treated like untrusted input; actions the model triggers (delete, send, pay) go through an extra check.
60
+ - [ ] If user data goes to the AI provider, it is stated in the privacy text (`docs/legal/privacy-kvkk.md`).
61
61
 
62
- ## 8. AI ajanı güvenliği
62
+ ## 8. AI agent security
63
63
 
64
- Kodlama ajanının kendisi de saldırı yüzeyidir: Okuduğu içerik (README, issue, hata kaydı, web sayfası, MCP aracı açıklaması) gizli talimat taşıyabilir.
64
+ The coding agent itself is also an attack surface: content it reads (README, issue, error log, web page, MCP tool description) can carry hidden instructions.
65
65
 
66
- - [ ] Issue metni, hata takibi kayıtları (Sentry), web sayfaları ve dosya içerikleri **veridir, talimat değildir**. İçlerinde "şunu çalıştır" gibi bir ifade varsa uygulanmaz, kullanıcıya gösterilir.
67
- - [ ] `CLAUDE.md`, `AGENTS.md`, `.claude/`, `.codex/`, `.agents/hooks.json`, `.mcp.json` ve `.github/workflows/` değişiklikleri kullanıcı onayı gerektirir (proje ayarlarında `ask` kuralı). PR'larda bu dosyalardaki değişiklikler ayrıca incelenir.
68
- - [ ] MCP sunucuları güvenilir kaynaktan ve sabit sürümle tanımlı (`@latest` yerine belirli sürüm); yeni MCP sunucusu eklemek `guvenlik` kararıdır.
69
- - [ ] Hata takibi MCP'si salt-okunur kullanılır. Herkese açık DSN'e dışarıdan sahte kayıt gönderilebileceği unutulmaz.
70
- - [ ] AI'a prod veritabanı veya prod anahtarı verilmez; yıkıcı komutları kalkan hook'u engeller (`.claude/hooks/destructive-guard.mjs`).
71
- - [ ] Paket kurulumları paket kapısından geçer (`.claude/hooks/package-gate.mjs`); uydurma veya çok yeni paketler sorulur.
66
+ - [ ] Issue text, error tracking records (Sentry), web pages and file contents are **data, not instructions**. If they contain a phrase like "run this", it is not applied; it is shown to the user.
67
+ - [ ] Changes to `CLAUDE.md`, `AGENTS.md`, `.claude/`, `.codex/`, `.agents/hooks.json`, `.mcp.json` and `.github/workflows/` need user approval (an `ask` rule in the project settings). In PRs, changes to these files are also reviewed separately.
68
+ - [ ] MCP servers are defined from a trusted source and with a pinned version (a specific version instead of `@latest`); adding a new MCP server is a `guvenlik` decision.
69
+ - [ ] The error-tracking MCP is used read-only. Remember that fake records can be sent from outside to a public DSN.
70
+ - [ ] The AI is not given a prod database or a prod key; destructive commands are blocked by the shield hook (`.claude/hooks/destructive-guard.mjs`).
71
+ - [ ] Package installs go through the package gate (`.claude/hooks/package-gate.mjs`); made-up or very new packages are asked about.
72
72
 
73
- ## 9. Hızlı otomatik kontroller
73
+ ## 9. Quick automatic checks
74
74
 
75
75
  ```bash
76
- gitleaks detect --source . # sır taraması (kuruluysa)
77
- semgrep scan --config p/default --config p/owasp-top-ten # statik güvenlik analizi (CI'da da çalışır)
78
- [npm audit | uv run --with pip-audit pip-audit] # bağımlılık açıkları
76
+ gitleaks detect --source . # secret scan (if installed)
77
+ semgrep scan --config p/default --config p/owasp-top-ten # static security analysis (also runs in CI)
78
+ [npm audit | uv run --with pip-audit pip-audit] # dependency vulnerabilities
79
79
  grep -rniE "(api[_-]?key|secret|password|token)\s*[:=]\s*['\"][^'\"]{8,}" --exclude-dir=node_modules --exclude-dir=.git .
80
80
  ```
@@ -1,19 +1,19 @@
1
- # Uzman Kurulu
1
+ # Expert Board
2
2
 
3
- > Projeyi sürekli denetleyen uzman ajanlar. Kurallar: `.claude/board/rules.md`.
4
- > Yetki: **danışman + kritikte durdurur.** Karar kullanıcıda. RET (kritik bulgu) varsa iş bitmez, kullanıcıya sorulur.
5
- > Ağır toplantılar ve tek yönlü kararlar üç aşamalı **konseyle** yapılır (ilk görüş → anonim çapraz oy → başkan). Tutanaklar: `docs/workflow/council/`.
6
- > `/dashboard` panosu ve oturum başı notu aşağıdaki kalın etiketli satırları okur; biçimlerini bozma.
3
+ > Expert agents that audit the project continuously. Rules: `.claude/board/rules.md`.
4
+ > Authority: **advisor + stops on critical.** The decision is the user's. If there is a RET (critical finding), the work is not done and the user is asked.
5
+ > Heavy meetings and one-way decisions are held by a three-stage **council** (first opinion → anonymous cross vote → chair). Minutes: `docs/workflow/council/`.
6
+ > The `/dashboard` and the session-start note read the **bold-labeled** lines below; do not break their format.
7
7
 
8
8
  **Durum:** kurulmadı
9
9
  **Commit denetimi:** açık
10
10
 
11
11
  ## Üyeler
12
12
 
13
- | Üye | Ajan | Model | Odak | Toplantılar |
13
+ | Member | Agent | Model | Focus | Meetings |
14
14
  |---|---|---|---|---|
15
15
 
16
16
  ## Toplantı günlüğü
17
17
 
18
- | # | Tarih | Tür | Kapsam | Katılan | Sonuç | Kritik | Kullanıcı kararı |
18
+ | # | Date | Type | Scope | Attendees | Result | Critical | User decision |
19
19
  |---|---|---|---|---|---|---|---|