tillerhand 3.33.0 → 3.34.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.
- package/.claude/board/rules.md +1 -1
- package/.claude/commands/build.md +4 -3
- package/.claude/hooks/flow.mjs +53 -0
- package/.claude/settings.json +2 -1
- package/README.en.md +1 -1
- package/README.md +1 -1
- package/kit/CHANGELOG.md +10 -0
- package/kit/VERSION +1 -1
- package/kit/guide.html +3 -3
- package/package.json +1 -1
package/.claude/board/rules.md
CHANGED
|
@@ -43,7 +43,7 @@ Kurulda olmayan bir üyeyi çağırma; ilgili alan kurulda yoksa durum bloğunda
|
|
|
43
43
|
|
|
44
44
|
## 4. Toplantı nasıl yapılır
|
|
45
45
|
|
|
46
|
-
1. **Limit kontrolü** (`docs/workflow/usage-limits.md`): Seviye sarıysa üye sayısını yarıya indir; kırmızıysa kullanıcıya sor (kurulu hafiflet seçeneği dahil).
|
|
46
|
+
1. **Limit kontrolü** (`docs/workflow/usage-limits.md`): Seviye sarıysa üye sayısını yarıya indir; kırmızıysa kullanıcıya sor (kurulu hafiflet seçeneği dahil). Görev sonu toplantısında üye sayısını ve paralel mi sırayla mı çalışılacağını `node .claude/hooks/flow.mjs` söyler (değişiklik büyüklüğü + limit; `code-reviewer` ve hassas yolda `security-auditor` her zaman katılır).
|
|
47
47
|
1b. **Deterministik kapı** (commit, görev sonu, faz sonu; plan toplantısında yok): `node .claude/hooks/gate.mjs --run`. AGENTS.md → Komutlar'daki lint, tip kontrolü ve test ile Semgrep çalışır; sonuç değişiklik imzasıyla saklanır. Kırmızıysa veya boşsa (hiçbir kontrol çalışmadı) commit kapısı açılmaz: önce düzelt ya da Komutlar'ı doldur. Kullanıcı ara commit için açıkça isterse `node .claude/hooks/commit-gate.mjs --skip "kullanıcı isteği"` (her zaman onaya sorulur). Kapı "komut onayı gerekli" derse komutları kullanıcıya göster; onaylarsa `node .claude/hooks/gate.mjs --approve` (yeni veya değişen komut onaysız çalışmaz).
|
|
48
48
|
1c. **Commit toplantısında önce** `node .claude/hooks/commit-gate.mjs --status`: "Onay geçerli" ise toplantı yok (görev sonu toplantısı aynı değişiklikleri denetledi). "Son onaydan sonra değişen: …" ise üyelere yalnız o dosyaların farkını ver.
|
|
49
49
|
2. **Üyeleri paralel çalıştır** (Agent aracı, her üye ayrı alt ajan). Her üyeye şunları ver: toplantı türü, kapsam (plan metni / diff aralığı / faz), görev kodu, kabul kriterleri ve kapı çıktısı (varsa). Çağrıda inceleme rolünün `model` ve `effort`'unu ver (`node .claude/hooks/models.mjs --show`); commit toplantısında `model: "haiku"`, `effort: "low"` ver. Rapor sözleşmesini istemde yaz: en fazla ~15 satır, bulgu başına tek satır, önem sırasıyla; övgü ve özet yok (raporlar ana oturumun bağlamına girer).
|
|
@@ -10,7 +10,8 @@ Boşsa `docs/workflow/progress.md` → "Sıradaki adım" veya `docs/product/road
|
|
|
10
10
|
0b. **Model ve effort** (`docs/workflow/models.md`): Son seçimi `node .claude/hooks/models.mjs --show` ile oku. İki AskUserQuestion çağrısı yap: önce dört soru, her rolün modeli (Opus / Sonnet / Haiku); sonra dört soru, her rolün effort'u (düşük / orta / yüksek / ekstra yüksek). Her soruda models.md'deki önerilen seçenek ilk sırada ve "(Önerilen)" etiketli; son seçim farklıysa o seçeneğin açıklamasına "son seçim" yaz. Cevabı `node .claude/hooks/models.mjs --set plan=<model>:<effort> code=… review=… docs=…` ile kaydet. Ana oturumun modeli veya effort'u plan rolünden farklıysa tek satırla `/model <ad>` ve `/effort <düzey>` öner. Soru modunda `maliyet` konusu kapalıysa sorma ve `--set` çalıştırma: son seçim geçerli kalır, durum bloğunda "otomatik" yaz.
|
|
11
11
|
1. Görevi ve kabul kriterlerini bana tek cümleyle tekrar et. `docs/workflow/progress.md` → aktif görevi güncelle.
|
|
12
12
|
2. Bu görev için onaylanmış bir plan yoksa ve 2'den fazla dosyaya dokunacaksa önce `/plan-task` adımlarını uygula (karar noktaları dahil), onay bekle.
|
|
13
|
-
|
|
13
|
+
2a. **Akış:** `node .claude/hooks/flow.mjs --files <plandaki dosya sayısı>` (masaüstünde durum çubuğu yok: `--context` ve `--limit`'i `get_usage`'dan ver). Çıktı kodun ve doküman işinin nerede yapılacağını (ana oturum / alt ajan), görev sonu kurulunun kaç üyeyle ve paralel mi sırayla mı toplanacağını söyler; 2b, 6b ve 8 buna uyar. "Önce /clear öner" derse tek satırla öner.
|
|
14
|
+
2b. **Kod rolüne devret (2b ve 3):** Akış "Kod: ana oturum" diyorsa (küçük görev: alt ajanın soğuk başlangıcı kazandırdığından pahalı) kodu adım 3'e göre kendin yaz. Yoksa Agent aracıyla alt ajan çalıştır, çağrıda kod rolünün `model` ve `effort`'unu ver. İstemde: görev ve kabul kriterleri, onaylı plan, dokunulacak dosyalar, adım 3'teki kurallar, önce kırmızı testler. Alt ajan kullanıcıya soru soramaz: karar noktasında durup soruyu ve seçenekleri raporlamasını iste; soruyu sen sor, kararı günlüğe yaz, alt ajanı cevapla devam ettir. Raporu kısa iste (en fazla ~15 satır: değişen dosyalar, test sonucu sayıyla, açık sorular; kod ve tam çıktı yok). Alt ajan bitince diff'i ve test çıktısını kendin oku; adım 4'ten sonrası ana oturumda. Kullanıcıya görünen metni (humanizer) son haline sen getir.
|
|
14
15
|
**Önce kabul testleri:** Görevin kabul kriterleri için testleri (kimlik test adında: `Ö-01.1`) ve gerekiyorsa saldırgan testlerini yaz, çalıştır ve **kırmızı** olduklarını göster (alt ajanın kırmızı çıktısını bana göster). Sonra uygula.
|
|
15
16
|
3. Uygula. Kurallar:
|
|
16
17
|
- **Uygularken yeni bir karar noktası çıkarsa dur ve sor** (`docs/workflow/decision-protocol.md`). Tahmin edip devam etme.
|
|
@@ -31,9 +32,9 @@ Boşsa `docs/workflow/progress.md` → "Sıradaki adım" veya `docs/product/road
|
|
|
31
32
|
- API/iş mantığı → gerçek istek at veya testi çalıştır; isteği ve yanıtı göster.
|
|
32
33
|
- Kanıt üretemiyorsan (cihaz, panel, ödeme gibi) bunu açıkça söyle ve benim yapmam gereken adımları yaz.
|
|
33
34
|
6. Arayüz değiştiyse `impeccable:impeccable` → `critique` çalıştır; önemli bulguları düzeltip düzeltmeyeceğimi sor.
|
|
34
|
-
6b. **Görev sonu kurul toplantısı** (`.claude/board/rules.md`; kurul kurulduysa). Bu, değişikliğin tek tam denetimidir: değişikliğe ilgili en fazla 3
|
|
35
|
+
6b. **Görev sonu kurul toplantısı** (`.claude/board/rules.md`; kurul kurulduysa). Bu, değişikliğin tek tam denetimidir: değişikliğe ilgili, akışın (2a) söylediği sayıda üye (en fazla 3) + `code-reviewer` (değişiklik auth, ödeme, kişisel veri gibi hassas bir yola dokunuyorsa `security-auditor` da), inceleme rolünün `model` ve `effort`'uyla. RET varsa görev bitmez; bulguyu ve seçenekleri sor. ONAY veya KOŞULLU ONAY ise ve kapı (adım 4) yeşilse `node .claude/hooks/commit-gate.mjs --approve "görev sonu: <katılanlar>"`: commit aynı değişiklikler için kurulu yeniden toplamaz, sonradan değişen dosyalar varsa yalnız onlar incelenir. Toplantıyı `docs/workflow/board.md` günlüğüne yaz. Kurul kurulmadıysa adım 9'da `/review-changes` öner.
|
|
35
36
|
7. `AGENTS.md` → "Bitti tanımı" listesini tek tek kontrol et.
|
|
36
|
-
8. Kapsam kalkanını kapat (komut kullanıcıya sorulur): `node .claude/hooks/freeze-guard.mjs --plan-end`. `docs/product/roadmap.md`'de görevi işaretle; PRD'de sadece testi yeşil olan kriterleri işaretle. Testleri JUnit raporuyla çalıştır (`docs/architecture/stack.md` → Kabul testleri) ki pano güncellensin. Limiti tekrar oku ve `docs/workflow/cost-log.md`'ye satır ekle (başlangıç/bitiş 5 saatlik %, süre dk). Roadmap, cost-log ve progress yazımını tek alt ajan çağrısıyla doküman rolüne ver (`model`, `effort`); sonucu kontrol et (progress.md'nin kalın etiketli satırları durum çubuğu ve pano için aynı biçimde kalmalı).
|
|
37
|
+
8. Kapsam kalkanını kapat (komut kullanıcıya sorulur): `node .claude/hooks/freeze-guard.mjs --plan-end`. `docs/product/roadmap.md`'de görevi işaretle; PRD'de sadece testi yeşil olan kriterleri işaretle. Testleri JUnit raporuyla çalıştır (`docs/architecture/stack.md` → Kabul testleri) ki pano güncellensin. Limiti tekrar oku ve `docs/workflow/cost-log.md`'ye satır ekle (başlangıç/bitiş 5 saatlik %, süre dk). Roadmap, cost-log ve progress yazımını akış "Doküman: alt ajan" diyorsa tek alt ajan çağrısıyla doküman rolüne ver (`model`, `effort`), "ana oturum" diyorsa kendin yaz; sonucu kontrol et (progress.md'nin kalın etiketli satırları durum çubuğu ve pano için aynı biçimde kalmalı).
|
|
37
38
|
9. Rapor ver:
|
|
38
39
|
- Ne yapıldı (2-3 satır)
|
|
39
40
|
- Bu görevde alınan kararlar (kullanıcı / otomatik)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Work plan for a task from its size, the context and the limit (0 tokens): a subagent only where it pays.
|
|
3
|
+
// A subagent starts cold (it reads its prompt and the files again); for a small task that costs more than it saves.
|
|
4
|
+
// node .claude/hooks/flow.mjs [--files N] [--context N] [--limit N] [--json]
|
|
5
|
+
// Without arguments: files = changed files in git, context = status line (.claude/state/context.json),
|
|
6
|
+
// limit = usage.mjs. On the desktop app there is no status line: give --context and --limit from get_usage.
|
|
7
|
+
import fs from 'node:fs';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import { findRoot, isMain } from './shared.mjs';
|
|
10
|
+
import { changes } from './commit-gate.mjs';
|
|
11
|
+
import { readLimits, level, LEVEL_LABEL } from './usage.mjs';
|
|
12
|
+
|
|
13
|
+
// Same bands as the cost table in docs/workflow/usage-limits.md §3 (1-2, 3-6, more files)
|
|
14
|
+
export function flow({ files, context, level: lvl }) {
|
|
15
|
+
const size = files <= 2 ? 'küçük' : files <= 6 ? 'orta' : 'büyük';
|
|
16
|
+
const clear = context != null && context >= 50;
|
|
17
|
+
// A full main context is paid again on every turn: the code goes out of it
|
|
18
|
+
const code = size === 'küçük' && !clear ? 'ana' : 'alt ajan';
|
|
19
|
+
const base = { küçük: 1, orta: 2, büyük: 3 }[size];
|
|
20
|
+
// Yellow halves the members (rules.md §4); red runs one, so a RET stops before the rest is paid for
|
|
21
|
+
const members = lvl === 'red' ? 1 : lvl === 'yellow' ? Math.ceil(base / 2) : base;
|
|
22
|
+
return { files, context, level: lvl, size, clear, code, docs: code, members, reviewer: true, parallel: lvl !== 'red' };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function flowText(f) {
|
|
26
|
+
const where = (w) => (w === 'ana' ? 'ana oturum' : 'alt ajan');
|
|
27
|
+
return [
|
|
28
|
+
`Akış: ${f.files} dosya · ${f.size} · bağlam ${f.context == null ? 'bilinmiyor' : `%${f.context}`} · limit ${LEVEL_LABEL[f.level]}`,
|
|
29
|
+
`Kod: ${where(f.code)}${f.code === 'ana' ? '' : ' (kod rolü)'}`,
|
|
30
|
+
`Doküman (roadmap, progress, cost-log): ${where(f.docs)}${f.docs === 'ana' ? '' : ' (doküman rolü)'}`,
|
|
31
|
+
`Kurul: ${f.members} üye + code-reviewer, ${f.parallel ? 'paralel' : 'sırayla'} (hassas yolda + security-auditor)`,
|
|
32
|
+
...(f.clear ? [`Önce /clear öner: bağlam %${f.context}, her tur bunu yeniden okur.`] : []),
|
|
33
|
+
].join('\n');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const readContext = (root) => {
|
|
37
|
+
try { const c = JSON.parse(fs.readFileSync(path.join(root, '.claude', 'state', 'context.json'), 'utf8')); return typeof c.percent === 'number' ? c.percent : null; } catch { return null; }
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
if (isMain(import.meta.url)) {
|
|
41
|
+
const root = findRoot();
|
|
42
|
+
const arg = (name) => {
|
|
43
|
+
const i = process.argv.indexOf(name);
|
|
44
|
+
if (i < 0) return undefined;
|
|
45
|
+
const n = Number(process.argv[i + 1]);
|
|
46
|
+
if (!Number.isFinite(n) || n < 0) { console.error('Kullanım: node .claude/hooks/flow.mjs [--files N] [--context N] [--limit N] [--json]'); process.exit(1); }
|
|
47
|
+
return n;
|
|
48
|
+
};
|
|
49
|
+
const files = arg('--files') ?? (() => { try { return changes().files.length; } catch { return 0; } })();
|
|
50
|
+
const limit = arg('--limit');
|
|
51
|
+
const f = flow({ files, context: arg('--context') ?? readContext(root), level: level(limit != null ? { five_hour: { percent: limit } } : readLimits(root)) });
|
|
52
|
+
console.log(process.argv.includes('--json') ? JSON.stringify(f) : flowText(f));
|
|
53
|
+
}
|
package/.claude/settings.json
CHANGED
|
@@ -26,7 +26,8 @@
|
|
|
26
26
|
"Bash(node .claude/hooks/prefs.mjs --list)",
|
|
27
27
|
"Bash(node .claude/hooks/models.mjs --show)",
|
|
28
28
|
"Bash(node .claude/hooks/models.mjs --set:*)",
|
|
29
|
-
"Bash(node .claude/hooks/commit-gate.mjs --status)"
|
|
29
|
+
"Bash(node .claude/hooks/commit-gate.mjs --status)",
|
|
30
|
+
"Bash(node .claude/hooks/flow.mjs:*)"
|
|
30
31
|
],
|
|
31
32
|
"ask": [
|
|
32
33
|
"Bash(git push:*)",
|
package/README.en.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.
|
|
9
|
+
<a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.34.0-2a78d6?style=flat-square"></a>
|
|
10
10
|
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-2a78d6?style=flat-square"></a>
|
|
11
11
|
<img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-ready-d97757?style=flat-square">
|
|
12
12
|
<img alt="Also Codex and Antigravity" src="https://img.shields.io/badge/also-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.
|
|
9
|
+
<a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.34.0-2a78d6?style=flat-square"></a>
|
|
10
10
|
<a href="LICENSE"><img alt="Lisans: MIT" src="https://img.shields.io/badge/lisans-MIT-2a78d6?style=flat-square"></a>
|
|
11
11
|
<img alt="Claude Code" src="https://img.shields.io/badge/Claude%20Code-haz%C4%B1r-d97757?style=flat-square">
|
|
12
12
|
<img alt="Codex ve Antigravity" src="https://img.shields.io/badge/ayr%C4%B1ca-Codex%20%C2%B7%20Antigravity-5b6577?style=flat-square">
|
package/kit/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
Kit sürümü `kit/VERSION` dosyasında. Bir projeyi güncellemek: projede `/kit-update`.
|
|
4
4
|
"Elle uyarla" notu olan maddeler projeye ait dosyalardadır; güncelleme bunlara dokunmaz.
|
|
5
5
|
|
|
6
|
+
## [3.34.0] - 2026-10-26
|
|
7
|
+
|
|
8
|
+
### Eklenen
|
|
9
|
+
- **Alt ajan yalnız karlıysa.** Alt ajan soğuk başlar: istemini ve dosyaları yeniden okur. Küçük bir görevde bu, kazandırdığından pahalıdır. Yeni `node .claude/hooks/flow.mjs` görev büyüklüğüne (dosya sayısı), bağlama ve limite bakıp akışı söyler, token harcamaz:
|
|
10
|
+
- 1-2 dosya: kod ve doküman işi ana oturumda. 3 ve üstü ya da bağlam %50'nin üstündeyse kod rolü alt ajanda.
|
|
11
|
+
- Görev sonu kurulu 1, 2 ya da 3 üye + `code-reviewer` (hassas yolda `security-auditor` da). Limit sarıda üye sayısı yarıya iner, kırmızıda tek üye sırayla çalışır.
|
|
12
|
+
- Bağlam %50'nin üstündeyse önce `/clear` önerilir.
|
|
13
|
+
- `/build` (adım 2a) ve kurul kuralları bunu kullanır. Masaüstü uygulamasında durum çubuğu olmadığı için bağlam ve limit `--context`, `--limit` ile verilir.
|
|
14
|
+
- İzin satırı `/kit-update` ile eklenir.
|
|
15
|
+
|
|
6
16
|
## [3.33.0] - 2026-10-26
|
|
7
17
|
|
|
8
18
|
### Değişen
|
package/kit/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.34.0
|
package/kit/guide.html
CHANGED
|
@@ -287,7 +287,7 @@ footer .container { display: flex; flex-wrap: wrap; gap: 16px; justify-content:
|
|
|
287
287
|
<section class="hero">
|
|
288
288
|
<div class="container">
|
|
289
289
|
<div>
|
|
290
|
-
<span class="pill"><b>v3.
|
|
290
|
+
<span class="pill"><b>v3.34.0</b> Claude Code için başlangıç kiti · MIT</span>
|
|
291
291
|
<h1>Kodu AI yazar.<br><em>Dümen sende.</em></h1>
|
|
292
292
|
<p class="sub">TillerHand, Claude Code ile bir ürünü fikirden canlıya ve bakıma kadar götürür. Her önemli kararda AI sana seçenekleri, önerisini ve her seçeneğin bedelini sunar. Bir uzman kurulu işi denetler, korumalar hatayı daha olmadan durdurur.</p>
|
|
293
293
|
<div class="install"><span id="cmd">npx tillerhand init</span><button class="copy" type="button" data-copy="cmd">Kopyala</button></div>
|
|
@@ -894,7 +894,7 @@ Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
|
|
|
894
894
|
<article class="tile"><h3>Dağıtım kurulumu</h3><p class="stack">/release first · deploy-setup.md</p><ul><li>Hosting, ortam değişkenleri, alan adı ve DNS, yedek, geri alma provası</li><li>Vercel, Supabase, Railway, EAS; adımlar kaynaklı ve tarihli</li><li>Sırrı sen panelde girersin; sohbete ve dosyaya yazılmaz</li></ul></article>
|
|
895
895
|
<article class="tile"><h3>Öğrenen kurallar</h3><p class="stack">/fix-bug · /retro · hookify · AGENTS.md</p><ul><li>Aynı hata sınıfı ikinci kez gelince /fix-bug kural önerir; panoda da uyarı çıkar</li><li>Mekanik kural hookify'a, gerisi AGENTS.md'ye; sen onaylamadan yazılmaz</li><li>Her kuralda kaynak ve tarih; /maintain 90 günden eskileri sorar</li><li>Auto memory /start'ta sorulur, önerilen kapalı</li></ul></article>
|
|
896
896
|
<article class="tile"><h3>Kişisel tercihler</h3><p class="stack">~/.vibe-kit/tercihler.md · prefs.mjs</p><ul><li>Bir davranışı düzelttiğinde ya da nasıl çalışmak istediğini söylediğinde AI not alır</li><li>Görev ve oturum sonunda "tercih olarak kaydedeyim mi?" diye sorar; onaylamadığın yazılmaz</li><li>Tercihler tüm projelerinde geçerli, her oturumda yüklenir; git'e girmez</li><li>Listele: <code>node .claude/hooks/prefs.mjs --list</code>, sil: <code>--remove <no></code></li></ul></article>
|
|
897
|
-
<article class="tile"><h3>Rol bazlı model</h3><p class="stack">docs/workflow/models.md · models.mjs</p><ul><li>Dört rol: planlama, kod yazma, inceleme, doküman ve araştırma</li><li>Her görevin başında iki ekran: önce rollerin modeli, sonra effort'u</li><li>Önerilen: Opus yüksek, Sonnet yüksek, Sonnet yüksek, Haiku yüksek</li><li>Kod, inceleme ve doküman işleri seçilen modelle alt ajanda; plan ana oturumda</li></ul></article>
|
|
897
|
+
<article class="tile"><h3>Rol bazlı model</h3><p class="stack">docs/workflow/models.md · models.mjs</p><ul><li>Dört rol: planlama, kod yazma, inceleme, doküman ve araştırma</li><li>Her görevin başında iki ekran: önce rollerin modeli, sonra effort'u</li><li>Önerilen: Opus yüksek, Sonnet yüksek, Sonnet yüksek, Haiku yüksek</li><li>Kod, inceleme ve doküman işleri seçilen modelle alt ajanda; plan ana oturumda</li><li>Alt ajan yalnız karlıysa: <code>flow.mjs</code> görev büyüklüğüne, bağlama ve limite bakar; küçük görev ana oturumda kalır, kurul üye sayısı limite göre azalır</li></ul></article>
|
|
898
898
|
<article class="tile"><h3>Türkiye eki</h3><p class="stack">--addons tr · docs/legal/turkiye.md</p><ul><li>KVKK yurt dışı aktarım: standart sözleşme, 5 iş günü bildirim</li><li>e-Fatura ve e-Arşiv eşikleri (GİB)</li><li>iyzico ve PayTR bildirim imzası kodu ve saldırgan testi</li><li>İ/ı ve Türkçe sıralama testleri; hukuki görüş değildir</li></ul></article>
|
|
899
899
|
<article class="tile"><h3>Tarayıcıda QA ve önizleme</h3><p class="stack">/qa · preview.mjs · Playwright CLI</p><ul><li>Arayüz kriterleri gerçek tarayıcıda test olarak koşar</li><li>Rapor test sonucundan yazılır, panoda kart</li><li>/build arayüz görevinde masaüstü ve mobil ekran görüntüsü</li></ul></article>
|
|
900
900
|
<article class="tile"><h3>Spec ve sapma kontrolü</h3><p class="stack">docs/product/specs/ · gate.mjs</p><ul><li>Mevcut, beklenen ve değişmemesi gereken davranış</li><li>"Değişmemesi gereken" satırların testi kapıda denetlenir</li><li>3+ dosyalık işte /plan-task, her hatada /fix-bug yazar</li></ul></article>
|
|
@@ -1055,7 +1055,7 @@ Sıradaki: G-013 şifre sıfırlama · bekleyen karar: e-posta servisi</pre>
|
|
|
1055
1055
|
<footer>
|
|
1056
1056
|
<div class="container">
|
|
1057
1057
|
<a class="brand" href="#top" style="font-size:16px"><svg class="mark" style="width:22px;height:22px"><use href="#mark"/></svg>TillerHand</a>
|
|
1058
|
-
<span>Sürüm 3.
|
|
1058
|
+
<span>Sürüm 3.34.0 · <a href="https://github.com/burakdogrul/TillerHand">GitHub</a> · <a href="https://github.com/burakdogrul/TillerHand/blob/main/LICENSE">MIT lisansı</a> · KVKK bölümü kontrol listesidir, hukuki görüş değildir.</span>
|
|
1059
1059
|
</div>
|
|
1060
1060
|
</footer>
|
|
1061
1061
|
|
package/package.json
CHANGED