tillerhand 3.48.1 → 3.49.1

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 (108) hide show
  1. package/.claude/agents/board-chair.md +1 -1
  2. package/.claude/agents/security-auditor.md +1 -1
  3. package/.claude/agents/test-writer.md +1 -1
  4. package/.claude/board/board-product.md +1 -1
  5. package/.claude/board/council.md +1 -1
  6. package/.claude/board/rules.md +6 -6
  7. package/.claude/commands/adopt.md +3 -3
  8. package/.claude/commands/ask-mode.md +4 -4
  9. package/.claude/commands/board.md +1 -1
  10. package/.claude/commands/build.md +1 -1
  11. package/.claude/commands/design.md +4 -4
  12. package/.claude/commands/findings-business.md +1 -1
  13. package/.claude/commands/findings-legal.md +1 -1
  14. package/.claude/commands/findings-perf.md +1 -1
  15. package/.claude/commands/findings-security.md +2 -2
  16. package/.claude/commands/findings-tech.md +1 -1
  17. package/.claude/commands/findings-ux.md +1 -1
  18. package/.claude/commands/fix-bug.md +2 -2
  19. package/.claude/commands/handoff.md +2 -2
  20. package/.claude/commands/kit-update.md +2 -2
  21. package/.claude/commands/qa.md +1 -1
  22. package/.claude/commands/release.md +2 -2
  23. package/.claude/commands/research.md +3 -3
  24. package/.claude/commands/retro.md +1 -1
  25. package/.claude/commands/rollback.md +3 -3
  26. package/.claude/commands/start.md +4 -4
  27. package/.claude/commands/tools.md +1 -1
  28. package/.claude/commands/user-feedback.md +1 -1
  29. package/.claude/findings/lenses/business.md +1 -1
  30. package/.claude/findings/protocol.md +2 -2
  31. package/.claude/hooks/budget.mjs +1 -1
  32. package/.claude/hooks/checkpoint.mjs +2 -2
  33. package/.claude/hooks/commit-gate.mjs +18 -17
  34. package/.claude/hooks/council.mjs +37 -52
  35. package/.claude/hooks/dashboard-data.mjs +34 -42
  36. package/.claude/hooks/dashboard.mjs +18 -20
  37. package/.claude/hooks/destructive-guard.mjs +2 -2
  38. package/.claude/hooks/flow.mjs +1 -1
  39. package/.claude/hooks/freeze-guard.mjs +2 -2
  40. package/.claude/hooks/gate.mjs +21 -13
  41. package/.claude/hooks/labels.mjs +92 -152
  42. package/.claude/hooks/lang.mjs +25 -9
  43. package/.claude/hooks/messages.mjs +497 -494
  44. package/.claude/hooks/notify.mjs +1 -1
  45. package/.claude/hooks/prefs.mjs +10 -18
  46. package/.claude/hooks/preview.mjs +1 -1
  47. package/.claude/hooks/progress.mjs +7 -9
  48. package/.claude/hooks/qa-report.mjs +1 -3
  49. package/.claude/hooks/session-start.mjs +2 -3
  50. package/.claude/hooks/status-read.mjs +5 -5
  51. package/.claude/hooks/statusline.mjs +4 -4
  52. package/.claude/hooks/tools.mjs +3 -7
  53. package/.claude/hooks/usage.mjs +2 -2
  54. package/.claude/i18n/tr.json +496 -0
  55. package/.claude/security-patterns.json +1 -1
  56. package/.claude/skills/logo-design/SKILL.md +2 -2
  57. package/.claude/skills/motion-video/SKILL.md +1 -1
  58. package/.claude/skills/source-research/SKILL.md +1 -1
  59. package/.claude/skills/ui-motion/SKILL.md +1 -1
  60. package/AGENTS.md +1 -1
  61. package/CHANGELOG.md +1 -1
  62. package/README.md +2 -2
  63. package/README.tr.md +2 -2
  64. package/docs/architecture/overview.md +1 -1
  65. package/docs/decisions/log.md +1 -1
  66. package/docs/legal/privacy-kvkk.md +35 -35
  67. package/docs/operations/deploy-setup.md +1 -1
  68. package/docs/operations/feature-flags.md +1 -1
  69. package/docs/product/glossary.md +3 -3
  70. package/docs/product/launch.md +1 -1
  71. package/docs/product/prd.md +2 -2
  72. package/docs/product/roadmap.md +1 -1
  73. package/docs/product/specs/_template.md +1 -1
  74. package/docs/product/unit-economics.md +1 -1
  75. package/docs/quality/test-plan.md +5 -5
  76. package/docs/workflow/decision-protocol.md +1 -2
  77. package/docs/workflow/mcp-catalog.md +1 -1
  78. package/docs/workflow/skills.md +2 -2
  79. package/docs/workflow/usage-limits.md +1 -1
  80. package/kit/CHANGELOG.md +34 -0
  81. package/kit/VERSION +1 -1
  82. package/kit/guide.html +56 -56
  83. package/kit/guide.tr.html +10 -10
  84. package/kit/kit.mjs +7 -42
  85. package/kit/templates/addons/ai/.env.example.append +3 -3
  86. package/kit/templates/addons/tr/docs/legal/turkiye.md +55 -55
  87. package/kit/templates/addons/tr/types/backend/.env.example.append +2 -2
  88. package/kit/templates/addons/tr/types/backend/app/shared/payments.py +1 -1
  89. package/kit/templates/addons/tr/types/backend/tests/security/test_payment_webhook.py +3 -3
  90. package/kit/templates/addons/tr/types/web-saas/.env.example.append +2 -2
  91. package/kit/templates/addons/tr/types/web-saas/.github/workflows/payment-webhook.yml +3 -3
  92. package/kit/templates/addons/tr/types/web-saas/src/lib/payments/webhook-signature.ts +1 -1
  93. package/kit/templates/addons/tr/types/web-saas/tests/security/payment-webhook.mjs +4 -4
  94. package/kit/templates/backend/.github/dependabot.yml +1 -1
  95. package/kit/templates/backend/.github/workflows/live-monitoring.yml +1 -1
  96. package/kit/templates/backend/docs/architecture/stack.md +3 -3
  97. package/kit/templates/mobile/.github/dependabot.yml +1 -1
  98. package/kit/templates/mobile/.github/workflows/ci.yml +2 -2
  99. package/kit/templates/mobile/docs/architecture/stack.md +4 -4
  100. package/kit/templates/mobile/docs/architecture/structure.md +1 -1
  101. package/kit/templates/mobile/docs/design/design-guide.md +1 -1
  102. package/kit/templates/web-saas/.github/dependabot.yml +1 -1
  103. package/kit/templates/web-saas/.github/workflows/ci.yml +2 -2
  104. package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +1 -1
  105. package/kit/templates/web-saas/docs/architecture/stack.md +4 -4
  106. package/kit/templates/web-saas/docs/design/design-guide.md +1 -1
  107. package/kit/tools/antigravity/.agents/hooks.json +5 -5
  108. package/package.json +1 -1
