tillerhand 3.28.2 → 3.28.4

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.
@@ -41,12 +41,35 @@ export function changes() {
41
41
  return { files, signature: h.digest('hex') };
42
42
  }
43
43
 
44
- // git's global options may come before commit: git --no-pager commit, git -C x commit, git --git-dir=x commit
45
- const COMMIT = /\bgit\b(?:\s+(?:-[cC]\s+\S+|--?[\w-]+(?:=\S+)?))*\s+commit\b/;
44
+ // git's global options may come before commit: git --no-pager commit, git -C x commit, git --git-dir=x commit; git.exe on Windows
45
+ const commitRe = (verbs) => new RegExp(`\\bgit(?:\\.exe)?["']?(?:\\s+(?:-[cC]\\s+\\S+|--?[\\w-]+(?:=\\S+)?))*\\s+(?:${verbs.join('|')})(?=\\s|$|["';&|)])`);
46
+ const COMMIT = commitRe(['commit']);
47
+ const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
48
+
49
+ // git aliases that run commit ([alias] ci = commit, cm = !git commit), from git config and from an inline -c alias.x=commit
50
+ export function commitPattern(command) {
51
+ if (!/\bgit/.test(command)) return COMMIT; // this hook runs on every Bash call: git config only when git is named
52
+ // An alias defined in the same command (git -c alias.x=…, git config alias.x …, GIT_CONFIG_* env) cannot be read beforehand:
53
+ // every git subcommand then counts as a commit (inline), and the chain check, which only knows plain commit, stops the command.
54
+ if (/GIT_CONFIG_|\balias\.[\w-]+=|\bconfig\b[^;&|\n]*\balias\./i.test(command)) return Object.assign(commitRe(['\\S+']), { inline: true });
55
+ let config = '';
56
+ try { config = git('config --get-regexp ^alias\\.'); } catch { /* no alias or no repo */ }
57
+ // Aliases are case-insensitive; one whose value names commit anywhere (a !shell alias too) or calls such an alias is a commit
58
+ const aliases = [...config.matchAll(/^alias\.(\S+)\s+(.*)$/gm)].map(([, name, value]) => [name.toLowerCase(), value]);
59
+ const names = new Set();
60
+ for (let grew = true; grew;) {
61
+ grew = false;
62
+ for (const [name, value] of aliases) {
63
+ const words = value.toLowerCase().split(/[^\w.-]+/);
64
+ if (!names.has(name) && (words.includes('commit') || words.some((w) => names.has(w)))) { names.add(name); grew = true; }
65
+ }
66
+ }
67
+ return names.size ? new RegExp(commitRe(['commit', ...[...names].map(escapeRe)]).source, 'i') : COMMIT;
68
+ }
46
69
 
47
70
  // The hook sees the command before it runs: anything that can change files before the commit defeats the review.
48
71
  // Allowed: commit alone, with "git add" and "cd" before it. A heredoc and a $(cat <<'EOF' … EOF) message do not count as commands.