@@ -10,7 +10,7 @@
10
10
  │
11
11
  ├──> [Auth provider]
12
12
  ├──> [Payment]
13
- └──> [E-posta / AI API / Depolama]
13
+ └──> [Email / AI API / Storage]
14
14
  ```
15
15
 
16
16
  ## 2. Technology choice
@@ -1,7 +1,7 @@
1
1
  # Decisions
2
2
 
3
3
  > There are two sections:
4
- > 1. **Decision log:** one line for every decision asked. Door: `one-way` (costly to reverse) / `two-way` (easy to reverse). Decided by: `user` or `automatic` (when question mode is off). Logs from before 3.48 say `tek` / `çift` and `kullanıcı` / `otomatik`; both are read.
4
+ > 1. **Decision log:** one line for every decision asked. Door: `one-way` (costly to reverse) / `two-way` (easy to reverse). Decided by: `user` or `automatic` (when question mode is off).
5
5
  > 2. **ADRs** (Architecture Decision Record): decisions that affect the architecture or the long term, and all one-way decisions, go in a separate file: `docs/decisions/adr-NNNN-kisa-ad.md` (template: `adr-template.md`).
6
6
  >
7
7
  > Look here before asking a decision: if it was made before, do not ask again, follow it.
@@ -1,54 +1,54 @@
1
- # Yasal / KVKK / Gizlilik
1
+ # Legal / KVKK / Privacy
2
2
 
3
- > Bu bir kontrol listesidir, hukuki danışmanlık değildir. Kişisel veri işleyen veya ödeme alan
4
- > bir ürünü yayına almadan önce metinleri bir hukukçuya kontrol ettir.
5
- > Türkiye'de kullanıcıya hizmet veriyorsan KVKK (6698), yurt dışından kullanıcı varsa GDPR de gündeme gelir.
3
+ > This is a checklist, not legal advice. Before you launch a product that processes personal data or takes payments,
4
+ > have a lawyer check the texts.
5
+ > If you serve users in Turkey, KVKK (6698) applies; if you have users from abroad, GDPR may apply too.
6
6
 
7
- ## 1. Veri envanteri (önce bunu çıkar)
7
+ ## 1. Data inventory (do this first)
8
8
 
9
- | Veri | Neden toplanıyor (amaç) | Hukuki dayanak | Nerede saklanıyor (ülke) | Ne kadar süre | Kimlerle paylaşılıyor |
9
+ | Data | Why it is collected (purpose) | Legal basis | Where it is stored (country) | How long | Who it is shared with |
10
10
  |---|---|---|---|---|---|
11
- | E-posta | Hesap, bildirim | Sözleşmenin ifası | [Servis, bölge] | Hesap silinene kadar | [E-posta servisi] |
12
- | IP, cihaz bilgisi | Güvenlik, hata takibi | Meşru menfaat | | | [Sentry vb.] |
11
+ | Email | Account, notification | Performance of a contract | [Service, region] | Until the account is deleted | [Email service] |
12
+ | IP, device information | Security, error tracking | Legitimate interest | | | [Sentry etc.] |
13
13
  | [...] | | | | | |
14
14
 
15
- Kural: **Amaç yoksa toplama.** Kullanmadığın veriyi isteme.
15
+ Rule: **No purpose, no collection.** Do not ask for data you do not use.
16
16
 
17
- ## 2. Yayında olması gereken metinler
17
+ ## 2. Texts that must be live
18
18
 
19
- - [ ] **Aydınlatma metni (KVKK md. 10):** Veri sorumlusu, amaçlar, aktarılan taraflar, toplama yöntemi, haklar.
20
- - [ ] **Gizlilik politikası:** Aydınlatma metniyle birleşik olabilir. Kayıt formunda ve footer'da link.
21
- - [ ] **Çerez politikası + çerez onay bandı:** Zorunlu olmayan (analitik, pazarlama) çerezler **onaydan önce yüklenmez**. Reddet butonu, kabul et kadar görünür olmalı.
22
- - [ ] **Kullanım şartları / üyelik sözleşmesi.**
23
- - [ ] **Açık rıza metni:** Sadece açık rıza gereken işlemler için (pazarlama, yurt dışına aktarımın bazı halleri, özel nitelikli veri). Aydınlatma metniyle aynı onay kutusunda birleştirme.
24
- - [ ] Ücretli ürün ise: **Mesafeli satış sözleşmesi** ve **ön bilgilendirme formu** (6502 sayılı Kanun), iade/cayma koşulları.
19
+ - [ ] **Privacy notice (KVKK art. 10):** Data controller, purposes, parties it is transferred to, collection method, rights.
20
+ - [ ] **Privacy policy:** Can be combined with the privacy notice. Link in the sign-up form and in the footer.
21
+ - [ ] **Cookie policy + cookie consent banner:** Non-essential (analytics, marketing) cookies are **not loaded before consent**. The reject button must be as visible as the accept button.
22
+ - [ ] **Terms of use / membership agreement.**
23
+ - [ ] **Explicit consent text:** Only for processing that needs explicit consent (marketing, some cases of transfer abroad, special categories of data). Do not merge it into the same checkbox as the privacy notice.
24
+ - [ ] For a paid product: **Distance sales contract** and **pre-information form** (Law no. 6502), return/withdrawal terms.
25
25
 
26
- ## 3. Kullanıcı hakları süreçleri
26
+ ## 3. User rights processes
27
27
 
28
- - [ ] Kullanıcı verisini görebiliyor / indirebiliyor (veya talep edebiliyor).
29
- - [ ] **Hesap silme** uygulama içinden yapılabiliyor ve gerçekten siliyor/anonimleştiriyor (yedeklerdeki durum metinde belirtildi).
30
- - [ ] Başvuru kanalı (e-posta adresi) metinde yazılı; başvurular **en geç 30 gün** içinde yanıtlanıyor.
28
+ - [ ] The user can see / download their data (or request it).
29
+ - [ ] **Account deletion** can be done inside the app and really deletes/anonymizes (the status in backups is stated in the text).
30
+ - [ ] The application channel (email address) is written in the text; applications are answered **within 30 days at most**.
31
31
 
32
- ## 4. Yurt dışına veri aktarımı
32
+ ## 4. Transfer of data abroad
33
33
 
34
- Vercel, Supabase, AWS, OpenAI, Sentry gibi yurt dışı sunuculu servisler = yurt dışına aktarım.
34
+ Services with servers abroad, such as Vercel, Supabase, AWS, OpenAI, Sentry = transfer abroad.
35
35
 
36
- - [ ] Hangi servislerin hangi bölgede veri tuttuğu veri envanterinde yazılı.
37
- - [ ] Mümkünse AB bölgesi seçildi.
38
- - [ ] KVKK md. 9 kapsamında aktarım dayanağı belirlendi (2024 değişikliği sonrası: standart sözleşme imzalanıyorsa Kurul'a süresi içinde bildirim gerekir). **Hukukçuya danış.**
36
+ - [ ] Which services keep data in which region is written in the data inventory.
37
+ - [ ] The EU region was chosen where possible.
38
+ - [ ] The transfer basis under KVKK art. 9 was determined (after the 2024 amendment: if a standard contract is signed, notification to the Personal Data Protection Authority (KVKK Authority) is required within the deadline). **Ask a lawyer.**
39
39
 
40
- ## 5. Diğer yükümlülükler
40
+ ## 5. Other obligations
41
41
 
42
- - [ ] **VERBİS** kayıt yükümlülüğü kontrol edildi (çalışan sayısı / bilanço eşiklerine göre muafiyet olabilir).
43
- - [ ] Ticari e-posta/SMS gönderiliyorsa: önceden onay, **İYS** (İleti Yönetim Sistemi) kaydı, her iletide ret linki.
44
- - [ ] Veri ihlali olursa: Kurul'a **72 saat** içinde bildirim prosedürü `docs/operations/maintenance.md` → olay müdahalede yazılı.
45
- - [ ] Çocuklara yönelik değilse yaş sınırı kullanım şartlarında belirtildi.
46
- - [ ] Kullanılan font, ikon, görsel ve kütüphanelerin lisansları ticari kullanıma uygun.
42
+ - [ ] The **VERBİS** registration obligation was checked (an exemption may apply based on the number of employees / balance sheet thresholds).
43
+ - [ ] If commercial email/SMS is sent: prior consent, **İYS** (Message Management System) registration, an opt-out link in every message.
44
+ - [ ] In case of a data breach: the procedure for notifying the Personal Data Protection Board (KVKK Board) within **72 hours** is written in `docs/operations/maintenance.md` → incident response.
45
+ - [ ] If the product is not aimed at children, the age limit is stated in the terms of use.
46
+ - [ ] The licenses of the fonts, icons, images and libraries used allow commercial use.
47
47
 
48
- ## 6. Mobil mağaza ek gereksinimleri
48
+ ## 6. Extra requirements for mobile stores
49
49
 
50
- `docs/architecture/stack.md` (mobil) → "Go live (extra)" bölümüne bak: App Store gizlilik etiketleri, Google Play Veri Güvenliği formu, uygulama içi hesap silme.
50
+ See `docs/architecture/stack.md` (mobile) → the "Go live (extra)" section: App Store privacy labels, Google Play Data Safety form, in-app account deletion.
51
51
 
52
- ## 7. Gözden geçirme
52
+ ## 7. Review
53
53
 
54
- Her **3 ayda bir** ve yeni bir veri türü / yeni bir servis eklendiğinde bu dosyayı ve yayındaki metinleri güncelle.
54
+ Update this file and the live texts every **3 months** and whenever a new data type / a new service is added.
@@ -30,7 +30,7 @@ Checked: 2026-10-25. Sources: [Environment variables](https://vercel.com/docs/en
30
30
 
31
31
  **Environment variables.** Settings → Environment Variables. For each variable pick the environment: Production, Preview, Development. Keys and tokens are entered as **Secret** (unreadable after saving); open values such as URLs as **Config**. A change does not apply to old deploys; a new deploy is needed. Limit: 64 KB total per deploy (5 KB per variable at the edge).
32
32
 
33
- **Domain.** Settings → Domains → Add Domain (CLI: `vercel domains add example.com <proje>`). When you add the apex, `www` is recommended: add both and redirect one to the other.
33
+ **Domain.** Settings → Domains → Add Domain (CLI: `vercel domains add example.com <project>`). When you add the apex, `www` is recommended: add both and redirect one to the other.
34
34
  - Apex (`example.com`): **A** record. Take the value from the project's domain card. In most projects it is `76.76.21.21`; new projects may differ (e.g. `216.198.79.1`); verification looks for the value on the card.
35
35
  - Subdomain (`www`, `app`): **CNAME**, the target is project-specific (on the card, e.g. `…vercel-dns-017.com`).
36
36
  - If the domain is in another Vercel account, a **TXT** verification named `_vercel` is requested.
@@ -21,7 +21,7 @@ The `/dashboard` dashboard reads this table. Date format `YYYY-MM-DD`, status `o
21
21
 