49
- export function chainIssue(command) {
72
+ export function chainIssue(command, commit = COMMIT) {
50
73
  const k = command.replace(/<<-?\s*(['"]?)(\w+)\1[^\n]*\n[\s\S]*?\n[ \t]*\2[ \t]*(?=\n|$)/g, '<<HEREDOC')
51
74
  .replace(/\$\(\s*cat\s+<<HEREDOC\s*\)/g, 'MESAJ')
52
75
  .replace(/'[^']*'/g, "''")
@@ -54,7 +77,7 @@ export function chainIssue(command) {
54
77
  .replace(/\d*>&\d+/g, '');
55
78
  if (/\$\(|`/.test(k)) return 'komutta ikame var ($(...) veya `...`)';
56
79
  const parts = k.split(/&&|\|\||[;|&\n]/).map((s) => s.trim()).filter(Boolean);
57
- return parts.every((s) => COMMIT.test(s) || /^git\s+add\b/.test(s) || /^cd\b/.test(s)) ? null : 'commit başka komutlarla zincirli';
80
+ return parts.every((s) => commit.test(s) || /^git\s+add\b/.test(s) || /^cd\b/.test(s)) ? null : 'commit başka komutlarla zincirli';
58
81
  }
59
82
 
60
83
  export const docsOnly = (files) => files.every((f) => /\.(md|txt)$/i.test(f) || f.startsWith('docs/'));
@@ -131,8 +154,10 @@ async function hook() {
131
154
  process.exit(0);
132
155
  }
133
156
  // --skip bypasses the gate and the board: the user is asked in every spelling (the AI must not write it on its own)
157
+ // A commit whose message names --skip goes on to the commit checks below (a real --skip chained to a commit is stopped there).
134
158
  const open = unquote(command);
135
- if ([command, open].some((c) => /commit-gate\.mjs\b[^;&|\n]*--skip\b/i.test(c))) {
159
+ const commit = commitPattern(command);
160
+ if (!commit.test(command) && [command, open].some((c) => /commit-gate\.mjs\b[^;&|\n]*--skip\b/i.test(c))) {
136
161
  console.log(JSON.stringify({ hookSpecificOutput: { hookEventName: 'PreToolUse', permissionDecision: 'ask',
137
162
  permissionDecisionReason: 'Commit kapısı: --skip kurul denetimini ve deterministik kapıyı aşar. Sadece kullanıcı açıkça isterse onayla.' } }));
138
163
  process.exit(0);
@@ -155,9 +180,9 @@ async function hook() {
155
180
  permissionDecisionReason: `Kapı komut onayı: AGENTS.md → Komutlar'daki şu komutlar bundan sonra her kapıda çalışır:\n${list}\nGüvendiğin komutlarsa onayla.` } }));
156
181
  process.exit(0);
157
182
  }
158
- if (!COMMIT.test(command) && !COMMIT.test(open)) process.exit(0);
183
+ if (!commit.test(command) && !commit.test(open)) process.exit(0);
159
184
  if (!hasBoard() || reviewOff()) process.exit(0);
160
- const chain = chainIssue(command);
185
+ const chain = chainIssue(command, commit.inline ? COMMIT : commit);
161
186
  if (chain) {
162
187
  process.stderr.write(`Commit durduruldu: ${chain}. Kapı komut çalışmadan önceki değişiklikleri denetler; commit'i tek başına ` +
163
188
  '(veya yalnızca "git add … && git commit" ile) çalıştır. Push ve diğer komutları ayrı çalıştır.\n');
@@ -12,8 +12,8 @@ jobs:
12
12
  # kit.mjs install bu dosyayı projeye taşımaz.
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
- - uses: actions/checkout@v4
16
- - uses: actions/setup-node@v4
15
+ - uses: actions/checkout@v7
16
+ - uses: actions/setup-node@v7
17
17
  with:
18
18
  node-version: 22
19
19
  - name: Testler
@@ -1,7 +1,7 @@
1
1
  # Kitin npm paketini (tillerhand) yayınlar: v* tag'i push edilince. Projelere kopyalanmaz (kit/kit.mjs → KIT_ONLY).
2
2
  # Token yok: npm Trusted Publishing (OIDC). npmjs.com → tillerhand → Settings → Trusted Publisher: GitHub Actions,
3
3
  # burakdogrul / TillerHand / npm-publish.yml / environment: npm. Kaynak: docs.npmjs.com/trusted-publishers (2026-10-06).
4
- # Action'lar commit SHA'sına sabit (v4.4.0); yeni sürüme geçerken SHA'yı github.com/actions/<ad>/releases'tan al.
4
+ # Action'lar commit SHA'sına sabit (checkout v7.0.1, setup-node v7.1.0); yeni sürüme geçerken SHA'yı github.com/actions/<ad>/releases'tan al.
5
5
  name: npm-publish
6
6
 
7
7
  on:
@@ -16,12 +16,13 @@ jobs:
16
16
  test:
17
17
  runs-on: ubuntu-latest
18
18
  steps:
19
- - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
19
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
20
20
  with:
21
21
  fetch-depth: 0
22
- - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
22
+ - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
23
23
  with:
24
24
  node-version: 24
25
+ package-manager-cache: false # no cache in a release workflow (cache poisoning)
25
26
  - name: Tag main'deki bir commit'i mi gösteriyor
26
27
  run: git merge-base --is-ancestor "$GITHUB_SHA" origin/main || { echo "Tag main dalında değil, yayın durdu."; exit 1; }
27
28
  - name: Sürümler aynı mı (tag, package.json, kit/VERSION)
@@ -42,10 +43,11 @@ jobs:
42
43
  contents: read
43
44
  id-token: write
44
45
  steps:
45
- - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
46
- - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
46
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
47
+ - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
47
48
  with:
48
49
  node-version: 24
50
+ package-manager-cache: false # no cache in a release workflow (cache poisoning)
49
51
  registry-url: https://registry.npmjs.org
50
52
  - name: npm sürümü (Trusted Publishing 11.5.1+ ister)
51
53
  run: node -e "const [a,b,c]=process.argv[1].split('.').map(Number); process.exit(a>11||(a===11&&(b>5||(b===5&&c>=1)))?0:1)" "$(npm --version)"
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.28.2-2a78d6?style=flat-square"></a>
9
+ <a href="kit/CHANGELOG.md"><img alt="Version" src="https://img.shields.io/badge/version-3.28.4-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.28.2-2a78d6?style=flat-square"></a>
9
+ <a href="kit/CHANGELOG.md"><img alt="Sürüm" src="https://img.shields.io/badge/s%C3%BCr%C3%BCm-3.28.4-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,23 @@
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.28.4] - 2026-10-26
7
+
8
+ ### Değişen
9
+ - **GitHub Actions sürümleri Node 24'e geçti** (GitHub, Node 20 ile çalışan action'ları zorla Node 24'te çalıştırıyordu ve uyarı veriyordu): `actions/checkout` v7, `actions/setup-node` v7, `gitleaks/gitleaks-action` v3, `astral-sh/setup-uv` v10. Şablonlardaki CI, bakım, canlı izleme ve ödeme webhook iş akışları güncellendi. Kitin npm yayın iş akışı commit SHA'sına sabit kalıyor ve paket önbelleğini kapatıyor (önbellek zehirlenmesine karşı).
10
+ - Elle uyarla: Projedeki iş akışını kendin değiştirdiysen `/kit-update` yeni sürümü `.kit-new` olarak bırakır; sürüm satırlarını oradan al.
11
+
12
+ ### Düzeltilen
13
+ - **Commit alias'ı tespiti genişledi:** büyük/küçük harf duyarsız; başka bir alias'ı çağıran ya da değerinde `commit` geçen `!` kabuk alias'ları da commit sayılıyor. Aynı komutta tanımlanan alias (`git -c alias.x=…`, `git config alias.x …`, `GIT_CONFIG_*`) önceden okunamadığı için komut durduruluyor.
14
+
15
+ ## [3.28.3] - 2026-10-26
16
+
17
+ ### Düzeltilen
18
+ - **Commit kapısı `git.exe commit`, tam yolla yazılan git ve commit'e açılan git alias'larını da görüyor** (`[alias] ci = commit`, `!git commit`, `git -c alias.x=commit x`). Bunlar önceden kapıya takılmıyordu.
19
+ - **Mesajında `commit-gate.mjs --skip` geçen bir commit, kurul ve kapı denetiminden sorusuz geçebiliyordu.** Böyle bir commit artık normal commit denetiminden geçiyor.
20
+ - **3.10.0'dan kalan geniş `tools.mjs` izni (`Bash(node .claude/hooks/tools.mjs:*)`) `/kit-update` ile kaldırılıyor.** Bu izin, sorulması gereken `--enable` ve `--commands` komutlarını da serbest bırakıyordu.
21
+ - Elle uyarla: yok.
22
+
6
23
  ## [3.28.2] - 2026-10-26
7
24
 
8
25
  ### Düzeltilen
package/kit/VERSION CHANGED
@@ -1 +1 @@
1
- 3.28.2
1
+ 3.28.4
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.28.2</b> Claude Code için başlangıç kiti · MIT</span>
290
+ <span class="pill"><b>v3.28.4</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>
package/kit/kit.mjs CHANGED
@@ -119,7 +119,9 @@ const OLD_RULES = {
119
119
  // 3.19.1: in the project folder the CLI loads a repo's .playwright/cli.config.json (it can run a program); asked, not allowed
120
120
  ...['open', 'snapshot', 'console', 'requests', 'screenshot'].map((c) => `Bash(npx -y @playwright/cli@0.1.22 ${c}:*)`),
121
121
  // 3.28.0: --plan-end + --plan-save widened or dropped the scope shield unasked; both are asked now
122
- 'Bash(node .claude/hooks/freeze-guard.mjs --plan-save:*)', 'Bash(node .claude/hooks/freeze-guard.mjs --plan-end)'],
122
+ 'Bash(node .claude/hooks/freeze-guard.mjs --plan-save:*)', 'Bash(node .claude/hooks/freeze-guard.mjs --plan-end)',
123
+ // 3.10.0 allowed every tools.mjs flag; --enable and --commands are asked since 3.10.1, the broad rule skipped that
124
+ 'Bash(node .claude/hooks/tools.mjs:*)'],
123
125
  ask: ['Bash(node .claude/hooks/freeze-guard.mjs --plan-ekle:*)', 'Bash(node .claude/hooks/gate.mjs --onayla)', 'Bash(node .claude/hooks/tools.mjs --ac:*)'],
124
126
  };
125
127
 
@@ -14,8 +14,8 @@ jobs:
14
14
  test:
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@v4
18
- - uses: actions/setup-node@v4
17
+ - uses: actions/checkout@v7
18
+ - uses: actions/setup-node@v7
19
19
  with:
20
20
  node-version: 22
21
21
  # Node 22.18+ .ts modülünü doğrudan çalıştırır; bağımlılık kurulumu gerekmez
@@ -27,8 +27,8 @@ jobs:
27
27
  ENV: test
28
28
  DATABASE_URL: postgresql+psycopg://app:app@localhost:5432/app_test
29
29
  steps:
30
- - uses: actions/checkout@v4
31
- - uses: astral-sh/setup-uv@v5
30
+ - uses: actions/checkout@v7
31
+ - uses: astral-sh/setup-uv@v10
32
32
  - run: uv sync --locked
33
33
  - run: uv run ruff check .
34
34
  - run: uv run ruff format --check .
@@ -43,14 +43,14 @@ jobs:
43
43
  structure:
44
44
  runs-on: ubuntu-latest
45
45
  steps:
46
- - uses: actions/checkout@v4
46
+ - uses: actions/checkout@v7
47
47
  - name: Klasör yapısı (.claude/structure.json)
48
48
  run: node .claude/hooks/structure-guard.mjs --check
49
49
 
50
50
  karmasiklik:
51
51
  runs-on: ubuntu-latest
52
52
  steps:
53
- - uses: actions/checkout@v4
53
+ - uses: actions/checkout@v7
54
54
  with:
55
55
  fetch-depth: 0 # base commit'iyle karşılaştırmak için
56
56
  - name: Karmaşıklık bütçesi (değişen dosyalar; fonksiyon karmaşıklığı 15, fonksiyon 80, dosya 400 satır)
@@ -63,14 +63,14 @@ jobs:
63
63
  container:
64
64
  image: semgrep/semgrep
65
65
  steps:
66
- - uses: actions/checkout@v4
66
+ - uses: actions/checkout@v7
67
67
  - name: Statik güvenlik analizi (yüksek önemli bulgular CI'ı durdurur)
68
68
  run: semgrep scan --config p/default --config p/owasp-top-ten --severity ERROR --error
69
69
 
70
70
  kopya-kod:
71
71
  runs-on: ubuntu-latest
72
72
  steps:
73
- - uses: actions/checkout@v4
73
+ - uses: actions/checkout@v7
74
74
  - name: Kopya kod oranı (eşik %5)
75
75
  run: npx --yes jscpd@4 --threshold 5 --silent --ignore "**/node_modules/**,**/.next/**,**/dist/**,**/build/**,**/.venv/**,**/coverage/**,**/.expo/**" .
76
76
 
@@ -81,11 +81,11 @@ jobs:
81
81
  contents: read
82
82
  pull-requests: read
83
83
  steps:
84
- - uses: actions/checkout@v4
84
+ - uses: actions/checkout@v7
85
85
  with:
86
86
  fetch-depth: 0 # tüm geçmiş taranır
87
87
  # Kişisel hesapta ücretsiz; organizasyon deposunda GITLEAKS_LICENSE sırrı gerekir
88
- - uses: gitleaks/gitleaks-action@v2
88
+ - uses: gitleaks/gitleaks-action@v3
89
89
  env:
90
90
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
91
91
  # Token salt okunur: PR yorumu kapalı, sızıntı işi kırmızı yapar
@@ -32,7 +32,7 @@ jobs:
32
32
  runs-on: ubuntu-latest
33
33
  timeout-minutes: 30
34
34
  steps:
35
- - uses: actions/checkout@v4
35
+ - uses: actions/checkout@v7
36
36
  with:
37
37
  ref: ${{ github.event.workflow_run.head_branch }}
38
38
  - name: Başarısız adımların kaydı
@@ -28,7 +28,7 @@ jobs:
28
28
  runs-on: ubuntu-latest
29
29
  timeout-minutes: 20
30
30
  steps:
31
- - uses: actions/checkout@v4
31
+ - uses: actions/checkout@v7
32
32
  with:
33
33
  fetch-depth: 50
34
34
  - uses: anthropics/claude-code-action@v1
@@ -23,7 +23,7 @@ jobs:
23
23
  runs-on: ubuntu-latest
24
24
  timeout-minutes: 10
25
25
  steps:
26
- - uses: actions/checkout@v4
26
+ - uses: actions/checkout@v7
27
27
  - name: Sağlık ve yanıt süresi
28
28
  run: |
29
29
  t=$(curl -fsS -o /dev/null --max-time 10 -w '%{time_total}' "${{ vars.LIVE_URL }}/health")
@@ -31,7 +31,7 @@ jobs:
31
31
  awk -v t="$t" -v max="$MAX" 'BEGIN { exit (t > max) }'
32
32
  env:
33
33
  MAX: ${{ vars.LIVE_MAX_SECONDS || '2' }}
34
- - uses: astral-sh/setup-uv@v5
34
+ - uses: astral-sh/setup-uv@v10
35
35
  if: hashFiles('tests/live/**') != ''
36
36
  - name: Kritik uçlar (canlı)
37
37
  if: hashFiles('tests/live/**') != ''
@@ -14,8 +14,8 @@ jobs:
14
14
  kontrol:
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@v4
18
- - uses: actions/setup-node@v4
17
+ - uses: actions/checkout@v7
18
+ - uses: actions/setup-node@v7
19
19
  with:
20
20
  node-version: 22
21
21
  cache: npm
@@ -31,14 +31,14 @@ jobs:
31
31
  structure:
32
32
  runs-on: ubuntu-latest
33
33
  steps:
34
- - uses: actions/checkout@v4
34
+ - uses: actions/checkout@v7
35
35
  - name: Klasör yapısı (.claude/structure.json)
36
36
  run: node .claude/hooks/structure-guard.mjs --check
37
37
 
38
38
  karmasiklik:
39
39
  runs-on: ubuntu-latest
40
40
  steps:
41
- - uses: actions/checkout@v4
41
+ - uses: actions/checkout@v7
42
42
  with:
43
43
  fetch-depth: 0 # base commit'iyle karşılaştırmak için
44
44
  - name: Karmaşıklık bütçesi (değişen dosyalar; fonksiyon karmaşıklığı 15, fonksiyon 80, dosya 400 satır)
@@ -51,8 +51,8 @@ jobs:
51
51
  rls:
52
52
  runs-on: ubuntu-latest
53
53
  steps:
54
- - uses: actions/checkout@v4
55
- - uses: actions/setup-node@v4
54
+ - uses: actions/checkout@v7
55
+ - uses: actions/setup-node@v7
56
56
  if: hashFiles('supabase/config.toml') != ''
57
57
  with:
58
58
  node-version: 22
@@ -75,14 +75,14 @@ jobs:
75
75
  container:
76
76
  image: semgrep/semgrep
77
77
  steps:
78
- - uses: actions/checkout@v4
78
+ - uses: actions/checkout@v7
79
79
  - name: Statik güvenlik analizi (yüksek önemli bulgular CI'ı durdurur)
80
80
  run: semgrep scan --config p/default --config p/owasp-top-ten --severity ERROR --error
81
81
 
82
82
  kopya-kod:
83
83
  runs-on: ubuntu-latest
84
84
  steps:
85
- - uses: actions/checkout@v4
85
+ - uses: actions/checkout@v7
86
86
  - name: Kopya kod oranı (eşik %5)
87
87
  run: npx --yes jscpd@4 --threshold 5 --silent --ignore "**/node_modules/**,**/.next/**,**/dist/**,**/build/**,**/.venv/**,**/coverage/**,**/.expo/**" .
88
88
 
@@ -93,11 +93,11 @@ jobs:
93
93
  contents: read
94
94
  pull-requests: read
95
95
  steps:
96
- - uses: actions/checkout@v4
96
+ - uses: actions/checkout@v7
97
97
  with:
98
98
  fetch-depth: 0 # tüm geçmiş taranır
99
99
  # Kişisel hesapta ücretsiz; organizasyon deposunda GITLEAKS_LICENSE sırrı gerekir
100
- - uses: gitleaks/gitleaks-action@v2
100
+ - uses: gitleaks/gitleaks-action@v3
101
101
  env:
102
102
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
103
103
  # Token salt okunur: PR yorumu kapalı, sızıntı işi kırmızı yapar
@@ -32,7 +32,7 @@ jobs:
32
32
  runs-on: ubuntu-latest
33
33
  timeout-minutes: 30
34
34
  steps:
35
- - uses: actions/checkout@v4
35
+ - uses: actions/checkout@v7
36
36
  with:
37
37
  ref: ${{ github.event.workflow_run.head_branch }}
38
38
  - name: Başarısız adımların kaydı
@@ -28,7 +28,7 @@ jobs:
28
28
  runs-on: ubuntu-latest
29
29
  timeout-minutes: 20
30
30
  steps:
31
- - uses: actions/checkout@v4
31
+ - uses: actions/checkout@v7
32
32
  with:
33
33
  fetch-depth: 50
34
34
  - uses: anthropics/claude-code-action@v1
@@ -15,8 +15,8 @@ jobs:
15
15
  kontrol:
16
16
  runs-on: ubuntu-latest
17
17
  steps:
18
- - uses: actions/checkout@v4
19
- - uses: actions/setup-node@v4
18
+ - uses: actions/checkout@v7
19
+ - uses: actions/setup-node@v7
20
20
  with:
21
21
  node-version: 22
22
22
  cache: npm
@@ -37,8 +37,8 @@ jobs:
37
37
  # e2e:
38
38
  # runs-on: ubuntu-latest
39
39
  # steps:
40
- # - uses: actions/checkout@v4
41
- # - uses: actions/setup-node@v4
40
+ # - uses: actions/checkout@v7
41
+ # - uses: actions/setup-node@v7
42
42
  # with: { node-version: 22, cache: npm }
43
43
  # - run: npm ci
44
44
  # - run: npx playwright install --with-deps chromium
@@ -47,14 +47,14 @@ jobs:
47
47
  structure:
48
48
  runs-on: ubuntu-latest
49
49
  steps:
50
- - uses: actions/checkout@v4
50
+ - uses: actions/checkout@v7
51
51
  - name: Klasör yapısı (.claude/structure.json)
52
52
  run: node .claude/hooks/structure-guard.mjs --check
53
53
 
54
54
  karmasiklik:
55
55
  runs-on: ubuntu-latest
56
56
  steps:
57
- - uses: actions/checkout@v4
57
+ - uses: actions/checkout@v7
58
58
  with:
59
59
  fetch-depth: 0 # base commit'iyle karşılaştırmak için
60
60
  - name: Karmaşıklık bütçesi (değişen dosyalar; fonksiyon karmaşıklığı 15, fonksiyon 80, dosya 400 satır)
@@ -67,8 +67,8 @@ jobs:
67
67
  rls:
68
68
  runs-on: ubuntu-latest
69
69
  steps:
70
- - uses: actions/checkout@v4
71
- - uses: actions/setup-node@v4
70
+ - uses: actions/checkout@v7
71
+ - uses: actions/setup-node@v7
72
72
  if: hashFiles('supabase/config.toml') != ''
73
73
  with:
74
74
  node-version: 22
@@ -91,14 +91,14 @@ jobs:
91
91
  container:
92
92
  image: semgrep/semgrep
93
93
  steps:
94
- - uses: actions/checkout@v4
94
+ - uses: actions/checkout@v7
95
95
  - name: Statik güvenlik analizi (yüksek önemli bulgular CI'ı durdurur)
96
96
  run: semgrep scan --config p/default --config p/owasp-top-ten --severity ERROR --error
97
97
 
98
98
  kopya-kod:
99
99
  runs-on: ubuntu-latest
100
100
  steps:
101
- - uses: actions/checkout@v4
101
+ - uses: actions/checkout@v7
102
102
  - name: Kopya kod oranı (eşik %5)
103
103
  run: npx --yes jscpd@4 --threshold 5 --silent --ignore "**/node_modules/**,**/.next/**,**/dist/**,**/build/**,**/.venv/**,**/coverage/**,**/.expo/**" .
104
104
 
@@ -109,11 +109,11 @@ jobs:
109
109
  contents: read
110
110
  pull-requests: read
111
111
  steps:
112
- - uses: actions/checkout@v4
112
+ - uses: actions/checkout@v7
113
113
  with:
114
114
  fetch-depth: 0 # tüm geçmiş taranır
115
115
  # Kişisel hesapta ücretsiz; organizasyon deposunda GITLEAKS_LICENSE sırrı gerekir
116
- - uses: gitleaks/gitleaks-action@v2
116
+ - uses: gitleaks/gitleaks-action@v3
117
117
  env:
118
118
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
119
119
  # Token salt okunur: PR yorumu kapalı, sızıntı işi kırmızı yapar
@@ -32,7 +32,7 @@ jobs:
32
32
  runs-on: ubuntu-latest
33
33
  timeout-minutes: 30
34
34
  steps:
35
- - uses: actions/checkout@v4
35
+ - uses: actions/checkout@v7
36
36
  with:
37
37
  ref: ${{ github.event.workflow_run.head_branch }}
38
38
  - name: Başarısız adımların kaydı
@@ -28,7 +28,7 @@ jobs:
28
28
  runs-on: ubuntu-latest
29
29
  timeout-minutes: 20
30
30
  steps:
31
- - uses: actions/checkout@v4
31
+ - uses: actions/checkout@v7
32
32
  with:
33
33
  fetch-depth: 50
34
34
  - uses: anthropics/claude-code-action@v1
@@ -23,8 +23,8 @@ jobs:
23
23
  runs-on: ubuntu-latest
24
24
  timeout-minutes: 10
25
25
  steps:
26
- - uses: actions/checkout@v4
27
- - uses: actions/setup-node@v4
26
+ - uses: actions/checkout@v7
27
+ - uses: actions/setup-node@v7
28
28
  with:
29
29
  node-version: 22
30
30
  cache: npm
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tillerhand",
3
- "version": "3.28.2",
3
+ "version": "3.28.4",
4
4
  "description": "Claude Code, Codex ve Antigravity için Türkçe vibe coding kiti: kurallar, komutlar, korumalar ve proje şablonları.",
5
5
  "license": "MIT",
6
6
  "type": "module",