22
22
  ## Rules
23
23
 
24
- - The flag name uses the `ozellik_adi` form and matches `docs/product/glossary.md`.
24
+ - The flag name uses the `feature_name` form and matches `docs/product/glossary.md`.
25
25
  - The code path is also tested while the flag is off (at least one test for each of the two states).
26
26
  - After the feature is open to everyone and has run without problems for 2 weeks, the flag and the old code path are removed.
27
27
  - Kill switch: the step to turn it off from the panel or an environment variable is written in this file and has been tried at least once.
@@ -17,11 +17,11 @@ The states a record can have and the transitions between them. This stops the AI
17
17
  ```
18
18
  [invoice.status]: draft → sent → paid
19
19
  ↘ overdue → paid
20
- taslak → iptal (cancelled)
20
+ draft → cancelled
21
21
  ```
22
22
 
23
23
  ## Writing rules
24
24
 
25
25
  - Code: English (`camelCase` variable, `PascalCase` component/type, `snake_case` DB field).
26
- - UI text: Turkish; formal or informal "you" ("siz" or "sen")? → [pick: sen]
27
- - Date: `GG.AA.YYYY`, money: `1.234,56 ₺` (`tr-TR` with `Intl`).
26
+ - UI text: [language]; formal or informal "you", if the language has both → [pick]
27
+ - Date and money: format with `Intl` and the UI locale (e.g. `tr-TR`: `29.10.2026`, `1.234,56 ₺`) → [locale]
@@ -14,7 +14,7 @@
14
14
  |---|---|---|
15
15
  | `signup` | Signup completed | Acquisition |
16
16
  | `activated` | [First moment of value: e.g. sent their first invoice] | Activation |
17
- | `[ana_eylem]` | [The product's main action] | Usage |
17
+ | `[main_action]` | [The product's main action] | Usage |
18
18
  | `upgrade` | Moved to a paid plan | Revenue |
19
19
 
20
20
  - [ ] Feedback channel: an in-app form or email, in an easy-to-see place.
@@ -14,7 +14,7 @@
14
14
  | [Primary] | | | |
15
15
  | [Secondary] | | | |
16
16
 
17
- ## 3. Value proposition (value proposition)
17
+ ## 3. Value proposition
18
18
 
19
19
  [One sentence: "With [product], [user] gets [result], because [difference]."]
20
20
 
@@ -40,7 +40,7 @@ The dashboard reads the "Priority" label; keep its wording.
40
40
  ### AC-02: [Feature name]
41
41
  ...
42
42
 
43
- ## 6. Out of scope (out of scope: NOT built in this release)
43
+ ## 6. Out of scope (NOT built in this release)
44
44
 
45
45
  This list stops the AI from widening the scope. Write every "later" idea that comes to mind here.
46
46
 
@@ -3,7 +3,7 @@
3
3
  > Each task must be small enough to **finish in one session** (about 1-3 hours, 1-5 files).
4
4
  > Split a task that looks big. Always give the AI a single task.
5
5
  > Format: `- [ ] G-NNN: [what] — done when: [how do I know it is done?]`
6
- > The dashboard reads the "## Phase N" headings; keep that form (roadmaps from before 3.48 say "## Faz N", and those are read too).
6
+ > The dashboard reads the "## Phase N" headings; keep that form.
7
7
 
8
8
  ## Phase 0 — Setup (skeleton)
9
9
 
@@ -4,7 +4,7 @@
4
4
  > The "behavior that must not change" lines start with an acceptance criterion id (`- AC-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
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
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 dashboard reads the labels, values and the "Behavior that must not change" heading below; keep their wording. Specs written before 3.48 use Turkish ones (Tür, Sınıf, Kural, özellik/hata); they are still read.
7
+ > The dashboard reads the labels, values and the "Behavior that must not change" heading below; keep their wording.
8
8
 
9
9
  **Type:** [feature / bug]
10
10
  **Class:** [bug only: empty-input / validation / authorization / date-time / locale / sorting / concurrency / configuration / external-service / contract / ui-state / other]
@@ -4,7 +4,7 @@
4
4
  > can pass the price without anyone noticing. `/dashboard` does the calculation from the inputs below **automatically**.
5
5
  > Filled in at `/start` Step 5; `/maintain monthly` updates it with real bills.
6
6
  > Use a dot as the decimal separator in numbers (e.g. `3.5`). Use a single currency.
7
- > The dashboard reads the input labels below; keep their wording (files from before 3.48 have Turkish labels, and those are still read).
7
+ > The dashboard reads the input labels below; keep their wording.
8
8
 
9
9
  ## Inputs
10
10
 
@@ -3,7 +3,7 @@
3
3
  > Approach: **Balanced.** Automatic tests are required for critical flows; a manual checklist is enough for the rest.
4
4
  > Test tools and commands: `docs/architecture/stack.md`.
5
5
 
6
- ## 1. Critical flows (critical flows; automatic test REQUIRED)
6
+ ## 1. Critical flows (automatic test REQUIRED)
7
7
 
8
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
 
@@ -48,7 +48,7 @@ About half of AI code has a security hole (Veracode, 2025). So for every endpoin
48
48
  | Log injection | A line break (`
49
49
  `) and a fake log line in the input | Escaped / single line in the logs |
50
50
 
51
- Test names start with the prefix `ATTACK:` (tests written before 3.48 may use `SALDIRI:`; both count). The `security-auditor` agent counts missing adversarial tests as KRİTİK.
51
+ Test names start with the prefix `ATTACK:`. The `security-auditor` agent counts missing adversarial tests as CRITICAL.
52
52
 
53
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
 
@@ -72,7 +72,7 @@ Test names start with the prefix `ATTACK:` (tests written before 3.48 may use `S
72
72
  ## 4. Commands
73
73
 
74
74
  ```bash
75
- [test komutu] # all
76
- [test komutu] [dosya] # single file
77
- [e2e komutu] # end to end
75
+ [test command] # all
76
+ [test command] [file] # single file
77
+ [e2e command] # end to end
78
78
  ```
@@ -17,7 +17,6 @@ Every choice that affects one of the following is a **decision point** and is as
17
17
  | `security` | Authorization model, roles, session length, rate limits, personal data handling |
18
18
  | `cost` | Choice of paid service, plan tier, AI model choice, spending limits |
19
19
 
20
- Projects set up before 3.48 may use the old Turkish codes (`urun`, `teknik`, `tasarim`, `icerik`, `veri`, `guvenlik`, `maliyet`); they mean the same topic. Write the English code; in a log that already uses the Turkish codes, keep using them.
21
20
 
22
21
  **Not a decision point** (not asked; apply it and report it briefly in the status block): file/variable/function names (follow `docs/product/glossary.md`), the internal layout of code, formatting, repeating a pattern the project has already decided.
23
22
 
@@ -55,7 +54,7 @@ Classify every decision before asking and state it in the question text:
55
54
 
56
55
  ## 4. Question mode
57
56
 
58
- The state is kept in the `**Question mode:**` line of `docs/workflow/progress.md` (before 3.48 `**Soru modu:**`). Default: `on · closed topics: none`.
57
+ The state is kept in the `**Question mode:**` line of `docs/workflow/progress.md`. Default: `on · closed topics: none`.
59
58
 
60
59
  | What the user says | What you do |
61
60
  |---|---|
@@ -21,7 +21,7 @@ These servers do not come in `.mcp.json`; the command that needs one asks the us
21
21
  | Playwright MCP | Exploratory browser testing, long interactive flow | `claude mcp add --scope local playwright -- npx -y @playwright/mcp@0.0.83` | For screenshots, `node .claude/hooks/preview.mjs`. For interactive trials, use the Playwright CLI first (every command is asked; in the project folder it reads the config file in the repo): `npx -y @playwright/cli@0.1.22 open <url>`, `snapshot`, `console`, `requests`, `screenshot`. The CLI does not force page data into the context, so it spends fewer tokens |
22
22
  | Chrome DevTools MCP | `/findings-perf`, `/findings-ux` | `claude mcp add --scope local chrome-devtools -- npx -y chrome-devtools-mcp@1.10.1` | Performance trace (LCP, CLS, INP), network waterfall, console |
23
23
  | Figma | `/design` (if the design is in Figma) | `claude mcp add --scope local --transport http figma-remote-mcp https://mcp.figma.com/mcp` | OAuth (`/mcp`). Figma's official plugin (~17 skills) is not used because of the context budget |
24
- | rea (CLI, not MCP) | `/research` (how a competitor feature works), `/adopt` (a part with no source) | No setup: `npx -y rea-agents@6.2.0 <alt komut>`; subcommands: `npx -y rea-agents@6.2.0 --help`. Needs Node `^22.19` or `>=24.11` | Only software the user owns or is authorized to inspect. The license agreement (EULA) may forbid reverse engineering; commercial tools (IDA, Hopper, JEB) follow their own license. `setup` is not run (it changes agent settings). The analysis is local; inspecting a site sends real requests to that site |
24
+ | rea (CLI, not MCP) | `/research` (how a competitor feature works), `/adopt` (a part with no source) | No setup: `npx -y rea-agents@6.2.0 <subcommand>`; subcommands: `npx -y rea-agents@6.2.0 --help`. Needs Node `^22.19` or `>=24.11` | Only software the user owns or is authorized to inspect. The license agreement (EULA) may forbid reverse engineering; commercial tools (IDA, Hopper, JEB) follow their own license. `setup` is not run (it changes agent settings). The analysis is local; inspecting a site sends real requests to that site |
25
25
  | Supabase dev (write) | `/build` (trying things in dev) | `claude mcp add --scope local --transport http supabase-dev "https://mcp.supabase.com/mcp?project_ref=DEV_REF&features=database,docs"` | Only the **development** project or branch (`DEV_REF`). The prod ref is never written to this definition. Schema changes are still made with a migration file |
26
26
 
27
27
  ## Opened when a service is chosen
@@ -51,7 +51,7 @@
51
51
 
52
52
  ## Context packages
53
53
 
54
- The skill descriptions of every plugin that is on are loaded into the context in each session. The skill list is limited to 1% of the context; when it overflows, the descriptions of rarely used skills drop and Claude does not recognize them. Skills inside a plugin cannot be switched off one by one. So plugins are split into **core** and **packages**. Packages come switched off in `.claude/settings.json`; in its first step the related command checks with `node .claude/hooks/tools.mjs --required <paket>` and, if the package is off, asks to switch it on together with its cost. Switching on affects only this machine (`.claude/settings.local.json`). Management: `/tools`. Definitions: `.claude/hooks/tools.mjs` → `PACKAGES`.
54
+ The skill descriptions of every plugin that is on are loaded into the context in each session. The skill list is limited to 1% of the context; when it overflows, the descriptions of rarely used skills drop and Claude does not recognize them. Skills inside a plugin cannot be switched off one by one. So plugins are split into **core** and **packages**. Packages come switched off in `.claude/settings.json`; in its first step the related command checks with `node .claude/hooks/tools.mjs --required <package>` and, if the package is off, asks to switch it on together with its cost. Switching on affects only this machine (`.claude/settings.local.json`). Management: `/tools`. Definitions: `.claude/hooks/tools.mjs` → `PACKAGES`.
55
55
 
56
56
  | Package | Plugins | Command that switches it on |
57
57
  |---|---|---|
@@ -150,7 +150,7 @@ First the style direction is chosen (`/design`). Each direction maps to a skill;
150
150
  | PR description | `mattpocock-skills:pr` |
151
151
  | Edit CLAUDE.md, a command or a skill (`/retro`) | `mattpocock-skills:writing-for-agents` |
152
152
  | CLAUDE.md audit, session lessons (`/retro`, `/wrap-up`) | `claude-md-management`: `claude-md-improver`, `/revise-claude-md` |
153
- | "Don't do this again" → permanent rule | `/hookify <kural>` (`.claude/hookify.*.local.md`) |
153
+ | "Don't do this again" → permanent rule | `/hookify <rule>` (`.claude/hookify.*.local.md`) |
154
154
  | React/Next performance (web) · React Native (mobile) | `react-best-practices`, `composition-patterns` · `react-native-guidelines` (Vercel) |
155
155
  | Database schema, query, index | `postgres-best-practices:*`, `supabase:*` |
156
156
  | Token and cost detail | `/session-report` (HTML), `node .claude/hooks/cost.mjs` for the dashboard |
@@ -18,7 +18,7 @@
18
18
  | 🟡 yellow | 60–84% | 70–89% | Before work starts, state the estimated cost. In board meetings, halve the member count. |
19
19
  | 🔴 red | ≥ 85% | ≥ 90% | Before new work starts, state the estimated cost and the remaining share in one line, then continue. Offer the options in §3 only if the user asks. |
20
20
 
21
- The thresholds are in `.claude/hooks/usage.mjs` → `ESIKLER`; if you change them, change both together.
21
+ The thresholds are in `.claude/hooks/usage.mjs` → `THRESHOLDS`; if you change them, change both together.
22
22
 
23
23
  ## 3. When planning work
24
24
 
package/kit/CHANGELOG.md CHANGED
@@ -3,6 +3,40 @@
3
3
  The kit version is in `kit/VERSION`. To update a project, run `/kit-update` in it.
4
4
  Items with an "Adapt by hand" note concern files owned by the project; the update does not touch them.
5
5
 
6
+ ## [3.49.1] - 2026-10-29
7
+
8
+ ### Fixed
9
+ - **The gate command approval names keys that will not run.** A key under `## Commands` the gate does not read (for example `tip kontrol:` instead of `type check:`) is listed in the approval dialog and in the gate's "command approval needed" text, so a skipped check is visible before you approve.
10
+ - The dashboard's copy button keeps a path in the command (`/fix-bug login fails on /api/login`, `/fix-bug blank page in /index.html`); only a second slash command (`then /clear`) cuts it.
11
+
12
+ ## [3.49.0] - 2026-10-29
13
+
14
+ ### Changed
15
+ - **Everything the kit ships is English.** Hooks, commands, agents, board files, templates, the eval fixtures and the Turkey add-on (`docs/legal/turkiye.md`, the KVKK checklist) are written in English; official names (KVKK, GİB, e-Fatura, iyzico, PayTR) stay as they are. The conversation language is still chosen in the first question of `/start` and `/adopt`.
16
+ - **Turkish interface texts ship as a translation file.** Hook messages, the status line and the dashboard read Turkish from `.claude/i18n/tr.json`; other languages are still translated by `/language`. A missing key falls back to English.
17
+ - **A set-up project with no language chosen talks in English.**
18
+ - **Labels and keys stay English in every language.** The session note tells the AI to keep `**Active phase:**`, `## Where we left off`, `type check:` and the verdict words English, because the tools read them.
19
+ - Skill descriptions no longer carry Turkish trigger words.
20
+ - Renamed: the checkpoint tag prefix is `checkpoint/` (was `calisan/`), the path marker is `kit:path-allowed` (was `kit:yol-izinli`), the AI add-on variables are `AI_MODEL_DEFAULT`, `AI_MODEL_FAST`, `AI_USER_DAILY_LIMIT`, the Dependabot group is `minor-updates`, the preview folder of an unnamed task is `.previews/latest`, and `/adopt` archives the old files as `claude-md-old.md` / `agents-md-old.md`.
21
+ - The dashboard warns when a board meeting result has no verdict it knows, and the gate warns about unknown keys under `## Commands`.
22
+
23
+ ### Breaking
24
+ - Turkish labels, values, verdicts, ids (`Ö-01.1`, `O_01_1`), prefixes (`SALDIRI:`) and arguments (`/tools ac`, `hepsi`, `K/O/B`…) are no longer read. A project file that still uses them looks empty to the dashboard and the status line, and a meeting with a Turkish verdict shows as unknown.
25
+ - The gate asks for the command approval once more after the update.
26
+ - The update no longer migrates from older versions: the narrator style rename, the old dashboard flag, the old preferences file name and the old package names are not rewritten.
27
+ - `/rollback` lists only `checkpoint/*` tags.
28
+
29
+ ### Compatibility
30
+ - Adapt by hand: move Turkish labels in `docs/workflow/progress.md`, `AGENTS.md` (`## Commands`), the decision log and board files to English; take the kit's template as `.kit-new` and copy your content over. Rename the AI variables in your `.env`, and replace `kit:yol-izinli` markers with `kit:path-allowed`.
31
+
32
+ ### Fixed
33
+ - The eval set-up wrote Turkish labels into the test project, so the kit condition read nothing from it.
34
+ - **The gate is no longer green on Semgrep alone.** With lint, type check and test all missing (no `## Commands` block, or a heading in another language), a clean Semgrep scan made the gate green and opened the commit gate. Now the result is EMPTY unless a project check passed.
35
+ - The unknown-key warning under `## Commands` reads only the code block: a note line or an address no longer counts as a key.
36
+ - A translation whose text drops or adds a placeholder (`{list}`, `{path}`) is not shown; the English text is shown instead, so an approval dialog never hides what it asks. Translation files are read once per process.
37
+ - The Turkey add-on names the Personal Data Protection Board and the Personal Data Protection Authority separately (who issues decisions, who is notified), and the e-invoice source keeps the communiqué's short name (VUK No. 509).
38
+ - `/start` says that writing a translation file asks for approval once.
39
+
6
40
  ## [3.48.1] - 2026-10-29
7
41
 
8
42
  ### Changed
package/kit/VERSION CHANGED
@@ -1 +1 @@
1
- 3.48.1
1
+ 3.49.1