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.
- package/.claude/agents/board-chair.md +20 -20
- package/.claude/agents/code-reviewer.md +20 -20
- package/.claude/agents/council-advisor.md +14 -14
- package/.claude/agents/security-auditor.md +30 -30
- package/.claude/agents/test-writer.md +22 -22
- package/.claude/board/board-ai.md +25 -25
- package/.claude/board/board-api.md +25 -25
- package/.claude/board/board-architect.md +28 -28
- package/.claude/board/board-devops.md +25 -25
- package/.claude/board/board-mobile.md +25 -25
- package/.claude/board/board-performance.md +24 -24
- package/.claude/board/board-privacy.md +25 -25
- package/.claude/board/board-product.md +26 -26
- package/.claude/board/board-qa.md +28 -28
- package/.claude/board/board-ux.md +26 -26
- package/.claude/board/council.md +76 -76
- package/.claude/board/rules.md +61 -61
- package/.claude/claude-security-guidance.md +10 -10
- package/.claude/commands/adopt.md +70 -69
- package/.claude/commands/ask-mode.md +9 -9
- package/.claude/commands/board.md +15 -15
- package/.claude/commands/build.md +47 -47
- package/.claude/commands/dashboard.md +17 -17
- package/.claude/commands/design.md +31 -31
- package/.claude/commands/findings-all.md +14 -14
- package/.claude/commands/findings-business.md +7 -7
- package/.claude/commands/findings-legal.md +7 -7
- package/.claude/commands/findings-perf.md +7 -7
- package/.claude/commands/findings-security.md +9 -9
- package/.claude/commands/findings-tech.md +7 -7
- package/.claude/commands/findings-ux.md +7 -7
- package/.claude/commands/fix-bug.md +15 -15
- package/.claude/commands/freeze.md +8 -8
- package/.claude/commands/handoff.md +38 -38
- package/.claude/commands/kit-update.md +17 -14
- package/.claude/commands/language.md +13 -0
- package/.claude/commands/maintain.md +19 -19
- package/.claude/commands/plan-task.md +32 -32
- package/.claude/commands/qa.md +17 -17
- package/.claude/commands/release.md +40 -40
- package/.claude/commands/research.md +31 -31
- package/.claude/commands/retro.md +32 -32
- package/.claude/commands/review-changes.md +15 -15
- package/.claude/commands/rollback.md +24 -24
- package/.claude/commands/start.md +116 -113
- package/.claude/commands/tools.md +11 -11
- package/.claude/commands/user-feedback.md +11 -11
- package/.claude/commands/wrap-up.md +18 -18
- package/.claude/findings/lenses/business.md +24 -24
- package/.claude/findings/lenses/legal.md +29 -29
- package/.claude/findings/lenses/perf.md +19 -19
- package/.claude/findings/lenses/security.md +30 -30
- package/.claude/findings/lenses/tech.md +23 -23
- package/.claude/findings/lenses/ux.md +19 -19
- package/.claude/findings/protocol.md +54 -54
- package/.claude/findings/report-template.md +30 -30
- package/.claude/hooks/budget.mjs +7 -7
- package/.claude/hooks/checkpoint.mjs +12 -12
- package/.claude/hooks/commit-gate.mjs +38 -37
- package/.claude/hooks/cost.mjs +2 -2
- package/.claude/hooks/council.mjs +3 -3
- package/.claude/hooks/dashboard-data.mjs +3 -2
- package/.claude/hooks/dashboard.mjs +164 -149
- package/.claude/hooks/destructive-guard.mjs +74 -64
- package/.claude/hooks/edit-rounds.mjs +3 -3
- package/.claude/hooks/flow.mjs +10 -10
- package/.claude/hooks/freeze-guard.mjs +27 -23
- package/.claude/hooks/gate.mjs +25 -25
- package/.claude/hooks/guard-secrets.mjs +11 -11
- package/.claude/hooks/lang.mjs +114 -0
- package/.claude/hooks/messages.mjs +495 -0
- package/.claude/hooks/models.mjs +14 -11
- package/.claude/hooks/notify.mjs +3 -2
- package/.claude/hooks/package-gate.mjs +17 -15
- package/.claude/hooks/plugins-sync.mjs +9 -9
- package/.claude/hooks/prefs.mjs +19 -19
- package/.claude/hooks/preview.mjs +11 -11
- package/.claude/hooks/progress.mjs +14 -14
- package/.claude/hooks/qa-report.mjs +11 -10
- package/.claude/hooks/reminder.mjs +6 -3
- package/.claude/hooks/session-start.mjs +23 -17
- package/.claude/hooks/shared.mjs +1 -1
- package/.claude/hooks/status-read.mjs +5 -4
- package/.claude/hooks/statusline.mjs +14 -11
- package/.claude/hooks/structure-guard.mjs +9 -9
- package/.claude/hooks/test-guard.mjs +12 -12
- package/.claude/hooks/tools.mjs +28 -29
- package/.claude/hooks/usage.mjs +18 -15
- package/.claude/output-styles/anlatici.md +28 -28
- package/.claude/security-patterns.json +3 -3
- package/.claude/settings.json +2 -0
- package/.claude/skills/logo-design/SKILL.md +42 -42
- package/.claude/skills/motion-video/SKILL.md +52 -52
- package/.claude/skills/source-research/SKILL.md +35 -35
- package/.claude/skills/ui-motion/SKILL.md +38 -38
- package/.github/workflows/kit-tests.yml +7 -7
- package/.github/workflows/npm-publish.yml +16 -16
- package/AGENTS.md +56 -56
- package/CHANGELOG.md +7 -7
- package/CLAUDE.md +5 -5
- package/README.md +199 -172
- package/README.tr.md +292 -0
- package/docs/architecture/overview.md +31 -31
- package/docs/architecture/stack.md +2 -2
- package/docs/archive/README.md +4 -4
- package/docs/decisions/adr-template.md +14 -14
- package/docs/decisions/log.md +10 -10
- package/docs/findings/README.md +13 -13
- package/docs/findings/config.md +13 -13
- package/docs/legal/privacy-kvkk.md +1 -1
- package/docs/operations/accounts.md +25 -25
- package/docs/operations/deploy-setup.md +64 -64
- package/docs/operations/feature-flags.md +17 -17
- package/docs/operations/maintenance.md +48 -48
- package/docs/operations/release-checklist.md +61 -61
- package/docs/operations/spend-alarms.md +28 -28
- package/docs/product/feedback.md +9 -8
- package/docs/product/glossary.md +16 -16
- package/docs/product/launch.md +28 -28
- package/docs/product/prd.md +43 -42
- package/docs/product/roadmap.md +31 -30
- package/docs/product/specs/_template.md +13 -12
- package/docs/product/unit-economics.md +23 -22
- package/docs/quality/metrics.md +14 -14
- package/docs/quality/retros.md +11 -11
- package/docs/quality/test-plan.md +48 -48
- package/docs/security/checklist.md +57 -57
- package/docs/workflow/board.md +7 -7
- package/docs/workflow/cost-log.md +4 -4
- package/docs/workflow/decision-protocol.md +70 -70
- package/docs/workflow/learning.md +4 -4
- package/docs/workflow/mcp-catalog.md +31 -31
- package/docs/workflow/models.md +35 -35
- package/docs/workflow/progress.md +7 -7
- package/docs/workflow/skills.md +108 -108
- package/docs/workflow/usage-limits.md +62 -62
- package/kit/CHANGELOG.md +876 -841
- package/kit/VERSION +1 -1
- package/kit/guide.html +713 -477
- package/kit/guide.tr.html +1328 -0
- package/kit/kit.mjs +56 -54
- package/kit/project/README.md +29 -29
- package/kit/project/gitignore +12 -12
- package/kit/templates/addons/ai/.env.example.append +5 -5
- package/kit/templates/addons/ai/ai/evals/README.md +11 -11
- package/kit/templates/addons/ai/ai/evals/cases.jsonl +2 -2
- package/kit/templates/addons/ai/ai/prompts/README.md +8 -8
- package/kit/templates/addons/ai/docs/ai/guide.md +56 -56
- package/kit/templates/backend/.claude/hooks/format.mjs +1 -1
- package/kit/templates/backend/.claude/structure.json +1 -1
- package/kit/templates/backend/.env.example +6 -6
- package/kit/templates/backend/.github/dependabot.yml +1 -1
- package/kit/templates/backend/.github/workflows/ci.yml +13 -13
- package/kit/templates/backend/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/backend/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/backend/.github/workflows/live-monitoring.yml +14 -14
- package/kit/templates/backend/.pre-commit-config.yaml +3 -3
- package/kit/templates/backend/docs/architecture/stack.md +98 -98
- package/kit/templates/backend/docs/architecture/structure.md +34 -34
- package/kit/templates/mobile/.claude/structure.json +1 -1
- package/kit/templates/mobile/.env.example +6 -6
- package/kit/templates/mobile/.github/dependabot.yml +2 -2
- package/kit/templates/mobile/.github/workflows/ci.yml +18 -18
- package/kit/templates/mobile/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/mobile/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/mobile/.gitignore.append +2 -2
- package/kit/templates/mobile/docs/architecture/stack.md +113 -113
- package/kit/templates/mobile/docs/architecture/structure.md +33 -33
- package/kit/templates/mobile/docs/design/design-guide.md +37 -37
- package/kit/templates/mobile/tests/security/rls.mjs +22 -22
- package/kit/templates/web-saas/.claude/structure.json +1 -1
- package/kit/templates/web-saas/.env.example +11 -11
- package/kit/templates/web-saas/.github/dependabot.yml +3 -3
- package/kit/templates/web-saas/.github/workflows/ci.yml +20 -20
- package/kit/templates/web-saas/.github/workflows/claude-ci-fix.yml +19 -19
- package/kit/templates/web-saas/.github/workflows/claude-maintenance.yml +18 -18
- package/kit/templates/web-saas/.github/workflows/live-monitoring.yml +12 -12
- package/kit/templates/web-saas/docs/architecture/stack.md +116 -116
- package/kit/templates/web-saas/docs/architecture/structure.md +44 -44
- package/kit/templates/web-saas/docs/design/design-guide.md +38 -38
- package/kit/templates/web-saas/tests/live/smoke.spec.ts +4 -4
- package/kit/templates/web-saas/tests/security/rls.mjs +22 -22
- package/kit/tools/codex/.codex/hooks.json +1 -1
- package/package.json +2 -2
- package/README.en.md +0 -267
package/kit/CHANGELOG.md
CHANGED
|
@@ -1,1024 +1,1059 @@
|
|
|
1
|
-
# Kit
|
|
1
|
+
# Kit changelog
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
"
|
|
3
|
+
The kit version is in `kit/VERSION`. To update a project, run `/kit-update` in it.
|
|
4
|
+
Items with an "Adapt by hand" note concern files owned by the project; the update does not touch them.
|
|
5
|
+
|
|
6
|
+
## [3.47.0] - 2026-10-28
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
- **The whole kit is written in English.** Hook messages the AI reads are English. Text you see directly (dashboard, status line, notifications, permission dialogs) comes in the conversation language you picked with `/start`, `/adopt` or `/language`. Document and project templates, the installer, CI workflows, the eval harness and these release notes are English too. Board and council members now write `MEMBER:`, `VERDICT:` and `FINDINGS:`.
|
|
10
|
+
- **README and guide.** `README.md` is English and opens by default on GitHub; the Turkish version is `README.tr.md`. The guide on GitHub Pages is English; the Turkish guide is `guide.tr.html`, linked from the top right.
|
|
11
|
+
- Release notes mark manual steps with **"Adapt by hand"**.
|
|
12
|
+
- The optional Turkey add-on and the KVKK privacy text stay Turkish.
|
|
13
|
+
- Labels and values that hooks read from your project files (`progress.md` labels, board and decision log fields, verdicts such as `ONAY`/`RET`, arguments such as `/handoff devral`) are unchanged, so existing projects keep working. They move to English in a later release, with an automatic migration in `/kit-update`.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
- Stack templates keep the exact `## Seçilen teknolojiler` heading the dashboard reads.
|
|
17
|
+
- CI: a test no longer depends on a `.claude/state` folder that only exists in a developer's working copy.
|
|
18
|
+
|
|
19
|
+
## [3.46.0] - 2026-10-27
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
- **Agents, board, findings reports and skills are in English.** `.claude/agents/`, `.claude/board/`, `.claude/findings/`, `.claude/skills/` and the narrator mode (`anlatici`) were translated to English. The format the board and council write (`ÜYE:`, `KARAR:`, `Görüş A`, `OYLAR:`, `DOĞRU`/`YANLIŞ`/`ABARTILI`) and the fields of the findings report template stay Turkish for now, because tools read them. Narrator mode now explains in the conversation language instead of plain Turkish.
|
|
23
|
+
|
|
24
|
+
## [3.45.0] - 2026-10-27
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- **Commands and core rules are in English.** All commands under `.claude/commands/`, plus `AGENTS.md` and `CLAUDE.md`, were translated to English. The AI reads them every session, so the same content costs fewer tokens. The language it talks to you in does not change: it speaks the language you chose in `/start`. Labels that tools read and command arguments (`## Komutlar`, `**Aktif faz:**`, `/handoff devral`, board verdicts) stay Turkish for now; they will change in one go in later releases.
|
|
28
|
+
- **Adapt by hand:** `AGENTS.md` and `CLAUDE.md` in your project belong to the project; the update does not touch them. For the English version, take the kit's new `AGENTS.md` as `.kit-new` and move over the sections you filled in (project name, commands, learned rules). Do not change the `## Komutlar` heading: the commit gate reads the commands from it.
|
|
29
|
+
|
|
30
|
+
## [3.44.0] - 2026-10-27
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
- **You choose the conversation language.** `/start` and `/adopt` ask first, in English: Turkish / English / Other. The chosen language is written to `.kit.json` → `lang`; from then on questions, answers, the status block and document texts are in that language. The AI is reminded of the language at every session start and every message.
|
|
34
|
+
- **Languages other than Turkish and English.** The AI translates the texts the hooks show you directly once, when a language is chosen (`.claude/i18n/<kod>.json`); text without a translation shows in English. `node .claude/hooks/lang.mjs --check` lists what is missing.
|
|
35
|
+
- **`/language`**: changes the language later and refreshes the translation and the dashboard. Documents already written are not translated automatically; the command asks.
|
|
36
|
+
|
|
37
|
+
### Changed
|
|
38
|
+
- **The dashboard is not generated before a language is chosen.** In a project that is not set up, `dashboard.html` is not written until `/start` asks for the language. The dashboard texts will move to the chosen language in later releases.
|
|
39
|
+
- **Old projects stay Turkish.** Projects without a `lang` field count as Turkish; `/kit-update` asks for the language once. A project installed directly with `kit.mjs install`, without `/start`, also counts as Turkish; choose the language with `/language`.
|
|
5
40
|
|
|
6
41
|
## [3.43.0] - 2026-10-27
|
|
7
42
|
|
|
8
|
-
###
|
|
9
|
-
- **
|
|
43
|
+
### Added
|
|
44
|
+
- **The commit gate checks where a test file came from.** When `test-writer` writes a test file with Write/Edit, a digest of the content is recorded (`.claude/state/test-writer.json`). If a test file entering a commit does not match this record, the commit stops: a test written with `git apply`, `patch`, a script or the shell no longer passes even with board approval. If the user made the change themselves, use `--skip` for that commit. A partially staged test file (`git apply --cached`, `skip-worktree`) always stops. Non-code files in the test folder (snapshots, images, fixtures) are not checked; the protections that ask before deleting still apply to deleted test files. Claude Code only (the agent identity exists only there).
|
|
10
45
|
|
|
11
46
|
## [3.42.1] - 2026-10-27
|
|
12
47
|
|
|
13
|
-
###
|
|
14
|
-
- **
|
|
48
|
+
### Fixed
|
|
49
|
+
- **Two path leaks in the test separation were closed.** Paths containing `..`, such as `node_modules/../tests/a.test.ts`, are now normalized and counted as test paths; a write to a nested path that does not exist yet under a link to the test folder is also caught.
|
|
15
50
|
|
|
16
51
|
## [3.42.0] - 2026-10-27
|
|
17
52
|
|
|
18
|
-
###
|
|
19
|
-
- **
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
22
|
-
- **Plugin
|
|
23
|
-
- **
|
|
53
|
+
### Added
|
|
54
|
+
- **A separate agent writes the tests, not the one who writes the code.** The new `test-writer` agent writes acceptance and adversarial tests before the code, looking only at the acceptance criteria, the spec and the external interface; it does not see the implementation plan. When the same agent writes code and test, the test takes the shape of the code; this separation prevents that.
|
|
55
|
+
- **Only `test-writer` can write to a test file.** In Claude Code, if the main session or another agent tries to write to a test file with a file tool or the shell, the test protection blocks it (test config files are still asked about as before). Codex and Antigravity do not report an agent identity, so the rule stays in the text there.
|
|
56
|
+
- **Bypass routes in the test protection were closed.** Writes that Windows resolves to the same file (trailing dot or space, `::$DATA`), short names and links to the test folder are checked by their real path. Writing a test with `touch`, `ln`, `dd`, `curl -o`, `wget -O` in the shell is also blocked; inline scripts that name a test path (`node -e`, `python -c`, `bash -c`) are asked about. Test folders under `node_modules/` and `.git/` do not count.
|
|
57
|
+
- **Plugin directory details.** A display name, version, documentation and support link were added to the plugin.
|
|
58
|
+
- **Fifth role: test.** A test role was added to `docs/workflow/models.md`; its recommended model differs from the code role (code Sonnet, test Opus). `models.mjs` warns if code and test are set to the same model.
|
|
24
59
|
|
|
25
|
-
###
|
|
26
|
-
- **
|
|
27
|
-
- **`/build`
|
|
60
|
+
### Changed
|
|
61
|
+
- **Model questions at task start are one question per role.** Model and effort are asked together, on two screens: first plan, code, test; then review, docs. Adapt by hand: none.
|
|
62
|
+
- **`/build` steps:** 2b tests (`test-writer`), 2c code. In `/fix-bug` step 5, `test-writer` writes the red test.
|
|
28
63
|
|
|
29
64
|
## [3.41.1] - 2026-10-27
|
|
30
65
|
|
|
31
|
-
###
|
|
32
|
-
- **
|
|
33
|
-
- **Plugin
|
|
66
|
+
### Changed
|
|
67
|
+
- **Installation is explained with three options.** The README and guide describe the npm (recommended), Claude Code plugin and git routes separately, with when to pick each. The plugin route is also in the steps for beginners.
|
|
68
|
+
- **Plugin icon.** The logo mark was added as a square PNG for the plugin directory.
|
|
34
69
|
|
|
35
70
|
## [3.41.0] - 2026-10-27
|
|
36
71
|
|
|
37
|
-
###
|
|
38
|
-
- **
|
|
72
|
+
### Added
|
|
73
|
+
- **Copy buttons on the dashboard.** `dashboard.html` puts a button next to the next step and next to warnings that suggest a command; the command is copied to the clipboard and can be pasted into the Claude chat. For users who do not know what to type.
|
|
39
74
|
|
|
40
75
|
## [3.40.0] - 2026-10-27
|
|
41
76
|
|
|
42
|
-
###
|
|
43
|
-
- **Claude Code plugin
|
|
77
|
+
### Added
|
|
78
|
+
- **Install as a Claude Code plugin.** The repo is now a plugin marketplace: `/plugin marketplace add burakdogrul/TillerHand`, `/plugin install tillerhand@tillerhand`, then `/tillerhand:init`. The plugin carries only the setup skill; the kit is still copied into the project as files, and the protections and the permission list stay in the project. The plugin can be turned off after setup.
|
|
44
79
|
|
|
45
80
|
## [3.39.4] - 2026-10-27
|
|
46
81
|
|
|
47
|
-
###
|
|
48
|
-
- **
|
|
82
|
+
### Fixed
|
|
83
|
+
- **Turkey add-on: an iyzico payment id above 2^53 is rejected.** `iyziPaymentId` arrives as a JSON number; JavaScript rounds a number of this size, so an order could be queried with the wrong id. The Web SaaS signature check now accepts only safe integers; two checks were added to the adversarial test. Adapt by hand: `src/lib/payments/webhook-signature.ts` and `tests/security/payment-webhook.mjs` in the project.
|
|
49
84
|
|
|
50
|
-
###
|
|
51
|
-
- **`/wrap-up`
|
|
85
|
+
### Changed
|
|
86
|
+
- **`/wrap-up` writes the progress file with a script.** Date, active task, next step and the roadmap mark are written with `progress.mjs`; at the end `--check` verifies the label format.
|
|
52
87
|
|
|
53
88
|
## [3.39.3] - 2026-10-26
|
|
54
89
|
|
|
55
|
-
###
|
|
56
|
-
- **
|
|
90
|
+
### Fixed
|
|
91
|
+
- **Mobile catalog: direct StoreKit + Play Billing is not "no commission".** The store commission is still taken; the saving is only the RevenueCat fee.
|
|
57
92
|
|
|
58
|
-
###
|
|
59
|
-
- **
|
|
93
|
+
### Changed
|
|
94
|
+
- **Sourced prices in the mobile and backend catalogs.** RevenueCat (free up to 2,500 dollars of monthly tracked revenue, 1% above) and Railway (Hobby 5 dollars a month) were written with source and date.
|
|
60
95
|
|
|
61
96
|
## [3.39.2] - 2026-10-26
|
|
62
97
|
|
|
63
|
-
###
|
|
64
|
-
- **Web SaaS
|
|
98
|
+
### Changed
|
|
99
|
+
- **Hosting and email limits in the Web SaaS catalog are sourced.** The fact that Vercel's free Hobby plan is closed to commercial use, and the free limits of Cloudflare Workers and Resend, were written with source and date. The option description now says that Vercel Hobby will not be enough for a product that takes payments.
|
|
65
100
|
|
|
66
101
|
## [3.39.1] - 2026-10-26
|
|
67
102
|
|
|
68
|
-
###
|
|
69
|
-
- **
|
|
70
|
-
-
|
|
103
|
+
### Changed
|
|
104
|
+
- **First sourced claims in the Web SaaS technology catalog.** The Supabase and Clerk free tiers, Stripe's status in Turkey and the Plausible price were written with source and date; `/start` does not research them again for 90 days.
|
|
105
|
+
- Adapt by hand: In a project that is already set up, `docs/architecture/stack.md` belongs to the project and does not change with the update.
|
|
71
106
|
|
|
72
107
|
## [3.39.0] - 2026-10-26
|
|
73
108
|
|
|
74
|
-
###
|
|
75
|
-
- **`/start`
|
|
76
|
-
-
|
|
109
|
+
### Changed
|
|
110
|
+
- **`/start` verifies only what changed.** Technology decisions no longer get a separate research per decision. Price, free tier and limit claims in the options to be shown are gathered in one research round at the start of the step. A claim in the catalog whose source and date are newer than 90 days is not researched again; a verified claim is written to the project's `stack.md` with source and date.
|
|
111
|
+
- Adapt by hand: In a project that is already set up, the same note can be added to the intro paragraph of `docs/architecture/stack.md` → "Karar noktaları"; it is not required.
|
|
77
112
|
|
|
78
113
|
## [3.38.0] - 2026-10-26
|
|
79
114
|
|
|
80
|
-
###
|
|
81
|
-
- **
|
|
115
|
+
### Changed
|
|
116
|
+
- **The cost log line fills itself.** At task start, `/build` records the 5-hour percentage and the time with `progress.mjs --start`. At task end, `--cost "<iş>" <boyut>` writes the start, the end, the difference and the duration itself. The start is used once and does not leak into the next task. The desktop app has no status line, so the percentage is given with `--limit`.
|
|
82
117
|
|
|
83
118
|
## [3.37.1] - 2026-10-26
|
|
84
119
|
|
|
85
|
-
###
|
|
86
|
-
- **`/start`
|
|
120
|
+
### Changed
|
|
121
|
+
- **`/start` suggests `/clear` after heavy steps.** The results of the research, technology decisions, board and design direction steps are written to files; the next step reads them. Continuing in a clean session is cheaper, and `/start` resumes from where it stopped.
|
|
87
122
|
|
|
88
123
|
## [3.37.0] - 2026-10-26
|
|
89
124
|
|
|
90
|
-
###
|
|
91
|
-
- **
|
|
92
|
-
- **
|
|
125
|
+
### Changed
|
|
126
|
+
- **A subagent does not cold-start a second time.** If a code subagent or board member will look again after a fix, a new agent is not started; the same agent is continued with SendMessage and given only the fixed diff. It does not re-read the files.
|
|
127
|
+
- **The board prompt is in a cache-friendly order.** The part that is the same across members (meeting type, scope, acceptance criteria, gate output) is written first, and the member-specific part last.
|
|
93
128
|
|
|
94
129
|
## [3.36.0] - 2026-10-26
|
|
95
130
|
|
|
96
|
-
###
|
|
97
|
-
- **
|
|
98
|
-
- **
|
|
131
|
+
### Changed
|
|
132
|
+
- **Board members are picked from the changed files.** At task end, `flow.mjs` looks at the changed paths and suggests, by name, the members that are on the board: the one with the most matching files first, the number depending on task size and limit. If a path involves auth, payment, a webhook, file upload or a secret, `security-auditor` is added too. The path is a guess; if the change means something else, correct it against the member table.
|
|
133
|
+
- **A board member writes at most 5 findings.** Anything more is counted in one line ("diğer: N küçük bulgu").
|
|
99
134
|
|
|
100
135
|
## [3.35.0] - 2026-10-26
|
|
101
136
|
|
|
102
|
-
###
|
|
103
|
-
- **
|
|
104
|
-
- `--done G-012`
|
|
105
|
-
- `--cost "<iş>" <K|O|B> <başlangıç %> <bitiş %> <dk>`
|
|
106
|
-
- `--task`, `--did`, `--next` progress.md
|
|
107
|
-
- `--check`
|
|
108
|
-
- `/build`
|
|
137
|
+
### Changed
|
|
138
|
+
- **End-of-task document writing is done by a script.** The roadmap mark, the cost log line and the progress labels are mechanical work; they are no longer given to a subagent. The new `node .claude/hooks/progress.mjs` writes them in one command and spends no tokens:
|
|
139
|
+
- `--done G-012` marks the task in the roadmap.
|
|
140
|
+
- `--cost "<iş>" <K|O|B> <başlangıç %> <bitiş %> <dk>` adds a line to the cost log and computes the difference. If the window was renewed in between, the difference is written as `?`.
|
|
141
|
+
- `--task`, `--did`, `--next` update progress.md and set the last-updated date itself.
|
|
142
|
+
- `--check` verifies that the bold labels the status line and the dashboard read are intact.
|
|
143
|
+
- `/build` step 8 uses this. The permission line is added with `/kit-update`.
|
|
109
144
|
|
|
110
145
|
## [3.34.0] - 2026-10-26
|
|
111
146
|
|
|
112
|
-
###
|
|
113
|
-
- **
|
|
114
|
-
- 1-2
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
- `/build` (
|
|
118
|
-
-
|
|
147
|
+
### Added
|
|
148
|
+
- **Subagents only when they pay off.** A subagent cold-starts: it re-reads its prompt and the files. On a small task that costs more than it saves. The new `node .claude/hooks/flow.mjs` looks at the task size (file count), the context and the limit and tells you the flow; it spends no tokens:
|
|
149
|
+
- 1-2 files: code and docs work stays in the main session. 3 and above, or context above 50%: the code role goes to a subagent.
|
|
150
|
+
- At task end, the board has 1, 2 or 3 members + `code-reviewer` (plus `security-auditor` on a sensitive path). At a yellow limit the member count is halved; at red, a single member works in turn.
|
|
151
|
+
- If the context is above 50%, `/clear` is suggested first.
|
|
152
|
+
- `/build` (step 2a) and the board rules use this. The desktop app has no status line, so context and limit are passed with `--context` and `--limit`.
|
|
153
|
+
- The permission line is added with `/kit-update`.
|
|
119
154
|
|
|
120
155
|
## [3.33.0] - 2026-10-26
|
|
121
156
|
|
|
122
|
-
###
|
|
123
|
-
- **
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
157
|
+
### Changed
|
|
158
|
+
- **The main session context stays small.** Every turn re-reads the whole session context; every line that enters the context is paid for again in later turns.
|
|
159
|
+
- Independent questions of the same step are asked in one question round (at most 4).
|
|
160
|
+
- When the gate is red it shows the last 30 lines; the full longer output is written to `.claude/state/gate-log/<kontrol>.log` and read only if needed.
|
|
161
|
+
- Board members, `code-reviewer`, `security-auditor` and the code subagent give a report of at most ~15 lines, one line per finding.
|
|
162
|
+
- When a task finishes and the commit is made, `/build` suggests `/clear` (task = session); the new session continues from `progress.md`. In a large file, search first, then read only the lines needed.
|
|
128
163
|
|
|
129
164
|
## [3.32.1] - 2026-10-26
|
|
130
165
|
|
|
131
|
-
###
|
|
132
|
-
- **
|
|
166
|
+
### Fixed
|
|
167
|
+
- **A skipped review does not count as "reviewed".** In a commit made with `--skip`, `commit-gate.mjs --status` said "these changes were reviewed". Then when a file changed, the gate asked for only that file to be reviewed; the skipped files stayed unreviewed. Now `--status` says "review skipped, not reviewed"; if there is a change, the whole diff is reviewed.
|
|
133
168
|
|
|
134
169
|
## [3.32.0] - 2026-10-26
|
|
135
170
|
|
|
136
|
-
###
|
|
137
|
-
- **
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
-
|
|
141
|
-
-
|
|
171
|
+
### Changed
|
|
172
|
+
- **The same change is not reviewed twice.** The end-of-task board meeting is now the only full review of the change: the relevant members and `code-reviewer` (plus `security-auditor` on a sensitive path) look together. If the meeting approves and the gate is green, the commit gate opens for the same changes; the board does not meet again at the commit, and `/review-changes` is not suggested separately.
|
|
173
|
+
- If a file changes after approval, only those files are reviewed. The commit gate says which files changed since the last approval.
|
|
174
|
+
- New: `node .claude/hooks/commit-gate.mjs --status` shows whether these changes were reviewed, the state of the gate and the files changed since the last approval. `/review-changes` and the commit meeting look at it first.
|
|
175
|
+
- If no board is set up, the flow is the same: `/review-changes` is suggested at task end.
|
|
176
|
+
- The permission line is added with `/kit-update`.
|
|
142
177
|
|
|
143
178
|
## [3.31.2] - 2026-10-26
|
|
144
179
|
|
|
145
|
-
###
|
|
146
|
-
- **Codex
|
|
180
|
+
### Fixed
|
|
181
|
+
- **Codex and Antigravity: the protection cannot be bypassed through the commit message.** In 3.31.1 a plain commit message was not counted as a command. PowerShell also counts smart quotes (`“ ” ‘ ’ „`) as string boundaries, so a command hidden behind a message with such quotes could pass without approval. Now the message is emptied only if it stays a single string the same way in bash, PowerShell and cmd: a message containing a smart quote, `\`, `$`, a backtick, a line break or `; & | < > ^ % !` is still checked.
|
|
147
182
|
|
|
148
183
|
## [3.31.1] - 2026-10-26
|
|
149
184
|
|
|
150
|
-
###
|
|
151
|
-
- **
|
|
152
|
-
- **Codex
|
|
153
|
-
- **Codex
|
|
185
|
+
### Fixed
|
|
186
|
+
- **Dashboard dates no longer shift with the time zone.** Date-only lines (`2026-10-26`) in the decision, board and maintenance logs were counted as UTC midnight; west of UTC they showed the previous day. They are now read as the local day. The day labels of the commit chart were fixed the same way.
|
|
187
|
+
- **Codex and Antigravity: `--skip` in a commit message does not ask for approval.** A message like `git commit -m "… commit-gate.mjs --skip …"` fell into approval for nothing, as "the commit gate is being skipped". The plain-text message of a commit that runs alone (or after `git add … &&`) no longer counts as a command. A message containing `$(…)`, a backtick or `\`, and a commit chained with another command, are still asked about; a real `--skip` call is still asked about in every spelling.
|
|
188
|
+
- **Codex and Antigravity: it also asks when another argument sits between `commit-gate.mjs` and `--skip`** (such as `commit-gate.mjs -m '--skip' x`). Before, this spelling passed without approval; the gate in Claude Code already asked.
|
|
154
189
|
|
|
155
190
|
## [3.31.0] - 2026-10-26
|
|
156
191
|
|
|
157
|
-
###
|
|
158
|
-
- **
|
|
159
|
-
- `/build`
|
|
160
|
-
-
|
|
161
|
-
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
- `/findings-all`
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
- Codex
|
|
169
|
-
-
|
|
192
|
+
### Added
|
|
193
|
+
- **Model and effort per role.** The work was split into four roles: planning and architecture, writing code, review and audit, docs and research. You choose the model and effort of each role (`docs/workflow/models.md`).
|
|
194
|
+
- At the start of each task `/build` asks on two screens: first the model of the four roles (Opus / Sonnet / Haiku), then the effort (low / medium / high / extra high). Recommended: planning Opus high, code Sonnet high, review Sonnet high, docs Haiku high. `/start`, `/adopt` and `/release` ask the same question when they begin.
|
|
195
|
+
- The choice is written to `.claude/state/models.json` with `node .claude/hooks/models.mjs --set …` (it does not go into git); `--show` shows the current choice.
|
|
196
|
+
- Acceptance tests and code go to a subagent running on the chosen code model; the main session reads the diff and runs the gate itself. The board, `code-reviewer` and `security-auditor` work with the review role, and the end-of-task roadmap, cost log and progress writing with the docs role.
|
|
197
|
+
- The code subagent cannot ask you questions: it stops at a decision point, the main session asks the question and writes it to the log.
|
|
198
|
+
- Planning stays in the main session. The kit cannot change the session model; if your chosen plan model or effort differs, the AI suggests `/model <ad>` and `/effort <düzey>`.
|
|
199
|
+
- If you closed the `maliyet` topic in question mode, no question comes and the last choice stays valid.
|
|
200
|
+
- `/findings-all` reports work with the review role, and the `/research` deep research with the docs role.
|
|
201
|
+
- The model is no longer asked separately when the board is set up; the "change model" option in `/board setup` was removed. The commit board check runs at every commit, so it stays on `haiku` and low effort; the decision council deliberately compares different models, so the role choice does not apply to it.
|
|
202
|
+
- Dashboard: the "Limit ve maliyet" tab shows the current model and effort choice of the roles.
|
|
203
|
+
- The Codex and Antigravity equivalents are in `docs/workflow/models.md`, with source and date.
|
|
204
|
+
- Adapt by hand: AGENTS.md belongs to the project. A model item was added to the "Codex ve Antigravity'de" section and a `docs/workflow/models.md` row to the "Gerektiğinde oku" table; take them from the `.kit-new` file if you want. The permission lines are added with `/kit-update`.
|
|
170
205
|
|
|
171
206
|
## [3.30.0] - 2026-10-26
|
|
172
207
|
|
|
173
|
-
###
|
|
174
|
-
- **
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
-
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
208
|
+
### Added
|
|
209
|
+
- **Personal preference memory.** The kit learns how you want to work: conversation style, question frequency, report format, code style, things to avoid.
|
|
210
|
+
- When you correct a behavior or state a preference, the AI takes a note. At task end (`/build`) and session end (`/wrap-up`) the notes are asked about with a multi-select, "save as a preference?". Nothing you do not approve is written.
|
|
211
|
+
- Preferences live in a single file: `~/.vibe-kit/tercihler.md`. It applies to all your projects, is loaded at every session start (Claude Code, Codex, Antigravity) and does not go into git.
|
|
212
|
+
- Writing is done only with `node .claude/hooks/prefs.mjs --add <kategori> "<tercih>"` and is asked about each time. List: `--list`, remove: `--remove <no>`.
|
|
213
|
+
- A preference that looks like a secret is rejected. At most 40 preferences are kept. A project rule comes before a personal preference; project-specific rules still go to "Öğrenilen kurallar".
|
|
214
|
+
- Any program on the machine can write the file. So the same checks apply when reading: a line that is long or contains a secret or a control character is not loaded, and a file bigger than 64 KB is not read. Preferences enter the session as a "style preference"; they cannot change permissions, security rules or command rules.
|
|
215
|
+
- Manual editing is supported; case and Turkish letter differences in headings do not matter. If a line cannot be read, the script does not rewrite the file; it stops so as not to delete the line, and shows the line.
|
|
216
|
+
- Adapt by hand: AGENTS.md belongs to the project. The new rule is item "9. Kullanıcıyı tanı" (9. Know the user); if you want to add it to your project's AGENTS.md, take it from the `.kit-new` file. The permission lines are added with `/kit-update`.
|
|
182
217
|
|
|
183
218
|
## [3.29.0] - 2026-10-26
|
|
184
219
|
|
|
185
|
-
###
|
|
186
|
-
- **
|
|
187
|
-
- `C:\Users\<ad
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
- AGENTS.md (
|
|
220
|
+
### Added
|
|
221
|
+
- **"Mutlak yol" (absolute path) check in the deterministic gate.** If an added line contains the full path of this machine's project folder or home folder, the gate turns red; the path may be written plain, with backslashes or escaped. Such a path does not work on another machine. The gate lists the lines and says how to derive the path.
|
|
222
|
+
- General user-folder patterns such as `C:\Users\<ad>` and `/home/<ad>/` are only listed as a note and do not block the commit. So container paths such as `/home/node/app` and routes such as `/users/42` cause no problem.
|
|
223
|
+
- Only added lines are scanned; new files are scanned from start to end. Files that do not go into git are not looked at.
|
|
224
|
+
- A deliberate example (an example path in a document, a test input) passes by writing `kit:yol-izinli` on the line or the line above. The line-above option is for files that cannot take inline comments, such as Dockerfile and JSON.
|
|
225
|
+
- The same rule was added to AGENTS.md (Never) and to the stack documents of the three types (Common AI mistakes).
|
|
191
226
|
|
|
192
|
-
###
|
|
193
|
-
- **
|
|
194
|
-
-
|
|
195
|
-
-
|
|
227
|
+
### Fixed
|
|
228
|
+
- **When the kit was installed from a local clone outside the project, the full path of the kit folder on this machine was written to `.kit.json`.** Since `.kit.json` is committed, someone opening the project on another machine saw a path that does not exist. The path is now in the non-git file `.kit.local.json`; the `.kit.json` → `kit` field says `local`. Old records are moved automatically during `/kit-update`. If the recorded path does not exist on this machine (it was written on another), it is not moved, only removed. If the file is missing, `/start` and `/adopt` ask for the kit folder or use the npm package.
|
|
229
|
+
- The version number in the guide footer had been left stale. The version in the guide and the README badges is now checked by a test.
|
|
230
|
+
- Adapt by hand: `docs/architecture/stack.md` belongs to the project. The new item is in the "Sık yapılan AI hataları" (Common AI mistakes) section; add it to your own stack document if you want. The `.kit.local.json` line is added to `.gitignore` during the update.
|
|
196
231
|
|
|
197
232
|
## [3.28.6] - 2026-10-26
|
|
198
233
|
|
|
199
|
-
###
|
|
200
|
-
- **CI
|
|
201
|
-
-
|
|
202
|
-
- Dependabot
|
|
203
|
-
-
|
|
204
|
-
- `claude-code-action` commit SHA
|
|
205
|
-
-
|
|
206
|
-
-
|
|
207
|
-
- **
|
|
208
|
-
- **
|
|
209
|
-
- **
|
|
210
|
-
-
|
|
211
|
-
-
|
|
212
|
-
- `-`
|
|
213
|
-
-
|
|
214
|
-
- `constructor:`
|
|
215
|
-
- `dashboard.html`
|
|
216
|
-
-
|
|
217
|
-
- **`/qa`
|
|
218
|
-
-
|
|
234
|
+
### Fixed
|
|
235
|
+
- **CI auto-repair (templates) works more narrowly:**
|
|
236
|
+
- It makes the fix on the commit CI saw as red. If the branch moved in the meantime, the push is rejected; so commits that have not passed CI do not reach the agent with write access.
|
|
237
|
+
- It does not run on Dependabot PRs.
|
|
238
|
+
- If the security jobs (Semgrep, secret scan, RLS) are red, it does not try to repair; these need human review.
|
|
239
|
+
- `claude-code-action` is pinned to a commit SHA.
|
|
240
|
+
- The `git log` and `gh run list` permissions of the weekly maintenance agent were narrowed; outside text such as PR titles does not go to the agent.
|
|
241
|
+
- **No `${{ }}` expression is left inside `run:` in the template workflows** (in the backend live monitoring, `LIVE_URL` was embedded in the shell code). Values are passed as environment variables; a test checks this.
|
|
242
|
+
- **Council count:** A ranking with a missing or unknown letter (`1. Görüş D` on a single line) is now counted as invalid; before, it gave that opinion the best average with the vote of the single person who made the ranking. A finding that got no vote is written as "no vote", not "accepted"; if it is KRİTİK, the user is asked.
|
|
243
|
+
- **Status line:** Control characters (ESC sequences) in `progress.md` no longer pass to the terminal. With these characters it was possible to write to the dashboard or to print fake text over the line.
|
|
244
|
+
- **Dashboard:**
|
|
245
|
+
- GitHub links in the cache can only be `https`; a cache dated in the future is counted as stale.
|
|
246
|
+
- The text `<skipped` in the output of a failed test no longer makes the test look skipped.
|
|
247
|
+
- A prod ref written as `-` or `yok` no longer produces a false KRİTİK warning.
|
|
248
|
+
- A folder with a test or report name no longer crashes the dashboard and the gate.
|
|
249
|
+
- A commit type such as `constructor:` does not break the count.
|
|
250
|
+
- `dashboard.html` is not written through if it is a link.
|
|
251
|
+
- That the dashboard escapes the repo texts is now checked by a test.
|
|
252
|
+
- **`/qa` evidence:** A `shots/<id>.png` link does not copy a local file under `.previews/`.
|
|
253
|
+
- Adapt by hand: If you changed `claude-ci-fix.yml`, `claude-maintenance.yml` or `live-monitoring.yml` in your project, `/kit-update` leaves the new version as `.kit-new`.
|
|
219
254
|
|
|
220
255
|
## [3.28.5] - 2026-10-26
|
|
221
256
|
|
|
222
|
-
###
|
|
223
|
-
- **
|
|
224
|
-
-
|
|
257
|
+
### Fixed
|
|
258
|
+
- **The CI and live monitoring jobs of the backend template never started in 3.28.4.** There is no tag `astral-sh/setup-uv@v10`; only full version tags exist. The action is now pinned to the commit SHA of v10.3.2. Every `uses:` line in the kit and the templates is tested against a list of references verified to really resolve.
|
|
259
|
+
- Adapt by hand: In a backend project updated with 3.28.4, if you changed `.github/workflows/ci.yml` and `live-monitoring.yml`, take the `setup-uv` line from the `.kit-new` file.
|
|
225
260
|
|
|
226
261
|
## [3.28.4] - 2026-10-26
|
|
227
262
|
|
|
228
|
-
###
|
|
229
|
-
- **GitHub Actions
|
|
230
|
-
-
|
|
263
|
+
### Changed
|
|
264
|
+
- **GitHub Actions versions moved to Node 24** (GitHub was forcing actions that run on Node 20 to run on Node 24 and gave a warning): `actions/checkout` v7, `actions/setup-node` v7, `gitleaks/gitleaks-action` v3, `astral-sh/setup-uv` v10. The CI, maintenance, live monitoring and payment webhook workflows in the templates were updated. The kit's own npm publish workflow stays pinned to a commit SHA and turns off the package cache (against cache poisoning).
|
|
265
|
+
- Adapt by hand: If you changed the workflow in your project yourself, `/kit-update` leaves the new version as `.kit-new`; take the version lines from there.
|
|
231
266
|
|
|
232
|
-
###
|
|
233
|
-
- **Commit alias
|
|
267
|
+
### Fixed
|
|
268
|
+
- **Commit alias detection was widened:** it is case-insensitive; `!` shell aliases that call another alias or contain `commit` in their value also count as commits. An alias defined in the same command (`git -c alias.x=…`, `git config alias.x …`, `GIT_CONFIG_*`) could not be read beforehand, so the command is stopped.
|
|
234
269
|
|
|
235
270
|
## [3.28.3] - 2026-10-26
|
|
236
271
|
|
|
237
|
-
###
|
|
238
|
-
- **
|
|
239
|
-
- **
|
|
240
|
-
- **
|
|
241
|
-
-
|
|
272
|
+
### Fixed
|
|
273
|
+
- **The commit gate also sees `git.exe commit`, git written with a full path, and git aliases that open to a commit** (`[alias] ci = commit`, `!git commit`, `git -c alias.x=commit x`). These did not hit the gate before.
|
|
274
|
+
- **A commit with `commit-gate.mjs --skip` in its message could pass the board and gate check without a question.** Such a commit now goes through the normal commit check.
|
|
275
|
+
- **The broad `tools.mjs` permission left from 3.10.0 (`Bash(node .claude/hooks/tools.mjs:*)`) is removed by `/kit-update`.** This permission also freed the `--enable` and `--commands` commands, which must be asked about.
|
|
276
|
+
- Adapt by hand: none.
|
|
242
277
|
|
|
243
278
|
## [3.28.2] - 2026-10-26
|
|
244
279
|
|
|
245
|
-
###
|
|
246
|
-
-
|
|
247
|
-
- **
|
|
248
|
-
-
|
|
280
|
+
### Fixed
|
|
281
|
+
- **Content staged on a file marked `skip-worktree` or `assume-unchanged` could get past the commit approval.** These marks hide the difference between the stage and the disk from `git diff`. So the new signature in 3.28.1 could not see unapproved content either. The staged content of marked files now always enters the signature.
|
|
282
|
+
- **The commit gate is faster on every Bash command.** The gate module is loaded only on the gate command approval.
|
|
283
|
+
- Adapt by hand: none.
|
|
249
284
|
|
|
250
285
|
## [3.28.1] - 2026-10-26
|
|
251
286
|
|
|
252
|
-
###
|
|
253
|
-
- **
|
|
254
|
-
-
|
|
255
|
-
- **
|
|
256
|
-
- **3.28.0
|
|
257
|
-
- npm
|
|
258
|
-
- `tillerhand`
|
|
259
|
-
-
|
|
260
|
-
-
|
|
261
|
-
-
|
|
287
|
+
### Fixed
|
|
288
|
+
- **Staging approved changes with `git add` invalidated the commit gate and the board approval.** The change signature is now taken from the content of the files on disk; staging the same content does not change the signature. A file staged with content different from the disk (partial staging) shows up in the signature separately, because the commit takes the staged content.
|
|
289
|
+
- **`kit.mjs install` in the kit's clone folder deleted uncommitted work** (the `kit/` folder, `README.md`). If there is an uncommitted change, the install now stops before starting and lists the files.
|
|
290
|
+
- **Nine scripts found the project root from the folder they were run in** (checkpoint, budget, notification, plugin sync, reminder, structure guard, tools, limit). When Codex ran from a subfolder, for example `checkpoint.mjs --restore` restored only that folder but said "returned". All of them now find the root the same way.
|
|
291
|
+
- **Gaps left in the security fixes of 3.28.0:**
|
|
292
|
+
- An npm alias (`zod@npm:baska-paket`) hid the package actually installed. The package gate now checks the target package. This gap existed before 3.28.0 too.
|
|
293
|
+
- The `tillerhand` exemption and the exemption for a command installed in the project apply only to plain spelling. Spellings such as `tillerhand@npm:…` or `tsc@5` are checked.
|
|
294
|
+
- The exemption in the commit gate applies only to a standalone `node <yol> --approve <not>` command. A command with a chain, a subshell or `env -C` has no exemption.
|
|
295
|
+
- If an argument is passed to a protection script with `xargs`, a pipe or `<`, the user is asked.
|
|
296
|
+
- Adapt by hand: none.
|
|
262
297
|
|
|
263
298
|
## [3.28.0] - 2026-10-25
|
|
264
299
|
|
|
265
|
-
###
|
|
266
|
-
- **
|
|
267
|
-
- **
|
|
268
|
-
- **
|
|
269
|
-
- **
|
|
270
|
-
- **
|
|
271
|
-
|
|
272
|
-
###
|
|
273
|
-
- **Windows
|
|
274
|
-
- **
|
|
275
|
-
- **
|
|
276
|
-
- **
|
|
277
|
-
-
|
|
278
|
-
-
|
|
300
|
+
### Changed
|
|
301
|
+
- **Skipping the commit check is now a separate command: `commit-gate.mjs --skip "<neden>"`.** This command is asked about the user every time. `--approve` no longer accepts a note that starts with "atlandı" (skipped). Before, the hook looked for the word "atlandı" in the command text; when the word was written escaped, like `$'atland\xc4\xb1'`, the gate and the board could be skipped without a question.
|
|
302
|
+
- **Opening and closing the scope shield (`freeze-guard.mjs --plan-save`, `--plan-end`) is now asked about.** Both were free. The AI could close the plan and write to files not in the list, or save the plan again with a wider list. `/kit-update` removes the old permission lines and adds the new ones.
|
|
303
|
+
- **A protection script run through an indirect spelling is asked about.** If a script under `.claude/hooks` is called with `$VARIABLE`, `$(...)`, a backtick, `${...}` or `*` `?` (`commit-gate.mjs $S`, `commit-*.mjs`), the rules cannot see inside the command; so user approval is requested. `$CLAUDE_PROJECT_DIR` and commit messages in a heredoc are not caught by this rule.
|
|
304
|
+
- **The package gate also looks at commands that download and run:** `npx`, `bunx`, `bun x`, `npm exec`, `pnpm dlx`, `yarn dlx`, `uvx`, `uv tool run`, `uv run --with`, `pipx run`. If the package name is made up, the command is blocked. A package that is very new, little downloaded or that resembles a popular package is asked about. A command already installed in the project (`node_modules/.bin`) is not checked when run with `npx`, `npm exec` and `bunx`; `dlx` is always checked because it always downloads. The kit's own package (`tillerhand`) is not checked.
|
|
305
|
+
- **The package gate also sees prefixes and wrappers** (in install commands too): `FOO=1 npx`, `cmd /c`, `bash -c`, `time`, `/usr/bin/npx`, `npx.cmd`, `pnpm -C . dlx`, `npm --prefix web install`. A name after an unknown flag is not counted as certainly a package; if it is not in the registry it is not blocked, it is asked about.
|
|
306
|
+
|
|
307
|
+
### Fixed
|
|
308
|
+
- **On Windows the desktop notification could run a command from the project name.** The project name was embedded in the text of the PowerShell script and only a plain `'` was escaped; PowerShell also counts `’ ‘ ‚ ‛` as quotes. The title and message are now passed to the script through environment variables.
|
|
309
|
+
- **The formatting hook (web, mobile) did not work in a folder with spaces on Windows** and gave the file path to the shell unescaped. Prettier now runs directly with Node, without a shell (Prettier 3).
|
|
310
|
+
- **Cost reading (`cost.mjs`) ran `npx` in the project folder.** So a `.npmrc` in the repo or `node_modules/.bin/ccusage` could take effect. It now runs in its own temporary folder, created and deleted at each run.
|
|
311
|
+
- **The exemption in the commit gate applies only to the project's own `commit-gate.mjs` file.** The path is compared after resolving: a relative, absolute or `$CLAUDE_PROJECT_DIR` path stays exempt. A copy of `gate.mjs` sitting under this name in another folder (`sandbox/.claude/hooks/commit-gate.mjs`) counts as a gate command approval.
|
|
312
|
+
- A message starting with `-` in the Linux notification is not taken as an option.
|
|
313
|
+
- Adapt by hand: none; `/kit-update` refreshes the hooks, rules and permission lines.
|
|
279
314
|
|
|
280
315
|
## [3.27.2] - 2026-10-25
|
|
281
316
|
|
|
282
|
-
###
|
|
283
|
-
- **
|
|
284
|
-
- **
|
|
285
|
-
-
|
|
317
|
+
### Documentation
|
|
318
|
+
- **Installation with npm in the README and guide:** `npx tillerhand init` is the recommended route; the git clone stays as an option. For Codex/Antigravity: `npx tillerhand init --tool codex`.
|
|
319
|
+
- **Guide:** The "Hemen başla" (get started now) and "Nasıl çalışır?" (how does it work?) buttons at the top were removed. Install commands and terminal blocks (status block, status line) wrap to the next line on a narrow screen instead of scrolling sideways.
|
|
320
|
+
- The package accepts Node.js 18 and above (the same as the requirement in the docs).
|
|
286
321
|
|
|
287
322
|
## [3.27.1] - 2026-10-25
|
|
288
323
|
|
|
289
|
-
###
|
|
290
|
-
- **
|
|
291
|
-
- **`npx tillerhand init`
|
|
292
|
-
-
|
|
324
|
+
### Fixed
|
|
325
|
+
- **Protection hooks silently did not work when the project was opened through a symbolic link or junction.** 17 scripts, including the secret block, destructive command shield, commit gate, and the structure and test protections, did not resolve the link when comparing the path they were started from with the real path; in linked folders such as `/tmp` on macOS or in linked project folders they exited doing nothing. Both paths are now converted to the real path and compared (`shared.mjs` → `isMain`).
|
|
326
|
+
- **`npx tillerhand init` did nothing on Linux and macOS** (same cause: npx starts the kit through a `node_modules/.bin` link). It worked on Windows. If you tried 3.27.0 on Linux or macOS, run it again.
|
|
327
|
+
- Adapt by hand: none; `/kit-update` refreshes the hooks.
|
|
293
328
|
|
|
294
329
|
## [3.27.0] - 2026-10-25
|
|
295
330
|
|
|
296
|
-
###
|
|
297
|
-
- **
|
|
298
|
-
-
|
|
299
|
-
-
|
|
300
|
-
- `npx`
|
|
301
|
-
- **
|
|
331
|
+
### Added
|
|
332
|
+
- **Install with one command: `npx tillerhand init`.** The kit is published on npm as the `tillerhand` package; in an empty folder this command installs the kit, then in a new session run `/start` (`/adopt` on existing code). The `.kit.json` → `kit` field becomes `npx:tillerhand@<sürüm>`; `/start` and `/adopt` do the type setup with the same version through `npx -y tillerhand@<sürüm> install ...`. The git clone route (`node <kit>/kit/kit.mjs init`) works as before.
|
|
333
|
+
- The package carries only the kit: internal notes, personal state files, and eval and test folders are not included. Since npm does not pack `.gitignore`, the kit carries its own copy; in a project installed with npx, `.env` also stays out of git.
|
|
334
|
+
- Publishing is automatic: when a `v*` tag is pushed, GitHub Actions checks that the tag is on `main`, that the versions (tag, `package.json`, `kit/VERSION`) are the same, and runs the tests; it publishes in a separate job, without running repo code, to npm without a token (Trusted Publishing, with provenance). Actions are pinned to commit SHAs.
|
|
335
|
+
- Runners other than `npx` (`pnpm dlx`, `bunx`) record the kit's temporary path; after installing with them, `/start` may not find the kit folder. Use `npx`.
|
|
336
|
+
- **The kit's `package.json` is not copied to the project** (so it does not clash with the project's own `package.json`).
|
|
302
337
|
|
|
303
338
|
## [3.26.1] - 2026-10-25
|
|
304
339
|
|
|
305
|
-
###
|
|
306
|
-
- **
|
|
307
|
-
- **
|
|
340
|
+
### Fixed
|
|
341
|
+
- **The gate approval exemption was narrowed.** Only the real `.claude/hooks/commit-gate.mjs --approve` is outside the gate approval rule; a copy of `gate.mjs` placed in another folder under the name `commit-gate.mjs` now falls under the approval rule (the Claude Code gate and the Codex/Antigravity list).
|
|
342
|
+
- **Settings merging at install** merges only the object's own keys; a `__proto__` key in a JSON does not change the prototype of the result.
|
|
308
343
|
|
|
309
344
|
## [3.26.0] - 2026-10-25
|
|
310
345
|
|
|
311
|
-
###
|
|
312
|
-
- **Supabase
|
|
313
|
-
-
|
|
346
|
+
### Changed
|
|
347
|
+
- **Supabase keys with new names** (web-saas, mobile). Supabase is deprecating the old `anon` and `service_role` keys by the end of 2026 (supabase.com/docs/guides/api/api-keys, 2026-10-25). In new projects: `NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY` (`sb_publishable_…`) and `SUPABASE_SECRET_KEY` (`sb_secret_…`, server only); in mobile `EXPO_PUBLIC_SUPABASE_PUBLISHABLE_KEY`. The warning about a secret key entering client code catches both names. The RLS adversarial test already read both kinds.
|
|
348
|
+
- Adapt by hand (optional): Create the new keys in the Supabase dashboard; `.env.example`, the variables in the hosting dashboard, GitHub → Variables (`NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY`) and the `process.env` reads in the code change to the same name. If you keep the old names, you can put the new key into the variable with the old name.
|
|
314
349
|
|
|
315
350
|
## [3.25.1] - 2026-10-25
|
|
316
351
|
|
|
317
|
-
###
|
|
318
|
-
-
|
|
352
|
+
### Fixed
|
|
353
|
+
- **An add-on added later with `/kit-update` does not silently skip a file with the same name in the project.** The project's file is not touched, the kit's is placed next to it as `.kit-new`, and it shows up as a conflict in the report; the same as the behavior at first install. Before, the add-on was thought to be installed.
|
|
319
354
|
|
|
320
355
|
## [3.25.0] - 2026-10-25
|
|
321
356
|
|
|
322
|
-
###
|
|
323
|
-
- **
|
|
324
|
-
- KVKK
|
|
325
|
-
- e-Fatura
|
|
326
|
-
- iyzico
|
|
327
|
-
-
|
|
328
|
-
- İ/ı
|
|
329
|
-
-
|
|
330
|
-
- **
|
|
357
|
+
### Added
|
|
358
|
+
- **Turkey add-on** (`--addons tr`, optional). `/start` suggests it if there are sales in Turkey or Turkish users. In `docs/legal/turkiye.md` each item is linked to a primary source and has a check date (2026-10-25); it is not legal advice, so consult a lawyer or accountant before launch.
|
|
359
|
+
- KVKK transfer abroad (art. 9, as amended by Law 7499): adequacy decision, standard contract and notification to the Authority within 5 business days, incidental transfer; a checklist for AI and hosting services.
|
|
360
|
+
- e-Fatura and e-Arşiv (VUK GT no. 509, current version): the 3 million TL / 500 thousand TL threshold for internet sales, e-Arşiv regardless of amount from 1/1/2026, required details on an internet sales invoice.
|
|
361
|
+
- Signature check for iyzico and PayTR payment notifications, with working code: web-saas `src/lib/payments/webhook-signature.ts` and the adversarial test (`payment-webhook` workflow, Node 22.18+), backend `app/shared/payments.py` and its test (pytest; in ruff format). A fake, altered or unsigned notification is rejected; if the check is removed, the test turns red. In mobile the notification comes to the server, and the code and server keys (`.env.example`) are in the backend.
|
|
362
|
+
- The guide says that a valid signature does not mean the payment succeeded: there are atomic approval steps for the result field, the amount (queried from the server in iyzico) and a repeated notification.
|
|
363
|
+
- İ/ı and Turkish sort test cases. `/findings-legal` and `/findings-business` read the Turkey items.
|
|
364
|
+
- Adding to an existing project: `node <kit>/kit/kit.mjs update --project . --addons tr`.
|
|
365
|
+
- **Add-on-specific type layer:** An add-on can carry files that go to only one project type under `addons/<ek>/types/<tip>/`; it also applies when added later with `update --addons`.
|
|
331
366
|
|
|
332
|
-
###
|
|
333
|
-
- **
|
|
367
|
+
### Fixed
|
|
368
|
+
- **The shield cannot be bypassed with a `&` or `|` inside quotes.** In commands such as `vercel deploy --meta "a&b" --prod` and `rm "a&b" -rf` (Codex/Antigravity), the sign inside the quotes split the command and the next flag escaped the rule; every rule now sees this spelling too.
|
|
334
369
|
|
|
335
370
|
## [3.24.0] - 2026-10-25
|
|
336
371
|
|
|
337
|
-
###
|
|
338
|
-
-
|
|
339
|
-
-
|
|
340
|
-
-
|
|
341
|
-
- **`/start`
|
|
372
|
+
### Added
|
|
373
|
+
- **Learning rules.** A `**Sınıf:**` field was added to the bug spec (empty-input, authorization, date-time, local-language… a fixed list). If `/fix-bug` finds an earlier bug spec in the same class, it suggests a single rule to prevent repetition: a `/hookify` rule if it can be checked mechanically, otherwise `AGENTS.md` → "Öğrenilen kurallar". No rule file changes without your approval. If you say "later", the dashboard reminds you with an "Aynı hata sınıfı" (same bug class) warning and `/retro` collects it. Your answer (added / not needed) is written to the spec as a `**Kural:**` line: the warning closes and the same decision is not asked again. If a new bug of the same class comes, the rule did not work and the warning reopens.
|
|
374
|
+
- Each rule ends with a source and date (also the ones `/wrap-up` and `/retro` suggest). `/maintain monthly` lists rules older than 90 days: keep, update or delete; when the section passes 10 lines it suggests merging.
|
|
375
|
+
- Adapt by hand: copy the "Öğrenilen kurallar" section from the kit to the end of `AGENTS.md` (if missing, `/fix-bug` opens it at the first rule); add the `**Sınıf:**` and `**Kural:**` lines to `docs/product/specs/_template.md`.
|
|
376
|
+
- **`/start` and `/adopt` ask about auto memory** (Claude Code). Recommended off: the project's memory is in `AGENTS.md`, `progress.md` and the decision log; auto memory notes stay on the machine and nobody reviews them. If off is chosen, `.claude/settings.json` → `"autoMemoryEnabled": false`.
|
|
342
377
|
|
|
343
378
|
## [3.23.1] - 2026-10-25
|
|
344
379
|
|
|
345
|
-
###
|
|
346
|
-
- **
|
|
380
|
+
### Fixed
|
|
381
|
+
- **The shield also asks for an EAS command that has `&` or `|` inside quotes.** `eas update --message "a & b" --channel production` passed without approval in 3.23.0.
|
|
347
382
|
|
|
348
383
|
## [3.23.0] - 2026-10-25
|
|
349
384
|
|
|
350
|
-
###
|
|
351
|
-
- **
|
|
352
|
-
-
|
|
353
|
-
- **
|
|
385
|
+
### Added
|
|
386
|
+
- **Deployment setup** (`/release first`). If hosting or a domain is not set up, a provider-by-provider step-by-step guide: project, environment variables, domain and DNS, backup and PITR, rollback rehearsal. The steps are in `docs/operations/deploy-setup.md`: Vercel, Supabase, Railway, EAS; each from the official docs, with source and check date (2026-10-25). Before using a command, it reopens the source pages and corrects any step that changed.
|
|
387
|
+
- A secret value is not written to the chat or a file; you enter the value in the provider's dashboard. You take the prod database backup in your own terminal (three commands for role, schema and data on Supabase Free); the restore rehearsal is done on a temporary local database, and prod data is not moved to the dev project. Prod deploy, the rollback rehearsal and restoring from backup start with your approval.
|
|
388
|
+
- **The secret block recognizes the Supabase secret key** (`sb_secret_…`, containing at least one digit). Placeholders such as `sb_publishable_…` and `sb_secret_your-key` are not blocked; the Supabase CLI's local development key is also in the secret key format, so it is blocked.
|
|
354
389
|
|
|
355
|
-
###
|
|
356
|
-
- **
|
|
390
|
+
### Fixed
|
|
391
|
+
- **The shield also asks about EAS prod commands**: `eas update` with `--channel`/`--environment production`, `eas update:rollback`, `eas update:republish`, `eas deploy --prod` and the `npx eas-cli …` spelling. Before, only `--branch production` was asked about.
|
|
357
392
|
|
|
358
393
|
## [3.22.0] - 2026-10-25
|
|
359
394
|
|
|
360
|
-
###
|
|
361
|
-
- **
|
|
362
|
-
-
|
|
395
|
+
### Changed
|
|
396
|
+
- **Live monitoring every 3 hours** (web-saas and backend). The hourly run (~3 min) took ~2,160 Actions minutes a month; GitHub Free gives 2,000 minutes a month for a private repo (docs.github.com, 2026-10-25). The new frequency is ~720 minutes, leaving a share for CI too.
|
|
397
|
+
- Adapt by hand: `.github/workflows/live-monitoring.yml` → `cron: "17 */3 * * *"`.
|
|
363
398
|
|
|
364
|
-
###
|
|
365
|
-
- **
|
|
366
|
-
- **Backend `/health`
|
|
367
|
-
- **
|
|
368
|
-
-
|
|
399
|
+
### Added
|
|
400
|
+
- **A ready live smoke test** (web-saas, `tests/live/smoke.spec.ts`): does the home page open, is it within `LIVE_MAX_MS` (Variables, default 3000), is there an error in the console. It only opens a page, fills no form. Once `LIVE_URL` is entered, monitoring works right away; before, with no test, it raised false alarms.
|
|
401
|
+
- **Backend `/health` response time**: an alarm if `LIVE_MAX_SECONDS` (default 2) is exceeded. If `tests/live/` has no tests yet (pytest exit 5), no alarm.
|
|
402
|
+
- **The last run of live monitoring on the dashboard** (Operasyon → GitHub): succeeded / failed / not set up (no `LIVE_URL`). When it breaks, an "attention" warning suggests `/fix-bug`.
|
|
403
|
+
- Adapt by hand: copy `tests/live/smoke.spec.ts` from the kit; replace the "Sağlık" (health) and "Kritik uçlar" (critical endpoints) steps in the backend workflow with the ones in the kit.
|
|
369
404
|
|
|
370
|
-
###
|
|
371
|
-
- **
|
|
405
|
+
### Documentation
|
|
406
|
+
- **Guide (`kit/guide.html`) design cleanup.** A thin full border instead of the thick left stripe on the "exit gate" and note boxes; the label above the heading (with the old version number) was removed, and the tool info moved under the heading as a plain sentence; line height of 1.3 in labels so they do not overlap when line spacing shifts. Colors did not change: all text/background pairs in the light and dark themes pass WCAG AA (lowest 5.3:1).
|
|
372
407
|
|
|
373
408
|
## [3.21.0] - 2026-10-25
|
|
374
409
|
|
|
375
|
-
###
|
|
376
|
-
-
|
|
377
|
-
- "
|
|
378
|
-
-
|
|
410
|
+
### Added
|
|
411
|
+
- **Feature and bug spec, drift check.** The spec writes the current, expected and must-not-change behavior in `docs/product/specs/<görev>.md` (template `_template.md`). `/plan-task` writes a feature spec only for work touching 3 or more files, and `/fix-bug` writes a few-line bug spec for every bug; there is no extra step for small work.
|
|
412
|
+
- "Must not change" lines start with an acceptance criterion id (`- Ö-01.1: ...`). The gate (`gate.mjs --run`) turns red if these ids have no test, or if the test is red in the test report written during the gate's own run. An old report is not counted; if the test command does not write JUnit, only the existence of the test is checked and a note is left. Lines with an id that do not follow this format are also shown as notes. The gate catches the drift, not a model; `/review-changes` also gives the spec to the review agent.
|
|
413
|
+
- If you change the behavior on purpose, update the spec first; a spec that is no longer valid is moved to `docs/archive/`.
|
|
379
414
|
|
|
380
|
-
###
|
|
381
|
-
- **
|
|
415
|
+
### Fixed
|
|
416
|
+
- **The acceptance test scan recognizes more stacks** (dashboard and Spec check): Dart and Go (`_test.dart`, `_test.go`), Kotlin and Swift (`…Test.kt`, `…Tests.swift`) and the Jest `__tests__/` folder. `build/`, `dist/`, `kit/` are skipped only at the project root; tests in folders such as `src/features/build/` are now seen. Names such as `ISO-27.1` do not count as a criterion id.
|
|
382
417
|
|
|
383
418
|
## [3.20.1] - 2026-10-25
|
|
384
419
|
|
|
385
|
-
###
|
|
386
|
-
- **
|
|
420
|
+
### Fixed
|
|
421
|
+
- **The package gate does not take a redirect for a package.** In commands such as `npm install zod 2>&1 | tail`, `2>&1` was counted as a "package not in the registry" and the install was blocked. Redirects such as `> dosya`, `2>/dev/null` and `&> dosya` are now filtered out of the arguments.
|
|
387
422
|
|
|
388
423
|
## [3.20.0] - 2026-10-25
|
|
389
424
|
|
|
390
|
-
###
|
|
391
|
-
- **`/qa`:
|
|
392
|
-
-
|
|
393
|
-
-
|
|
394
|
-
-
|
|
395
|
-
-
|
|
425
|
+
### Added
|
|
426
|
+
- **`/qa`: UI acceptance criteria in a real browser.** Each criterion runs as a Playwright test: the existing `Ö` test if there is one, otherwise a test `/qa` writes under `tests/e2e/qa/`. New tests take a screenshot even when the test stays, and turn red on a console error. Playwright's `webServer` setting starts and stops the server; if the address is not local, `/qa` stops and asks. The run uses its own output folder (`test-results-qa/`); the acceptance report in `test-results/` is not deleted.
|
|
427
|
+
- The report is written from the JUnit result with `node .claude/hooks/qa-report.mjs` (`docs/quality/qa/<tarih>.md`): per criterion passed / failed / not run, the first line of the error and a screenshot (`.previews/qa-<tarih>/`, does not go into git). So to say "it works", a green test must stand behind it. If no test ran, no report is written.
|
|
428
|
+
- At the end of the report you are asked whether to move the new passing tests to `tests/e2e/` as permanent acceptance tests.
|
|
429
|
+
- The last QA run shows as a card in the dashboard "Kalite" (Quality) tab. `/build` suggests `/qa` on a UI task; the go-live list has an item "no failures in the last /qa report".
|
|
430
|
+
- Adapt by hand (web project): add the lines `tests/e2e/qa/` and `test-results-qa/` to `.gitignore`, the `/qa` item to `docs/operations/release-checklist.md`, and a `/qa` line to `docs/architecture/stack.md` → Doğrulama (verification).
|
|
396
431
|
|
|
397
432
|
## [3.19.1] - 2026-10-25
|
|
398
433
|
|
|
399
|
-
###
|
|
400
|
-
- **Playwright CLI
|
|
434
|
+
### Security
|
|
435
|
+
- **Playwright CLI commands are now asked about** (web-saas). `npx -y @playwright/cli@0.1.22 open`, `snapshot`, `console`, `requests` and `screenshot` left the permission list. When this tool runs in the project folder it reads the `.playwright/cli.config.json` file in the repo, and that file can run another program instead of the browser. In an untrusted repo these commands must not run without asking. In new projects the rules are in the "ask" list. `/kit-update` removes the old permission lines in existing projects; the command is asked about every time. For screenshots `preview.mjs` keeps running without asking, because it runs the tool in a temporary folder.
|
|
401
436
|
|
|
402
437
|
## [3.19.0] - 2026-10-25
|
|
403
438
|
|
|
404
|
-
###
|
|
405
|
-
- **
|
|
406
|
-
-
|
|
407
|
-
-
|
|
408
|
-
- **
|
|
409
|
-
-
|
|
439
|
+
### Added
|
|
440
|
+
- **Live preview** (`.claude/hooks/preview.mjs`). On a UI task `/build` starts the dev server, waits until the address responds, takes a desktop (1440) and a mobile (390) screenshot with the Playwright CLI, writes them to `.previews/<görev>/` and shuts the server down together with its child processes. If a server is already open it uses it and does not close it. In a mobile (Expo) project the step is skipped and you are asked to check the screen on a phone. The dashboard also shows the screenshots in the previews list.
|
|
441
|
+
- Adapt by hand: add a `önizleme:` line to `AGENTS.md` → Komutlar (example: `önizleme: http://localhost:3000`). The address can only be local (localhost, 127.0.0.1, [::1]).
|
|
442
|
+
- The browser tool runs in a temporary folder, not in the project folder; a Playwright config file or `.npmrc` coming from the repo is not used.
|
|
443
|
+
- **Comprehension check** (narrator mode). After the `/build` and `/fix-bug` report, a question with at most 2 options comes about why the change was made; answering is not required. Answers are written to `docs/workflow/learning.md`, and the dashboard "Ürün ve teknik" tab shows the right/wrong counts and the concepts often missed. There is no question when narrator mode is off.
|
|
444
|
+
- Adapt by hand: the narrator mode file belongs to the project, and the update does not touch it. If you use it, copy the "Görev sonunda anlama kontrolü" (comprehension check at task end) section from `.claude/output-styles/anlatici.md` in the kit into your own file.
|
|
410
445
|
|
|
411
|
-
###
|
|
412
|
-
- **
|
|
446
|
+
### Changed
|
|
447
|
+
- **The gate command approval also covers the `geliştirme:` and `önizleme:` lines.** The preview does not run an unapproved command and does not open an unapproved address. Whenever one of these two lines changes (including the first gate after an update), command approval is asked again.
|
|
413
448
|
|
|
414
449
|
## [3.18.3] - 2026-10-25
|
|
415
450
|
|
|
416
|
-
###
|
|
417
|
-
- **`/fix-bug`
|
|
451
|
+
### Fixed
|
|
452
|
+
- **`/fix-bug` runs the gate.** After the tests turn green, the flow runs lint, type check, tests and Semgrep with `gate.mjs --run`; if command approval is needed, it shows the commands and asks. Before, this step existed only in `/build`.
|
|
418
453
|
|
|
419
|
-
###
|
|
420
|
-
- **
|
|
454
|
+
### Documentation
|
|
455
|
+
- **Second measurement of the evaluation** (Sonnet, 6 tasks, 24 runs per condition): both conditions passed all hidden tests. The tests the kit wrote caught 63% of the bugs deliberately added to the code, those of the run without the kit 31%. The kit wrote the test before the code in every run. The cost is about 2 times the cost and 1.8 times the time. It was seen that the gate (`gate.mjs --run`) did not run in the `/fix-bug` flow. Details: `kit/eval/results/2026-10-25-v3.18.2-sonnet-ozet.md`.
|
|
421
456
|
|
|
422
457
|
## [3.18.2] - 2026-10-25
|
|
423
458
|
|
|
424
|
-
###
|
|
425
|
-
- **
|
|
426
|
-
- `trash`:
|
|
427
|
-
-
|
|
428
|
-
-
|
|
459
|
+
### Fixed
|
|
460
|
+
- **Evaluation, two measurement errors.** Both penalized correctly written code:
|
|
461
|
+
- `trash`: An app that takes the clock from outside (`createStore(now = Date.now)`) failed the 30-day test unfairly. The test mocked the date after the app was loaded. Now the mock starts before the app is loaded.
|
|
462
|
+
- The reference solutions did not sort notes created in the same millisecond newest first. The agent's reasonable test for this stayed red on the reference solution and dropped out of the mutant measurement; in `bug-sort` both conditions came out 0/2. The reference solutions and mutants were fixed.
|
|
463
|
+
- The result file also keeps the code patch of each run (`src`, `tests`, `package.json`). So a fix made to the setup later can be scored without the agents running again.
|
|
429
464
|
|
|
430
465
|
## [3.18.1] - 2026-10-25
|
|
431
466
|
|
|
432
|
-
###
|
|
433
|
-
- **
|
|
434
|
-
-
|
|
435
|
-
-
|
|
467
|
+
### Fixed
|
|
468
|
+
- **Evaluation setup:**
|
|
469
|
+
- When the plan limit is full the setup does not try the remaining runs for nothing. It stops, writes the finished runs and says which tasks are left (exit code 2).
|
|
470
|
+
- The result file name goes down to the second. Tasks finishing in the same minute no longer overwrite each other's file.
|
|
436
471
|
|
|
437
472
|
## [3.18.0] - 2026-10-25
|
|
438
473
|
|
|
439
|
-
###
|
|
440
|
-
- **
|
|
441
|
-
- `trash` (
|
|
442
|
-
- `paging` (
|
|
443
|
-
- `tr-sort` (
|
|
444
|
-
- **Mutant
|
|
445
|
-
- **
|
|
474
|
+
### Added
|
|
475
|
+
- **Hard tasks in the evaluation** (`kit/eval/`, for people developing the kit; not copied to projects). Three new tasks were added:
|
|
476
|
+
- `trash` (implicit requirement): a trash bin and restore within 30 days.
|
|
477
|
+
- `paging` (multi-step contract): paging; the old client must not break.
|
|
478
|
+
- `tr-sort` (trap): Turkish alphabetical sorting and case-insensitive search.
|
|
479
|
+
- **Mutant measurement:** Each task has two mutants: copies of the reference solution with a single bug added. The report shows how many of these bugs the agent's tests caught.
|
|
480
|
+
- **Repeat:** `--repeat N` runs each cell N times. The report starts with a task × condition summary: hidden test average, lowest and highest value, killed mutants, cost and time.
|
|
446
481
|
|
|
447
482
|
## [3.17.0] - 2026-10-25
|
|
448
483
|
|
|
449
|
-
###
|
|
450
|
-
- **3.15.0
|
|
451
|
-
- 3.15.0
|
|
452
|
-
- `/kit-update
|
|
484
|
+
### Removed
|
|
485
|
+
- **The Turkish flags from before 3.15.0 no longer work:** `--onayla`, `--evet`, `--sessiz`, `--kur`, `--plan-kaydet`, `--plan-ekle`, `--plan-bitir`, `--ac`, `--kapat`, `--gerekli`, `--olc`. They were replaced by `--approve`, `--yes`, `--quiet`, `--install`, `--plan-save`, `--plan-add`, `--plan-end`, `--enable`, `--disable`, `--required` and `--measure`. Old flags mostly fail with a usage message. There are two exceptions: `plugins-sync.mjs --kur` no longer installs, it only lists; `dashboard.mjs --sessiz` is ignored. In the scope shield (`freeze-guard.mjs`) an unknown flag no longer passes silently, it gives an error; so the AI does not think the plan was saved.
|
|
486
|
+
- The state file keys from before 3.15.0 (Turkish JSON keys) and the `~/.vibe-kit/kapi-onayi/` folder are no longer read. An old-format limit and context file counts as "unknown"; the status line writes a new one after the first reply.
|
|
487
|
+
- `/kit-update` deletes the 8 permission lines the kit added for the old flags from the project's `.claude/settings.json`: 5 in allow, 3 in ask. It lists what it deleted in the report. Only exactly matching lines are deleted; lines you wrote are not touched.
|
|
453
488
|
|
|
454
|
-
-
|
|
489
|
+
- The unused `.claude/.hatirlatma.json` left the kit (it was replaced in 3.x by `.claude/state/reminder.json`). It is no longer copied to new projects.
|
|
455
490
|
|
|
456
|
-
###
|
|
457
|
-
-
|
|
458
|
-
-
|
|
459
|
-
-
|
|
460
|
-
- 3.15.0
|
|
491
|
+
### Adapt by hand
|
|
492
|
+
- If your project has `.claude/.hatirlatma.json` you can delete it; `/kit-update` lists it as "removed from the kit".
|
|
493
|
+
- If you gave the gate command approval before 3.15.0 and have not renewed it since, approve once more: `node .claude/hooks/gate.mjs --approve`. The gate does not run an unapproved command and tells you so.
|
|
494
|
+
- If one of the old flags appears in your own scripts or notes, replace it with the new one.
|
|
495
|
+
- If a scope shield plan opened before 3.15.0 is still open, it is no longer read. Save the plan again with `--plan-save`.
|
|
461
496
|
|
|
462
497
|
## [3.16.3] - 2026-10-25
|
|
463
498
|
|
|
464
|
-
###
|
|
465
|
-
- **
|
|
466
|
-
-
|
|
467
|
-
-
|
|
468
|
-
-
|
|
469
|
-
-
|
|
470
|
-
-
|
|
471
|
-
-
|
|
472
|
-
-
|
|
473
|
-
- **
|
|
474
|
-
|
|
475
|
-
###
|
|
476
|
-
-
|
|
477
|
-
- "
|
|
478
|
-
- "
|
|
479
|
-
- "
|
|
480
|
-
- `--keep`
|
|
499
|
+
### Fixed
|
|
500
|
+
- **Evaluation setup** (`kit/eval/`, for people developing the kit; not copied to projects):
|
|
501
|
+
- With an empty error output the error was lost; now the exit code is written. If none of the hidden tests run (0/0), the row counts as an error.
|
|
502
|
+
- The change is measured against the starting commit: it counts even if the agent commits.
|
|
503
|
+
- The test summary is read in the same format on every Node version (`--test-reporter=spec`).
|
|
504
|
+
- There is a 2 dollar cap per run. If `claude` is not found the setup does not crash. If one task or its cleanup crashes, the others continue. When each task finishes, an interim result is written to the temporary folder.
|
|
505
|
+
- Each condition gets a free `PORT`. When the run ends, the process listening on that port is closed (IPv4 and IPv6) and the gate approval record is deleted. If the port had been in use beforehand, the user's process could have been closed; now it is first checked that it is free.
|
|
506
|
+
- The result file name has the time in it, so a second run on the same day does not overwrite the first. The report writes the Claude Code and Node versions and the plugins loaded per condition. In error and summary texts the temporary folder and the user folder are masked.
|
|
507
|
+
- Permissions were narrowed. Reading and writing stay in the run folder. In Bash, tests, startup, project and kit scripts and read-only git work. Ways out of the folder such as `..`, `git --output`, `npm --prefix` and `node -e` are forbidden. In both conditions `.git/` and `.claude/` cannot be edited. This is not a security boundary; the README explains it.
|
|
508
|
+
- **Tasks:** The `security-owner` text states 401 explicitly, and the test does not look for an `owner` field in the response. The `bug-sort` text says the client may send `createdAt`. The `feature-tags` test also checks alphabetical order on ties in `/tags`. Each task has a reference solution; a test checks that the hidden tests turn green with it.
|
|
509
|
+
|
|
510
|
+
### Added
|
|
511
|
+
- **Measurement:** Three new columns were added to the report:
|
|
512
|
+
- "Bug-catching test": a test that passes on the agent's code but not on the unchanged code. A broken test does not count.
|
|
513
|
+
- "Test first": from the transcript, was the test file written before the code.
|
|
514
|
+
- "Did the gate run".
|
|
515
|
+
- `--keep` leaves the transcript in the run folder.
|
|
481
516
|
|
|
482
517
|
## [3.16.2] - 2026-10-25
|
|
483
518
|
|
|
484
|
-
###
|
|
485
|
-
- **
|
|
486
|
-
- **
|
|
487
|
-
- 3.16.1
|
|
519
|
+
### Fixed
|
|
520
|
+
- **Security:** When the kit was installed from a local folder (`init`, `install`), personal files and secrets that git ignores were copied into the project: `.env`, `.env.local`, `secrets/`, `.claude/settings.local.json`, `.claude/state/`, `*.log`. They are now not copied at any level. `.env.example` is still copied. Since these files are not in a kit cloned from GitHub, only installs from a local copy of the kit were affected.
|
|
521
|
+
- **Adapt by hand:** If you installed the kit from a local copy, check whether these files are in the project (`.claude/settings.local.json` may hold someone else's permissions, `.env` someone else's secrets). If so, delete them; if there are secrets, change them.
|
|
522
|
+
- The first evaluation measurement in 3.16.1 was affected by this bug (the run with the kit took over a personal permission list). There is a note in the result file; the measurement will be run again.
|
|
488
523
|
|
|
489
524
|
## [3.16.1] - 2026-10-24
|
|
490
525
|
|
|
491
|
-
###
|
|
492
|
-
- **Kit
|
|
493
|
-
-
|
|
526
|
+
### Added
|
|
527
|
+
- **Kit evaluation** (`kit/eval/`): Runs the same task with and without the kit and scores it with hidden tests: acceptance and adversarial tests, regression, added tests, cost, time, tokens. It contains a small notes API and three tasks (a bug, a feature of 3+ files, IDOR). To run: `node kit/eval/run.mjs`. It is for people developing the kit and is not copied to projects.
|
|
528
|
+
- First measurement (Sonnet, n=1): both conditions passed all the hidden tests. The kit wrote the test before the code and added 11 tests, the run without the kit added 3 tests. The cost of the kit is ~2.3 times the cost and ~1.7 times the time. Result: `kit/eval/results/2026-10-24-v3.16.0-sonnet.md`.
|
|
494
529
|
|
|
495
530
|
## [3.16.0] - 2026-10-24
|
|
496
531
|
|
|
497
|
-
###
|
|
498
|
-
- **
|
|
499
|
-
- **
|
|
500
|
-
- `/kit-update
|
|
501
|
-
- **
|
|
532
|
+
### Added
|
|
533
|
+
- **Light command list:** Command descriptions entered the skill list in every session (~1,600 tokens) and overflowed the list in a 200K context. In the Light and Standard profiles, 18 rarely used commands (such as `/findings-*`, `/board`, `/retro`, `/rollback`) now show only their name in the list: they appear in the `/` menu and run by name, but their descriptions stay out of the context. Each session uses ~1,100 fewer tokens. The 10 commands that keep their descriptions: `/start`, `/adopt`, `/build`, `/fix-bug`, `/plan-task`, `/design`, `/tools`, `/review-changes`, `/wrap-up`, `/release`.
|
|
534
|
+
- **Full profile:** `/tools komutlar tam` (`node .claude/hooks/tools.mjs --commands full`) brings back all descriptions; `komutlar hafif` reverts. The setting lives in `.claude/settings.json` → `skillOverrides` and applies to the whole team; your own values are kept. It has no effect in Codex and Antigravity.
|
|
535
|
+
- `/kit-update` adds the light list to a project that has no `skillOverrides` key and says so in the report.
|
|
536
|
+
- **Adapt by hand:** If your project uses the Full profile, run `/tools komutlar tam` after the update; otherwise the descriptions of the rarely used commands drop out of the list. The dashboard warns in this case.
|
|
502
537
|
|
|
503
|
-
###
|
|
504
|
-
-
|
|
538
|
+
### Changed
|
|
539
|
+
- Old flags and old state keys keep working for one more release (until 3.17.0).
|
|
505
540
|
|
|
506
541
|
## [3.15.1] - 2026-10-24
|
|
507
542
|
|
|
508
|
-
###
|
|
509
|
-
- **
|
|
510
|
-
- **
|
|
543
|
+
### Changed
|
|
544
|
+
- **Less context:** The "In Codex and Antigravity" section of `AGENTS.md` is filled in only when one of those tools is selected. A project that uses only Claude Code loads ~450 fewer tokens per session (~20% of AGENTS.md). Adding `--tool codex` or `--tool antigravity` later brings the section back. If you edited the section, the kit leaves it alone.
|
|
545
|
+
- **Adapt by hand:** `AGENTS.md` in installed projects does not change (it is a project file). For the same saving, delete this section if you do not use Codex/Antigravity.
|
|
511
546
|
|
|
512
547
|
## [3.15.0] - 2026-10-24
|
|
513
548
|
|
|
514
|
-
|
|
549
|
+
The kit's code moved to English. Messages to the user and the AI, documents and commands stay in Turkish; behavior did not change.
|
|
515
550
|
|
|
516
|
-
###
|
|
517
|
-
- **
|
|
518
|
-
- **
|
|
519
|
-
- `freeze-guard.mjs`: `--plan-save`, `--plan-add`, `--plan-end` (
|
|
520
|
-
- `gate.mjs`: `--approve` (
|
|
521
|
-
- `tools.mjs`: `--enable`, `--disable`, `--required`, `--measure` (
|
|
522
|
-
- `plugins-sync.mjs`: `--install` (
|
|
523
|
-
- `checkpoint.mjs`: `--restore <hedef> --yes` (
|
|
524
|
-
- `dashboard.mjs`: `--quiet` (
|
|
551
|
+
### Changed
|
|
552
|
+
- **Code in English:** Names and comments in the hooks, `kit.mjs`, template scripts and tests are in English. `.claude/hooks/arac.mjs` is now `shared.mjs`.
|
|
553
|
+
- **New flags:**
|
|
554
|
+
- `freeze-guard.mjs`: `--plan-save`, `--plan-add`, `--plan-end` (formerly `--plan-kaydet`, `--plan-ekle`, `--plan-bitir`)
|
|
555
|
+
- `gate.mjs`: `--approve` (formerly `--onayla`)
|
|
556
|
+
- `tools.mjs`: `--enable`, `--disable`, `--required`, `--measure` (formerly `--ac`, `--kapat`, `--gerekli`, `--olc`)
|
|
557
|
+
- `plugins-sync.mjs`: `--install` (formerly `--kur`)
|
|
558
|
+
- `checkpoint.mjs`: `--restore <hedef> --yes` (formerly `--evet`)
|
|
559
|
+
- `dashboard.mjs`: `--quiet` (formerly `--sessiz`)
|
|
525
560
|
|
|
526
|
-
|
|
527
|
-
- **
|
|
528
|
-
- **
|
|
529
|
-
- **RLS
|
|
561
|
+
Old flags work until 3.16.0 and print a warning when used. Old flags that ask for approval (`--plan-ekle`, `--onayla`, `--ac`) still ask.
|
|
562
|
+
- **State files:** Keys in the files under `.claude/state/` are in English. Files with old keys are read until 3.16.0. The gate command approval now lives under `~/.vibe-kit/gate-approval/`; an approval in the old `kapi-onayi/` folder is still honored.
|
|
563
|
+
- **Update adds permission rules:** `/kit-update` adds the kit's `settings.json` permission lines that the project lacks; the project's own lines stay. The `dashboard.mjs --sessiz` line in the Stop hook becomes `--quiet`, so the dashboard and notification do not run twice.
|
|
564
|
+
- **RLS template:** In `tests/security/rls.mjs`, `TABLOLAR` became `TABLES` and `HERKESE_ACIK` became `PUBLIC_TABLES`; a table entry is `{ name, owner, sample, key }`. The `rls.mjs` file of installed projects does not change.
|
|
530
565
|
|
|
531
|
-
###
|
|
532
|
-
- `kit.mjs init`
|
|
566
|
+
### Fixed
|
|
567
|
+
- `kit.mjs init` no longer copies the personal `CLAUDE.local.md` file into the project (it was carried over when installing from a local folder).
|
|
533
568
|
|
|
534
|
-
###
|
|
535
|
-
- `.claude/hooks/arac.mjs`
|
|
536
|
-
-
|
|
569
|
+
### Adapt by hand
|
|
570
|
+
- `.claude/hooks/arac.mjs` was removed from the kit. It shows up under "Kitten kaldırılmış" (removed from the kit) in the update report; you can delete it. If your own script imports from this file, use `shared.mjs` and the new names.
|
|
571
|
+
- To move your own `rls.mjs` to the new template, rename the fields in the table entries (`ad` → `name`, `sahip` → `owner`, `ornek` → `sample`, `anahtar` → `key`).
|
|
537
572
|
|
|
538
573
|
## [3.14.4] - 2026-10-24
|
|
539
574
|
|
|
540
|
-
###
|
|
541
|
-
- **
|
|
542
|
-
- **
|
|
575
|
+
### Changed
|
|
576
|
+
- **The approval record is also protected against globs and links:** The shell asks when its target resolves to a folder that contains the approval folder (`~/.vibe-kit/`) (`rm ~/.v*/…`), or when a link leads the real path there.
|
|
577
|
+
- **Device paths:** `\\?\` and `\\.\` are stripped only before a drive letter, `\\?\UNC\…` counts as a normal UNC path; other forms such as `\\?\GLOBALROOT\…` count as "could not be verified".
|
|
543
578
|
|
|
544
579
|
## [3.14.3] - 2026-10-24
|
|
545
580
|
|
|
546
|
-
|
|
581
|
+
Three findings from the automatic post-commit security review.
|
|
547
582
|
|
|
548
|
-
###
|
|
549
|
-
- **
|
|
550
|
-
- **`--onayla`
|
|
551
|
-
-
|
|
552
|
-
- **
|
|
583
|
+
### Changed
|
|
584
|
+
- **Gate command approval lives in the user folder:** The approval now lives in `~/.vibe-kit/kapi-onayi/<proje yolu özeti>.json` instead of `.git/`. The home folder is read from the operating system and cannot be redirected with `HOME`/`USERPROFILE`. A ready-made approval that arrives with a zip/archive containing `.git` or with `.claude/state/` is no longer read. Writing to this record with a file tool or the shell asks.
|
|
585
|
+
- **`--onayla` only in its exact form:** Every form other than `node .claude/hooks/gate.mjs --onayla` is blocked: an environment variable prefix, a node flag, a redirect, a chain.
|
|
586
|
+
- **Unresolvable shell target:** If the target cannot be resolved because of a variable, backtick, brace expansion or network path, and the command names a rule/protection file (`$D/AGENTS.md`, `{AGENTS,X}.md`, `.claude`, `.git`), it asks even without a lock or plan. Local UNC paths (`\\?\C:\…`, `\\localhost\c$\…`) are converted to drive paths.
|
|
587
|
+
- **Adapt by hand:** The command approval given in 3.14.1/3.14.2 becomes invalid; the commands are approved once again on the first gate run. The old `.git/kit-kapi-onayi.json` can be deleted.
|
|
553
588
|
|
|
554
589
|
## [3.14.2] - 2026-10-24
|
|
555
590
|
|
|
556
|
-
###
|
|
557
|
-
- **
|
|
591
|
+
### Changed
|
|
592
|
+
- **Gate command approval runs on its own:** `gate.mjs --onayla` is blocked if it is chained with other commands (`&&`, `;`, `|`) or contains `$(...)`. The approval window reads the commands in AGENTS.md when the window opens; a command in a chain cannot change the file afterwards and get a different list approved.
|
|
558
593
|
|
|
559
594
|
## [3.14.1] - 2026-10-24
|
|
560
595
|
|
|
561
|
-
3.14.0
|
|
596
|
+
MEDIUM/LOW findings deferred from the 3.14.0 security audit.
|
|
562
597
|
|
|
563
|
-
###
|
|
564
|
-
- **
|
|
565
|
-
- **
|
|
566
|
-
- **
|
|
567
|
-
- **
|
|
568
|
-
- **
|
|
569
|
-
- **NotebookEdit:**
|
|
570
|
-
- **Semgrep:** `--metrics=off
|
|
571
|
-
- `.claude/settings.json` (matcher `Write|Edit|MultiEdit|NotebookEdit`; ask: `gate.mjs --onayla`, `Edit(./.git/**)`), `.claude/board/rules.md`, `/build`, `/plan-task`, `/freeze`, README
|
|
572
|
-
- **
|
|
598
|
+
### Changed
|
|
599
|
+
- **An empty gate stops the commit:** If no check ran (Komutlar empty, no Semgrep), the gate says "BOŞ" (empty), exits with code 1 and the commit gate does not open. If the user wants, `--approve "atlandı: kullanıcı isteği"`.
|
|
600
|
+
- **Gate command approval (`gate.mjs --onayla`):** If the lint/type/test commands in AGENTS.md → Komutlar are new or changed, the gate does not run them; it lists them and asks for user approval. The approval lives in the shared git directory (`.git/kit-kapi-onayi.json`): a cloned repo or one that arrives with a PR cannot carry a ready-made approval. It cannot be redirected elsewhere with the `GIT_DIR`/`GIT_COMMON_DIR` environment variable. `--onayla` asks on every write (Claude: permission list + commit gate hook; Codex/Antigravity: shield); the approval window shows the commands to approve. Writing under `.git/` and to the `.git` pointer file (worktree) with a file tool or the shell also asks.
|
|
601
|
+
- **Shell commands hit the lock and scope shield:** While a lock or an approved plan is open, commands such as `sed -i`, `mv`, `cp`, `rm`, `ln`, `dd of=`, `curl -o`, `>`/`>>`/`>|`, `git checkout/restore`, `Set-Content`, `prettier --write`, `eslint --fix` ask if they target an existing file inside the project that is outside the list/lock. The writing command is found by the command's name (a "copy" in a path does not count). `cd`/`pushd`/`popd`/`Set-Location` in a chain, subshells, the inside of `bash -c`/`sh -c`/`cmd /c`, mid-word quotes, `~` and Git Bash paths (`/c/...`) are tracked. `find -delete/-exec`, `tar -x`, `unzip`, `rsync` and combined flags (`curl -sSLo`) are also seen. A glob target counts its folder. These also ask: a command that targets the root or a parent folder (`git checkout .`), a target with a variable, backticks or brace expansion, a `cd` that cannot be verified, and a command that does not show its target (`git apply`, `git stash`, `git switch`, `git checkout` with a branch name, `patch`, `xargs rm`). New files, files outside the project and `docs/` are free.
|
|
602
|
+
- **Rule and protection files are also protected from the shell (Claude Code included):** When the target of a shell command is `.claude/` (including lock, plan, gate and approval state), `.git/` and the `.git` pointer file, `AGENTS.md`, `CLAUDE.md`, `.codex/` or the workflows, it asks even without a lock or plan; `.env` and `secrets/` are blocked. The lock and plan cannot be closed with Bash, and a hook cannot be silently written under `.git/hooks/`.
|
|
603
|
+
- **Symbolic links and junctions are resolved:** The lock, the scope shield and the Codex/Antigravity protected-file rule look at the real path; a link inside a locked folder cannot be used to write outside.
|
|
604
|
+
- **NotebookEdit:** The secret block, the lock/scope shield and test protection also see Jupyter notebook edits.
|
|
605
|
+
- **Semgrep:** Runs with `--metrics=off`. If it is found as `.cmd`/`.bat` on Windows, it says "found but could not run; `SEMGREP=<semgrep.exe yolu>`" instead of "not installed" (file names are not passed to the shell). A semgrep inside the project folder is not recommended.
|
|
606
|
+
- Updated `.claude/settings.json` (matcher `Write|Edit|MultiEdit|NotebookEdit`; ask: `gate.mjs --onayla`, `Edit(./.git/**)`), `.claude/board/rules.md`, `/build`, `/plan-task`, `/freeze`, the README and `kit/guide.html`.
|
|
607
|
+
- **Adapt by hand:** If you changed `settings.json`, take the new lines from `.kit-new`. The first gate run after the update asks for command approval; check the commands and approve.
|
|
573
608
|
|
|
574
|
-
###
|
|
575
|
-
-
|
|
576
|
-
-
|
|
577
|
-
- `awk -i inplace`
|
|
609
|
+
### Known limits
|
|
610
|
+
- Shell targets are heuristic: the source file of `cp` also counts as a target (an extra question); writes made by `node -e`, `python -c` and from inside a script are not seen.
|
|
611
|
+
- Command approval binds the text of the command, not the content it runs: if a `package.json` script or test config changes after approval, the gate runs the new version.
|
|
612
|
+
- `awk -i inplace` and `curl -O` (saving under the remote name) are not seen as targets.
|
|
578
613
|
|
|
579
614
|
## [3.14.0] - 2026-10-24
|
|
580
615
|
|
|
581
|
-
###
|
|
582
|
-
- **
|
|
583
|
-
- **
|
|
616
|
+
### Added
|
|
617
|
+
- **Deterministic gate (`gate.mjs --run`):** Runs the `lint`, `tip kontrol` and `test` commands from AGENTS.md → Komutlar, plus Semgrep (if installed) on changed code files. The result is written to `.claude/state/gate.json` with a change signature. Output of a green check is not written; the last 30 lines of a red one are. An empty command counts as "undefined"; if no check ran, it warns. It runs before commit, end-of-task and end-of-phase meetings, and its output is input for the board members. Members give RET on a red check and do not look again for what lint/type/test caught. The `/build` verification step uses it too.
|
|
618
|
+
- **Scope shield (`freeze-guard.mjs --plan-kaydet / --plan-ekle / --plan-bitir`):** After `/plan-task` approval, the plan's file list is saved. While the plan is open, writing to an existing file not on the list (Claude Code, Codex, Antigravity) asks. Adding a file to the list needs approval; new files, `docs/` and `CHANGELOG.md` are free. Silent when there is no plan. It closes at the end of `/build` and in `/wrap-up`. The lock and plan are written to the project root even when called from a subfolder; quoted `'--plan-ekle'` / `'--off'` also ask in Codex and Antigravity.
|
|
584
619
|
|
|
585
|
-
###
|
|
586
|
-
- **Commit
|
|
587
|
-
- `.claude/board/rules.md` §4,
|
|
588
|
-
- **
|
|
620
|
+
### Changed
|
|
621
|
+
- **Commit gate:** In addition to board approval, it asks for a green gate for the same changes. If the gate is red, stale or never ran, the commit stops. If the user explicitly asks for an interim commit, `--approve "atlandı: kullanıcı isteği"`. Untracked new files also enter the signature (a commit with only new files via `git add -A && git commit` no longer passes unchecked). Forms such as `git --no-pager commit` and `git -C x commit` are caught. A commit may stand alone or be chained only with `cd` / `git add`: `sed … && git commit`, a command containing `$(...)` and `git commit && git push` are stopped (push is a separate command). A heredoc and a `$(cat <<'EOF' … EOF)` message are free. `--approve "atlandı…"` asks the user on every write. The changed file list is read with `git -z` (Turkish paths come out right); `.claude/state/` does not enter the signature.
|
|
622
|
+
- Updated `.claude/board/rules.md` §4, the board member templates, `/plan-task`, `/build`, `/wrap-up`, the `.claude/settings.json` permissions (`gate.mjs --run`, `--plan-kaydet`, `--plan-bitir` without a question; `--plan-ekle` asks), the README and `kit/guide.html`.
|
|
623
|
+
- **Adapt by hand:** In an installed project, the `.claude/agents/board-*.md` files belong to the project: copy the gate line from `.claude/board/board-<rol>.md` into the "Çıktı" (Output) section of each. In `AGENTS.md` → Komutlar, the `lint`, `tip kontrol` and `test` lines must be filled in. If you changed `settings.json`, take the new permission lines from `.kit-new`.
|
|
589
624
|
|
|
590
|
-
###
|
|
591
|
-
-
|
|
592
|
-
-
|
|
593
|
-
-
|
|
594
|
-
- AGENTS.md → Komutlar
|
|
595
|
-
-
|
|
596
|
-
-
|
|
625
|
+
### Known limits
|
|
626
|
+
- The gate is mandatory only in Claude Code's commit gate; in Codex and Antigravity it is run by command.
|
|
627
|
+
- The scope shield does not stop the AI from closing the plan and saving it again; this relies on the "no bypassing hooks" rule in AGENTS.md.
|
|
628
|
+
- If the commands are empty and Semgrep is not installed, the gate returns green with a warning; it does not stop the commit.
|
|
629
|
+
- AGENTS.md → Komutlar runs without approval: read AGENTS.md before running a command that comes from an untrusted repo (clone, PR).
|
|
630
|
+
- The scope shield covers file tools only: writing to a file outside the plan with the shell (`sed -i`, `mv`, `cp`) does not ask (except test files); symbolic links are not resolved; code under `docs/` (Docusaurus etc.) counts as free.
|
|
631
|
+
- A command that changes files while the gate runs (`lint --fix`, snapshot update) changes the signature; the gate must run again.
|
|
597
632
|
|
|
598
633
|
## [3.13.1] - 2026-10-24
|
|
599
634
|
|
|
600
|
-
###
|
|
601
|
-
- **Test
|
|
602
|
-
- **Test
|
|
603
|
-
- **Test
|
|
604
|
-
.toBe()`
|
|
605
|
-
- **Codex
|
|
606
|
-
- **RLS
|
|
607
|
-
- **CI
|
|
608
|
-
- **
|
|
609
|
-
|
|
610
|
-
###
|
|
611
|
-
-
|
|
612
|
-
-
|
|
613
|
-
-
|
|
635
|
+
### Changed
|
|
636
|
+
- **Test protection also works in the shell:** A shell command that changes, moves or deletes a test file (`sed -i`, `perl -i`, `rm`, `mv`, `cp`, `tee`, `>`/`>>`, `git checkout/restore`, PowerShell `Set-Content` etc.) asks in the shield. Test config files are covered too, including the `sed -e … -i` and `--in-place` forms. Each part of a command chain is checked separately; running the test is free.
|
|
637
|
+
- **Test config files:** In files such as `vitest`/`vite`/`jest`/`playwright`/`cypress` config (including `.json`), `.mocharc.*`, `conftest.py`, `noxfile.py`, `pytest.ini`, `pyproject.toml`, `package.json`, it asks if a line that could narrow the scope is added or removed (`include`/`exclude`, `testMatch`, `testIgnore`, `passWithNoTests`, `bail`, `retries`, `forbidOnly`, `setupFiles`, coverage thresholds `lines`/`branches`/`fail_under`, `addopts`, `collect_ignore`, a `"test…"`/`"ci…"` script). Changes such as aliases and plugins pass silently.
|
|
638
|
+
- **Test protection heuristics:** Commenting out with `;//`, `#assert` without a space in Python, `skipIf`/`runIf` and `expect(x)` without a matcher are caught. A focused test `model.fit(` and supertest `.expect(200)` do not count as an expect without a matcher; an `expect(x)
|
|
639
|
+
.toBe()` chain broken across lines is not a problem. `*.e2e-spec.ts`, `*_test.go` and `spec/` were added to the test path patterns.
|
|
640
|
+
- **Codex move:** Moving a test to a name the runner does not recognize even though it stays in the test folder (`a.test.ts` → `tests/a.ts`), and moving any file on top of an existing test, ask.
|
|
641
|
+
- **RLS test (web and mobile template):** The other user's update attempt writes a value different from the row (it changes the owner to itself); after the update and delete attempts, the row is read again as admin and compared with its original state (a change is caught even when the returned row count is 0 because there is no select policy). In CI, if `DB_URL` is missing, the table list is not skipped; the test goes red. The file states that views and `SECURITY DEFINER` functions are out of scope.
|
|
642
|
+
- **CI templates (all three):** `permissions: contents: read`; the gitleaks job also gets `pull-requests: read` (for the PR commit list in a private repo); the gitleaks PR comment is off (`GITLEAKS_ENABLE_COMMENTS: "false"`, a leak still turns the job red). In the RLS job, the `supabase status -o env` output is not passed to `eval`; only the needed keys are read and exported.
|
|
643
|
+
- **Adapt by hand:** For a `ci.yml` you changed, `/kit-update` leaves a `.kit-new`: take the `permissions` block at the top, the `GITLEAKS_ENABLE_COMMENTS` line in the gitleaks step and the new environment export lines of the `rls` job into your own file. If you changed `tests/security/rls.mjs`, move your `TABLOLAR` list to the new file.
|
|
644
|
+
|
|
645
|
+
### Known limits
|
|
646
|
+
- Shell protection looks at the text: writing to a test file from inside a script (`node -e`, `python -c`, a program run with a heredoc), with `find … -delete`, `awk -i inplace`, `git apply` or `cd tests; rm *` is not caught.
|
|
647
|
+
- The config file rule is heuristic: a field not on the list, or deleting a line from a multi-line `include: [` array, does not ask.
|
|
648
|
+
- The test protection heuristic does not catch the forms `it['skip']`, `test.todo`, `it.fails`, `expect.any(Object)`.
|
|
614
649
|
|
|
615
650
|
## [3.13.0] - 2026-10-24
|
|
616
651
|
|
|
617
|
-
###
|
|
618
|
-
- **Test
|
|
619
|
-
- **
|
|
620
|
-
- **
|
|
621
|
-
- **RLS
|
|
622
|
-
-
|
|
623
|
-
|
|
624
|
-
###
|
|
625
|
-
- **Dev/prod
|
|
626
|
-
-
|
|
627
|
-
- `arac.mjs` → `cozumle`
|
|
628
|
-
- `AGENTS.md`, `docs/quality/test-plan.md`, `docs/security/checklist.md`,
|
|
629
|
-
- **
|
|
630
|
-
|
|
631
|
-
###
|
|
632
|
-
- Test
|
|
633
|
-
- Antigravity
|
|
634
|
-
- RLS
|
|
652
|
+
### Added
|
|
653
|
+
- **Test protection (`test-guard.mjs`, Claude Code, Codex, Antigravity):** It asks the user if an expectation (`expect`/`assert`) is deleted or commented out in a test file, if `.skip`/`.only`/`xit`/`@pytest.mark.skip` is added, if an expectation is loosened (`toBeTruthy`, `toBeDefined`, `expect.anything`, `assert True`) or if a test file is deleted. Overwriting a whole existing file with Write (with `Add File` in Codex) is compared with the version on disk; moving a test to a non-test path with Codex `Move to` also asks. Because Codex has no approval window, it blocks and tells the AI to "ask the user".
|
|
654
|
+
- **Edit round counter (`edit-rounds.mjs`):** When the same code file is edited for the 5th, 10th, ... time in a session, the AI is reminded of Semgrep and `security-auditor`; the work is not blocked. In Claude and Codex this is a PostToolUse note, in Antigravity PreInvocation `injectSteps` (only to the session that produced the note). If the file name contains special characters, it is not written into the note and the Semgrep command; the path is quoted and after `--`. A broken state file does not crash it.
|
|
655
|
+
- **Complexity budget (`budget.mjs`, CI `karmasiklik` job, three templates):** In code files changed in a PR, CI goes red if function complexity exceeds 15, a function exceeds 80 lines or a file exceeds 400 lines (lizard 1.24.1, `pipx run`). Test, migration, generated and kit files are excluded. Old code brought into the kit does not block until it is touched. Turkish and spaced paths are measured (`git -z`); `build`/`out`/`vendor` are excluded only at the root; `--base` and file names do not count as flags. `/start` puts a "Refactor round" task at the end of every phase.
|
|
656
|
+
- **RLS adversarial test (web and mobile template, `tests/security/rls.mjs`, CI `rls` job):** CI starts an empty local Supabase; an anonymous user and a second user try to read, update, delete and write on behalf of the first user's row. Red if a public table has RLS off or is not registered in the test. No secret is needed; it refuses to run against a non-local URL. The file name is not `.test.mjs`, so Vitest/Jest do not collect it without an environment. Blocking in `/release`.
|
|
657
|
+
- Dashboard: critical if the prod ref appears in `.mcp.json`, a warning if Supabase is present but there is no RLS test.
|
|
658
|
+
|
|
659
|
+
### Changed
|
|
660
|
+
- **Dev/prod separation:** The read-only Supabase MCP in the templates now connects to `DEV_REF` (it used to possibly be prod first). `.env.example` says "local = dev, prod only in the hosting panel". An "Environments (dev / prod)" table was added to `docs/operations/accounts.md`. `/release` checks that the prod ref does not appear in the repo or the AI settings, and asks the user whether `.env.local` is connected to dev.
|
|
661
|
+
- Shield: pulling prod environment variables to the machine (`vercel env pull` / `vercel pull`, targeting prod) is blocked; if the environment is not plain `development`/`preview` (a variable, `$(...)`, a custom environment), it asks. The Vercel rules also cover the short name `vc`.
|
|
662
|
+
- `arac.mjs` → `cozumle` also returns the before and after of the edited part (`once`/`sonra`), deletion and the session id.
|
|
663
|
+
- Updated `AGENTS.md`, `docs/quality/test-plan.md`, `docs/security/checklist.md`, the template `stack.md` files, `docs/workflow/mcp-catalog.md`, the README, `kit/guide.html` and the dashboard.
|
|
664
|
+
- **Adapt by hand:** If the Supabase line in `.mcp.json` of an installed project is connected to the prod ref, replace it with the dev ref. For a `ci.yml` you changed, `/kit-update` leaves a `.kit-new`: take the `karmasiklik` and `rls` jobs into your own file. Add the Environments table to `docs/operations/accounts.md` and the end-of-phase refactor tasks to `docs/product/roadmap.md`. In a project with Supabase, write the existing tables into `tests/security/rls.mjs` → `TABLOLAR`.
|
|
665
|
+
|
|
666
|
+
### Known limits
|
|
667
|
+
- Test protection and the shield look at the text: changing a test file with a shell command (`sed`, heredoc) does not trigger test protection (added to the shield in 3.13.1). The shield may also catch an example command that appears inside a heredoc writing a document.
|
|
668
|
+
- In Antigravity, PostToolUse carries no output; the edit round note arrives on the next model call.
|
|
669
|
+
- The RLS test was verified inside the kit without Docker (non-local URL rejection, missing environment error); an end-to-end run with a real `supabase start` will show up in CI of the first project that uses it.
|
|
635
670
|
|
|
636
671
|
## [3.12.0] - 2026-10-23
|
|
637
672
|
|
|
638
|
-
###
|
|
639
|
-
- **rea (
|
|
640
|
-
- **Understand-Anything (
|
|
641
|
-
-
|
|
642
|
-
- **three.js (`/start` 3c):** 3D
|
|
643
|
-
- **`ui-motion` → 3D
|
|
644
|
-
- **GSAP (`/design`
|
|
645
|
-
- `/findings-perf`
|
|
673
|
+
### Added
|
|
674
|
+
- **rea (reverse engineering CLI, pinned version `rea-agents@6.2.0`):** `/research` can examine how a competitor feature works, with evidence; `/adopt` lists the parts of the repo that have no source (compiled bundle, minified JS, ASAR). Both ask first with an authorization and license warning; the competitor's code, text and brand are not taken. `setup` is not run (it changes agent settings). Catalog: `docs/workflow/mcp-catalog.md`.
|
|
675
|
+
- **Understand-Anything (code map for humans, `yayin` package):** `/adopt` suggests a visual map, `/handoff` an onboarding guide for the person taking over (`/understand-onboard`), `/release first` a maintenance map. The first run reads all the code: the cost is stated and asked. No Turkish output (`--language en`), `--auto-update` is not used. The dashboard gives a hint if the graph is older than 30 days.
|
|
676
|
+
- **Inspiration brand (`/design` 1b):** From awesome-design-md (84 brands, MIT), only the chosen brand's DESIGN.md is downloaded from a pinned commit into `.previews/ref/`, and its principles are distilled with Impeccable. No imitating the brand.
|
|
677
|
+
- **three.js (`/start` 3c):** If 3D is chosen, `threejs-fundamentals`, `threejs-performance` and, in React, `threejs-react-three-fiber` are copied from `CloudAI-X/threejs-skills` (MIT) at a pinned commit; the rest goes through Context7.
|
|
678
|
+
- **`ui-motion` → 3D section:** lazy loading, a static fallback if there is no WebGL, reduced motion, mobile GPU (pixel ratio ≤2, optional rendering), `dispose()`, fps measurement. The GSAP line comes with a license note.
|
|
679
|
+
- **GSAP (`/design` bold direction):** `gsap-skills:` skills. License verified: free, including commercial use; the only ban is a no-code animation tool that competes with Webflow (gsap.com/standard-license, archive copy 2026).
|
|
680
|
+
- Animation and 3D checks were added to the `/findings-perf` and `/findings-ux` lenses (lazy loading, `dispose`, ScrollTrigger cleanup, static fallback, scroll-jacking accessibility).
|
|
646
681
|
|
|
647
|
-
###
|
|
648
|
-
-
|
|
649
|
-
- `.gitignore`: `.ua/intermediate/`, `.ua/diff-overlay.json`. **
|
|
650
|
-
- README, `kit/guide.html`
|
|
682
|
+
### Changed
|
|
683
|
+
- `.ua/**` was added to the structure maps (Understand-Anything graph). **Adapt by hand:** in an installed project, add `".ua/**"` to `.claude/structure.json` → `allow`.
|
|
684
|
+
- `.gitignore`: `.ua/intermediate/`, `.ua/diff-overlay.json`. **Adapt by hand:** add them to the installed project's `.gitignore`.
|
|
685
|
+
- Updated the README, `kit/guide.html` and the dashboard.
|
|
651
686
|
|
|
652
687
|
## [3.11.4] - 2026-10-23
|
|
653
688
|
|
|
654
|
-
###
|
|
655
|
-
-
|
|
689
|
+
### Security
|
|
690
|
+
- **Ask if in doubt.** When a command has an obfuscation marker (a trailing `\`, `$'..'`, `$(...)`, `` `...` ``, `${...}`, `$@`/`$*`) and a protected operation appears after loose normalization (Vercel prod/promote/rollback, `DROP`/`TRUNCATE`, `reset --hard`, `push --force`, `rm -rf`, `db reset`), the shield asks. It does not try to imitate the shell; one rule closes this class of bypass. A finding from the post-commit security review.
|
|
656
691
|
|
|
657
|
-
###
|
|
658
|
-
-
|
|
692
|
+
### Known limits
|
|
693
|
+
- The shield looks at the text; a `$X` variable or a command read from a file cannot be resolved. In Claude Code the real limit is the permission layer (`permissions.ask`/`deny`) and the user's approval. If a protected word appears in a command with an obfuscation marker (for example "rollback" in a commit message written with `$(...)`), an unneeded question rarely comes up.
|
|
659
694
|
|
|
660
695
|
## [3.11.3] - 2026-10-23
|
|
661
696
|
|
|
662
|
-
###
|
|
663
|
-
-
|
|
697
|
+
### Security
|
|
698
|
+
- The destructive command shield and its permission counterpart (Codex, Antigravity) evaluate the command also in the form the shell will see: `$'..'` is expanded, quotes, `\` and PowerShell `` ` `` escapes are dropped. The stricter decision of the raw and the expanded form wins. So forms such as `--pro""d`, `pr\omote`, `$'--prod'`, `DR""OP`, `--ha"rd"` are caught without a separate regex for each. A finding from the post-commit security review (a root-cause fix; it replaces the quote additions of 3.11.2).
|
|
664
699
|
|
|
665
700
|
## [3.11.2] - 2026-10-23
|
|
666
701
|
|
|
667
|
-
###
|
|
668
|
-
-
|
|
702
|
+
### Security
|
|
703
|
+
- Shield: quoted or multi-space forms are also caught (`--target "production"`, `--target='prod'`, `--target production`, `"promote"`). A finding from the post-commit security review.
|
|
669
704
|
|
|
670
705
|
## [3.11.1] - 2026-10-23
|
|
671
706
|
|
|
672
|
-
###
|
|
673
|
-
|
|
674
|
-
-
|
|
675
|
-
-
|
|
707
|
+
### Security
|
|
708
|
+
Findings from the post-commit security review.
|
|
709
|
+
- Shield: `promote` and `rollback` ask even when the `vercel` subcommand comes after flags (`vercel --scope ekip promote …`). `--target production` / `--target=production` also count as a prod deploy.
|
|
710
|
+
- In the web template, the Playwright CLI permission was narrowed to the `open`, `snapshot`, `console`, `requests` and `screenshot` subcommands. `eval` and `run-code`, which run code on the page, ask.
|
|
676
711
|
|
|
677
|
-
###
|
|
678
|
-
- 3.11.0
|
|
712
|
+
### Adapt by hand
|
|
713
|
+
- If you applied 3.11.0, in a web project replace the `Bash(npx -y @playwright/cli@0.1.22:*)` line in `.claude/settings.json` → `permissions.allow` with the five narrow lines from the kit's web template.
|
|
679
714
|
|
|
680
715
|
## [3.11.0] - 2026-10-23
|
|
681
716
|
|
|
682
|
-
###
|
|
683
|
-
- **Playwright CLI** (`npx -y @playwright/cli@0.1.22`):
|
|
684
|
-
- **Vercel CLI
|
|
685
|
-
- **Supabase dev MCP** (
|
|
686
|
-
- `/design`:
|
|
687
|
-
-
|
|
717
|
+
### Added
|
|
718
|
+
- **Playwright CLI** (`npx -y @playwright/cli@0.1.22`): lets the agent look at the page, the console, the network and screenshots. It uses fewer tokens than MCP because it does not force page data into the context. Acceptance tests still run with `npx playwright test`.
|
|
719
|
+
- **Vercel CLI flow** (`/release`): preview deploy → evidence on the preview URL → approve `promote` or `deploy --prod`. If the Git integration is on, the CLI does not deploy separately.
|
|
720
|
+
- **Supabase dev MCP** (catalog, `supabase-dev`): with write access, only for the development project or branch. The prod MCP stays read-only; schema changes always go through a migration file (also added to the mobile template).
|
|
721
|
+
- `/design`: if the design is in Figma, it suggests adding the Figma MCP to this machine.
|
|
722
|
+
- A "Added when needed" section in the catalog: Playwright MCP, Chrome DevTools MCP, Figma, Supabase dev; `--scope local`, version pinned.
|
|
688
723
|
|
|
689
|
-
###
|
|
690
|
-
-
|
|
691
|
-
-
|
|
724
|
+
### Changed
|
|
725
|
+
- Playwright and Chrome DevTools MCP were removed from the web template's `.mcp.json`; `/findings-perf` and `/findings-ux` ask and add them when needed.
|
|
726
|
+
- Shield: `vercel promote` and `vercel rollback` also ask (they change the prod environment).
|
|
692
727
|
|
|
693
|
-
###
|
|
694
|
-
-
|
|
695
|
-
-
|
|
696
|
-
- `docs/architecture/stack.md`: "Doğrulama"
|
|
728
|
+
### Adapt by hand
|
|
729
|
+
- In a web project's `.mcp.json`, removing the `playwright` and `chrome-devtools` entries is optional (it saves context; they can be added from the catalog when needed).
|
|
730
|
+
- In a web project, add `Bash(npx -y @playwright/cli@0.1.22 open:*)` to `.claude/settings.json` → `permissions.allow`, and one line in the same form each for `snapshot`, `console`, `requests`, `screenshot` (3.11.1).
|
|
731
|
+
- `docs/architecture/stack.md`: in the "Doğrulama" (verification) section, Playwright CLI instead of Playwright MCP; the "MCP" line and the schema rule as in the kit's template (web and mobile).
|
|
697
732
|
|
|
698
733
|
## [3.10.1] - 2026-10-23
|
|
699
734
|
|
|
700
|
-
###
|
|
701
|
-
- `tools.mjs`
|
|
735
|
+
### Security
|
|
736
|
+
- The `tools.mjs` permission was narrowed (post-commit security review): status, `--gerekli`, `--olc` and `--kapat` are allowed; `--ac` always asks. Enabling a package runs plugin hooks with the user's authority.
|
|
702
737
|
|
|
703
|
-
###
|
|
704
|
-
- 3.10.0
|
|
738
|
+
### Adapt by hand
|
|
739
|
+
- If you applied 3.10.0, replace the `Bash(node .claude/hooks/tools.mjs:*)` line in `.claude/settings.json` → `permissions.allow` with the kit's four narrow lines, and add `Bash(node .claude/hooks/tools.mjs --ac:*)` to `permissions.ask`.
|
|
705
740
|
|
|
706
741
|
## [3.10.0] - 2026-10-23
|
|
707
742
|
|
|
708
|
-
###
|
|
709
|
-
- **
|
|
710
|
-
- `node .claude/hooks/tools.mjs --olc`:
|
|
711
|
-
-
|
|
743
|
+
### Added
|
|
744
|
+
- **Context packages and `/tools`.** Plugins were split into core (always on) and packages. `tasarim` (taste-skill, ui-ux-pro-max, gsap-skills), `guvenlik` (Trail of Bits 7-pack, claude-security), `yayin` (understand-anything, session-report) and `video` (remotion) come switched off. `/design`, `/findings-security`, `/findings-all` and `/release first` check with `tools.mjs --gerekli <paket>` in their first step and, if the package is off, ask whether to switch it on, with the cost. Switching on affects only this machine (`.claude/settings.local.json`). Why: the skill list is limited to 1% of the context; when it overflows, descriptions drop and skills get missed.
|
|
745
|
+
- `node .claude/hooks/tools.mjs --olc`: measures the skill and agent description load of installed plugins. `/maintain monthly` checks the context budget.
|
|
746
|
+
- New marketplaces: `gsap-skills` (GreenSock, official) and `understand-anything` (off; its use will be tied to the commands in a later release).
|
|
712
747
|
|
|
713
|
-
###
|
|
714
|
-
- `motion-video` Remotion
|
|
715
|
-
- `/start`
|
|
716
|
-
-
|
|
748
|
+
### Changed
|
|
749
|
+
- `motion-video` switches Remotion on with `tools.mjs --ac video`.
|
|
750
|
+
- The `/start` Light profile now switches off only hookify and claude-md-management; package plugins are already off in every profile.
|
|
751
|
+
- The dashboard shows packages left on in the "Dikkat" (attention) list.
|
|
717
752
|
|
|
718
|
-
###
|
|
719
|
-
- `.claude/settings.json`
|
|
720
|
-
- `CLAUDE.md`:
|
|
753
|
+
### Adapt by hand
|
|
754
|
+
- `.claude/settings.json` belongs to the project and does not change on update. To use the packages, set these to `false` in `enabledPlugins`: `taste-skill@taste-skill`, `ui-ux-pro-max@ui-ux-pro-max-skill`, the 7 Trail of Bits plugins, `claude-security@claude-plugins-official`, `session-report@claude-plugins-official`. Add the `gsap-skills` and `understand-anything` marketplaces to `extraKnownMarketplaces`; for permissions, see the security item above. Example: the kit's `.claude/settings.json` file.
|
|
755
|
+
- `CLAUDE.md`: the package sentence at the end of the "Use the right skill" item (the kit's `CLAUDE.md`).
|
|
721
756
|
|
|
722
757
|
## [3.9.3] - 2026-10-23
|
|
723
758
|
|
|
724
|
-
###
|
|
725
|
-
- Antigravity
|
|
759
|
+
### Fixed
|
|
760
|
+
- The Antigravity read protection also checks nested arguments: `.env` and `secrets/` paths inside arrays or objects are blocked too.
|
|
726
761
|
|
|
727
762
|
## [3.9.2] - 2026-10-23
|
|
728
763
|
|
|
729
|
-
###
|
|
730
|
-
- Antigravity
|
|
764
|
+
### Fixed
|
|
765
|
+
- The Antigravity read protection looks for `.env` and `secrets/` paths in all tools (`matcher: "*"`) and in any text in the arguments. So an unknown read tool is covered too. The `secrets` folder itself is also blocked.
|
|
731
766
|
|
|
732
|
-
###
|
|
733
|
-
-
|
|
767
|
+
### Known limits
|
|
768
|
+
- A content search in the project root (`grep_search`, `grep -r` in the shell) can reach the contents of `.env`. The hook cannot filter the search result. Blocking root search in a project that has a `.env` file would make search unusable.
|
|
734
769
|
|
|
735
|
-
###
|
|
736
|
-
-
|
|
770
|
+
### Adapt by hand
|
|
771
|
+
- If you changed `.agents/hooks.json` in the project, set the `kit-okuma-korumasi` → `matcher` value to `"*"`.
|
|
737
772
|
|
|
738
773
|
## [3.9.1] - 2026-10-23
|
|
739
774
|
|
|
740
|
-
|
|
775
|
+
Findings from the automatic post-release security review (they affect only Codex and Antigravity).
|
|
741
776
|
|
|
742
|
-
###
|
|
743
|
-
-
|
|
744
|
-
-
|
|
745
|
-
- Antigravity
|
|
777
|
+
### Fixed
|
|
778
|
+
- The rule against changing protection files from the shell also catches commands that write the path without a slash (`rm -r .claude`). Reverting with `git checkout` and `git restore` also asks.
|
|
779
|
+
- If the shield's two lists decide differently on the same command, the stricter one wins: `git push --force origin main` is now blocked instead of "ask".
|
|
780
|
+
- In Antigravity, `.env` and `secrets/` cannot be read with the read tools (`view_file`, `grep_search`, `list_dir`, `find_by_name`). This is the counterpart of the `Read(./.env)` block in Claude Code. `kit-okuma-korumasi` was added to `.agents/hooks.json`.
|
|
746
781
|
|
|
747
|
-
###
|
|
748
|
-
- Codex
|
|
782
|
+
### Known limits
|
|
783
|
+
- In Codex, the hook script is found on Unix with `git rev-parse --show-toplevel`. If there is no git or the folder is not a repo, the hook does not run and the protection does not kick in. `init` creates a git repo, so this does not happen in a normal install.
|
|
749
784
|
|
|
750
|
-
###
|
|
751
|
-
-
|
|
785
|
+
### Adapt by hand
|
|
786
|
+
- If you changed `.agents/hooks.json` in the project, `/kit-update` brings the new version as `.kit-new`; add the `kit-okuma-korumasi` section by hand.
|
|
752
787
|
|
|
753
788
|
## [3.9.0] - 2026-10-23
|
|
754
789
|
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
###
|
|
758
|
-
- **`AGENTS.md`:**
|
|
759
|
-
- **`kit.mjs --tool claude,codex,antigravity`** (`init`, `install`, `update`):
|
|
760
|
-
- Codex
|
|
761
|
-
- Hook
|
|
762
|
-
- **Hook
|
|
763
|
-
- Codex:
|
|
764
|
-
- Antigravity: `toolCall.name/args`
|
|
765
|
-
- Codex
|
|
766
|
-
-
|
|
767
|
-
- **Claude Code
|
|
768
|
-
-
|
|
769
|
-
- `freeze-guard --off`
|
|
770
|
-
- `.env`
|
|
771
|
-
-
|
|
772
|
-
- Fail-closed:
|
|
773
|
-
-
|
|
774
|
-
-
|
|
775
|
-
- Codex
|
|
776
|
-
- **`/start`
|
|
777
|
-
-
|
|
778
|
-
-
|
|
779
|
-
|
|
780
|
-
###
|
|
781
|
-
- **`init`
|
|
782
|
-
- `--tool`
|
|
783
|
-
-
|
|
784
|
-
-
|
|
785
|
-
- `git push`
|
|
786
|
-
-
|
|
787
|
-
- "Komutlar", "
|
|
788
|
-
|
|
789
|
-
###
|
|
790
|
-
-
|
|
791
|
-
- Antigravity IDE
|
|
792
|
-
- Codex
|
|
793
|
-
-
|
|
794
|
-
-
|
|
795
|
-
- Codex
|
|
796
|
-
-
|
|
797
|
-
|
|
798
|
-
###
|
|
799
|
-
- **`AGENTS.md`
|
|
800
|
-
- **
|
|
801
|
-
- **`.claude/settings.json` → `permissions.ask`:** `Edit(./AGENTS.md)`, `Edit(./.codex/**)`
|
|
802
|
-
- **`.claude/structure.json` → `allow`:** `AGENTS.md`, `.agents/**`
|
|
790
|
+
The kit now also works in OpenAI Codex and Google Antigravity: rules, commands and protections. The board agents, the question interface and the status line stay Claude Code-only. Basis: the official hook and skill docs of both tools.
|
|
791
|
+
|
|
792
|
+
### Added
|
|
793
|
+
- **`AGENTS.md`:** The shared rules (core rules, definition of done, Never, Git, Komutlar, project name) moved here. All three tools read this file. `CLAUDE.md` imports it with `@AGENTS.md` and keeps the Claude Code-specific rules (the skill table, the limit). The rules Claude Code sees did not change; only the order changed and a counterpart section for the other two tools was added.
|
|
794
|
+
- **`kit.mjs --tool claude,codex,antigravity`** (`init`, `install`, `update`): More than one tool can be selected. If this option is not given, `init` asks in the terminal. The choice is written to the `.kit.json` → `tool` field. Claude Code files are always installed.
|
|
795
|
+
- If Codex or Antigravity is selected, `.agents/skills/<ad>/SKILL.md` is generated from the `.claude/commands/*.md` and `.claude/skills/` files. Codex calls them with `$start` or `/skills`, Antigravity with `/start`. The source stays single; no copies are kept in the kit repo. The copies are refreshed on every update.
|
|
796
|
+
- Hook settings: `.codex/hooks.json` (Codex) and `.agents/hooks.json` (Antigravity). Their templates are under `kit/tools/<araç>/`. On update, the same rule as the other kit files applies: refreshed if not changed, delivered as `.kit-new` if changed.
|
|
797
|
+
- **Hook input/output layer (`.claude/hooks/arac.mjs`):** The secret block, destructive command shield, package gate, structure guard, edit lock and session-start hook read the format of all three tools and write the decision in that tool's format.
|
|
798
|
+
- Codex: the same fields as Claude. File edits arrive with `apply_patch`; added, updated and moved files are extracted from the patch text.
|
|
799
|
+
- Antigravity: the `toolCall.name/args` format. Supported tools: `run_command`, `write_to_file`, `replace_file_content`, `multi_replace_file_content`. The decision is written as `decision`, the session note as `injectSteps`.
|
|
800
|
+
- Codex has no "ask" decision (`ask`); if one is given, the tool still runs. So in Codex "ask" turns into a block and the AI is told to ask the user (the user decides).
|
|
801
|
+
- The project root is taken from `cwd` in the input in Codex and from `workspacePaths` in Antigravity.
|
|
802
|
+
- **Counterpart of the Claude Code permission list (Codex, Antigravity):** These tools have no `.claude/settings.json` permissions. Following the RET decision of the security audit, counterparts were added to the hook. Applied only in these two tools; Claude Code's behavior does not change.
|
|
803
|
+
- Blocked commands: `rm -rf`, bulk deletion on Windows, `git reset --hard`, `git push --force` and access to `.env` and `secrets/`.
|
|
804
|
+
- `freeze-guard --off` asks.
|
|
805
|
+
- Writing to `.env` files is blocked. Writing to these files asks: `CLAUDE.md`, `AGENTS.md`, `.claude/**` (lock file included), `.codex/**`, `.agents/hooks.json`, `.mcp.json`, `.github/workflows/**`. In Codex "ask" turns into a block.
|
|
806
|
+
- The secret block also scans the shell command (heredoc, `echo > dosya`).
|
|
807
|
+
- Fail-closed: If the patch header cannot be understood, the whole patch is scanned and the lock blocks. In Antigravity, all arguments are scanned whatever the name of the content field; if there is no target path, the lock blocks.
|
|
808
|
+
- The project root is found from the hook script's own location (`<proje>/.claude/hooks/`); it does not depend on the cwd or on markers an agent could open (`.git`). So the lock and structure guard work even if Codex is opened in a subfolder. Relative patch paths are resolved against the session's folder.
|
|
809
|
+
- A shell command that names a rule or protection file and writes or deletes it asks (`rm`, `sed -i`, `>`, `cp`, `Remove-Item`…). Running the kit scripts (`node .claude/hooks/...`) is free.
|
|
810
|
+
- Codex detection: if `CLAUDE_PROJECT_DIR` is missing, the input counts as Codex (ask turns into a block).
|
|
811
|
+
- **`/start` and `/adopt` Step 0c:** The tools to use in the project are asked with a multi-select. If chosen during `init`, it is only announced.
|
|
812
|
+
- The dashboard header shows tools other than Claude Code. `AGENTS.md`, `.agents/**` and `.codex/**` were added to the structure map.
|
|
813
|
+
- Tests (`kit/tests/arac.test.mjs`): A secret-writing attempt is blocked in the input format of all three tools. The bypass paths found in the audit were added as adversarial tests: a patch header with spaces, a field name change, a subfolder, protection file and lock deletion, forbidden commands, writing a secret through the shell, Codex input without turn_id. The shield, structure guard, edit lock and session start are also tested in every format. It is also tested that `init --tool` generates the right files, that update refreshes the copies, and that a hook setting the user changed is kept.
|
|
814
|
+
|
|
815
|
+
### Changed
|
|
816
|
+
- **`init` in a non-empty folder does not overwrite the Codex and Antigravity files either.** The project's own `.agents/skills/` files are kept; the kit's version is placed next to them as `.kit-new`. If the project has an `AGENTS.md`, the kit's `CLAUDE.md` imports the kit's rules with the line `@AGENTS.md.kit-new` until `/adopt` Step 4.
|
|
817
|
+
- `init` that runs without `--tool` and non-interactively (for example run by the AI) leaves the `tool` field empty; `/start` or `/adopt` asks for the tool.
|
|
818
|
+
- The destructive command shield also catches `git clean` when the flags are written separately (`-f -d`, `-d -f`, `--force -d`). This fix affects Claude Code too.
|
|
819
|
+
- The secret block now blocks with `permissionDecision: deny` instead of exit code 2. The result is the same in Claude Code; the switch to this format was made because Antigravity does not document the exit code.
|
|
820
|
+
- The `git push` shield also catches the `-fu` and `+dal` forms; the `.env` rule covers all `.env*` files except `.env.example` (Codex and Antigravity only).
|
|
821
|
+
- The project name is read from `AGENTS.md` (status line, dashboard, notification). In projects from before 3.9.0, the name stays in `CLAUDE.md` and is still read from there.
|
|
822
|
+
- References to the "Komutlar", "definition of done" and "Never" lists now point to `AGENTS.md` (`/build`, `/release`, `/rollback`, `/retro`, `/wrap-up`, the decision protocol, the code review agent).
|
|
823
|
+
|
|
824
|
+
### Known limits
|
|
825
|
+
- The board and council agents, `AskUserQuestion`, the status line, limit reading, dashboard refresh (`Stop`), the commit gate and the reminder are not in Codex and Antigravity.
|
|
826
|
+
- It is not documented that skills are called with a slash in Antigravity IDE (it is documented in the App and CLI).
|
|
827
|
+
- In Codex, project hooks run once the folder is trusted and approved with `/hooks`.
|
|
828
|
+
- For shell commands, the hook only stops an accidental or single-step bypass. A glob (`rm .cl*/…`), splitting a path with `cd` and paths built with variables are not caught; the real limit is drawn by the tool's own sandbox.
|
|
829
|
+
- Writing a file with a shell command (`echo > dosya`, `sed -i`) does not hit the structure guard or the edit lock. It is the same in Claude Code, where shell commands come up for approval.
|
|
830
|
+
- In Codex, the hook script is called with `git rev-parse --show-toplevel` on Unix and with a relative path on Windows. So on Windows, Codex must be opened in the project root.
|
|
831
|
+
- The hook format of both tools was written according to the official docs and verified with tests. It has not been tried in the real tool yet.
|
|
832
|
+
|
|
833
|
+
### Adapt by hand
|
|
834
|
+
- **`AGENTS.md` and `CLAUDE.md`** (needed if you will use Codex or Antigravity, otherwise optional): The update adds `AGENTS.md` with placeholders; it does not touch the existing `CLAUDE.md`. Move the project name, the one-sentence description, the Komutlar section and, if present, the `## Proje kuralları` section to `AGENTS.md`. Then replace `CLAUDE.md` with the kit's new `CLAUDE.md` (`@AGENTS.md` + Claude-specific rules). If you skip this, Claude Code works as before, while Codex and Antigravity see the rules with placeholders.
|
|
835
|
+
- **Adding a tool:** `/kit-update --tool claude,codex`.
|
|
836
|
+
- **`.claude/settings.json` → `permissions.ask`:** Add the lines `Edit(./AGENTS.md)`, `Edit(./.codex/**)` and `Edit(./.agents/hooks.json)`. These files also carry rules and protection, so changes to them should need approval.
|
|
837
|
+
- **`.claude/structure.json` → `allow`:** Add the lines `AGENTS.md`, `.agents/**` and `.codex/**`.
|
|
803
838
|
|
|
804
839
|
## [3.8.0] - 2026-10-23
|
|
805
840
|
|
|
806
|
-
###
|
|
807
|
-
- **`/handoff
|
|
808
|
-
-
|
|
809
|
-
-
|
|
810
|
-
-
|
|
811
|
-
- **`/research` (
|
|
812
|
-
-
|
|
813
|
-
-
|
|
814
|
-
-
|
|
815
|
-
|
|
816
|
-
###
|
|
817
|
-
- **
|
|
818
|
-
-
|
|
819
|
-
-
|
|
820
|
-
-
|
|
821
|
-
|
|
822
|
-
###
|
|
823
|
-
- `CLAUDE.md
|
|
841
|
+
### Added
|
|
842
|
+
- **`/handoff`:** For continuing from the same place when a project passes to another person or account (a teammate, a corporate account, a closing account).
|
|
843
|
+
- The person handing over runs `/handoff`: the `/wrap-up` steps are applied and a handoff note is written to `docs/workflow/handoff.md`. The note holds where things were left, pending decisions, needed accounts and only the names of environment variables (never the values). Then a commit and push are suggested.
|
|
844
|
+
- The person taking over runs `/handoff devral`: the note is summarized; plugins, dependencies and tests are installed and run; the next task is stated.
|
|
845
|
+
- A pending handoff note shows on screen at session start (`Devir notu var: /handoff devral`) and in the dashboard's "Dikkat" (attention) list (tested).
|
|
846
|
+
- **`/research` (literature and market research):** Academic papers (the Semantic Scholar and arXiv open interfaces), similar projects on GitHub (`gh search repos`) and commercial products are scanned.
|
|
847
|
+
- The report is written under `docs/research/`: category tables, a gap map, opportunities. It already had a place in the dashboard.
|
|
848
|
+
- Features to add are asked with a multi-select; the selected ones go into the PRD and the roadmap.
|
|
849
|
+
- Depth is asked with its cost: quick ~10-15%, deep ~25-35%. In `/start` Step 1b and `/adopt` Step 3b it is offered as an optional, expensive step.
|
|
850
|
+
|
|
851
|
+
### Changed
|
|
852
|
+
- **The limit no longer stops work, it only warns.** In real use, the "stop safely" rule at 90% cut work off almost completely and the user had to persuade it to continue. The new rule:
|
|
853
|
+
- A reminder at 90%, a "very low" warning at 95% (where we left off is saved silently), a "work may be left unfinished" warning at 99%.
|
|
854
|
+
- Work continues unless the user says "stop". The options question at yellow and red level was also dropped; the cost is stated in one line and the options are offered if asked.
|
|
855
|
+
- Affected places: `docs/workflow/usage-limits.md`, `CLAUDE.md` rule 4, `/build`, `/plan-task`, `/start`, `/board`.
|
|
856
|
+
|
|
857
|
+
### Adapt by hand
|
|
858
|
+
- Rule 4 of the project's `CLAUDE.md`: replace the limit sentence with the new version in the kit's `CLAUDE.md`. If you do not, the old "stop safely at 90%" rule stays in force in the project.
|
|
824
859
|
|
|
825
860
|
## [3.7.0] - 2026-10-23
|
|
826
861
|
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
###
|
|
830
|
-
- **`kit.mjs init` (
|
|
831
|
-
-
|
|
832
|
-
-
|
|
833
|
-
- `.kit.json` → `type: null` "
|
|
834
|
-
- `install --type <tip> --project <yol>`:
|
|
835
|
-
-
|
|
836
|
-
- **`/adopt` (
|
|
837
|
-
-
|
|
838
|
-
-
|
|
839
|
-
- PRD, stack,
|
|
840
|
-
- CLAUDE.md
|
|
841
|
-
-
|
|
842
|
-
-
|
|
843
|
-
|
|
844
|
-
###
|
|
845
|
-
- `/start`
|
|
846
|
-
- README
|
|
847
|
-
|
|
848
|
-
###
|
|
849
|
-
- `CLAUDE.md
|
|
862
|
+
The kit and the project can now sit in separate folders, and existing projects can be brought into the kit. Both come from feedback on a real project trial.
|
|
863
|
+
|
|
864
|
+
### Added
|
|
865
|
+
- **`kit.mjs init` (install and detach):** The kit runs from the folder where it sits and installs the project into the target folder (`node vibe-kit/kit/kit.mjs init`, the default target is the current folder). The kit folder is not touched and can be reused for several projects.
|
|
866
|
+
- If the project folder has no git repo, it creates one. If the kit is inside the project folder, it adds it to `.gitignore`.
|
|
867
|
+
- In a non-empty folder it does not overwrite the project's files: the kit's version is placed next to them as `.kit-new`. `.gitignore` is merged line by line, `.claude/settings.json` deeply; the project's values are kept.
|
|
868
|
+
- `.kit.json` → `type: null` means "installed, type pending". The status line, dashboard and session start show this as a `/start` or `/adopt` suggestion.
|
|
869
|
+
- `install --type <tip> --project <yol>`: adds the type layer to a project installed with init. Placeholders that init placed and the user did not change are overwritten; the project's own files are not. The kit folder is not deleted.
|
|
870
|
+
- Tested: an empty folder, a non-empty folder, rejection of a second init, then `update`.
|
|
871
|
+
- **`/adopt` (bring an existing project into the kit):** A 9-step alignment wizard.
|
|
872
|
+
- Scan depth is asked with its cost (quick / deep + selected findings reports).
|
|
873
|
+
- The stack, structure, features, tests and git history are scanned. `.kit-new` files are asked one by one as decisions.
|
|
874
|
+
- The PRD, stack, architecture and README are derived from the code; the purpose, audience and "what do you dislike" are asked.
|
|
875
|
+
- CLAUDE.md is rewritten to match the kit's. The project-specific rules in the old file are asked with a multi-select and moved to the `## Proje kuralları` section; the old one goes to `docs/archive/`.
|
|
876
|
+
- Existing tests are run and evaluated. The correct behavior of critical flows is asked from the user so the code does not lock in wrong behavior.
|
|
877
|
+
- Alignment roadmap: in Phase 0 a safe baseline and critical flow tests, in Phase 1 moving feature by feature into the kit's folder structure (a separate branch, a working point in each task), in Phase 2 the findings, then new features.
|
|
878
|
+
|
|
879
|
+
### Changed
|
|
880
|
+
- `/start` Step 1 recognizes two install paths (template or init); if the folder has code, it suggests `/adopt`. Step 3 has the command for the init path.
|
|
881
|
+
- README and guide: The new install path became the main path, "Use this template" stays as an alternative.
|
|
882
|
+
|
|
883
|
+
### Adapt by hand
|
|
884
|
+
- The project's `CLAUDE.md`: the "Kurulum durumu" (setup status) line now also covers the `.kit.json` → `type: null` state and `/adopt` (see the kit's `CLAUDE.md`). No effect on projects that are already set up.
|
|
850
885
|
|
|
851
886
|
## [3.6.0] - 2026-10-23
|
|
852
887
|
|
|
853
|
-
|
|
888
|
+
The freeze is over. This release comes from feedback on trying the kit in the first real project (3.5.1).
|
|
854
889
|
|
|
855
|
-
###
|
|
856
|
-
- **
|
|
857
|
-
- **
|
|
858
|
-
- **
|
|
859
|
-
-
|
|
860
|
-
- **
|
|
890
|
+
### Added
|
|
891
|
+
- **Planning depth** (`/start` Step 0a): A second question, separate from the profile. Options: Quick (~25-35%), Standard (~50-70%), Detailed (~80-100%). Reason: even with the Light profile, the 9 steps used up the whole 5-hour limit and coding never started.
|
|
892
|
+
- **Cost gate on expensive steps:** Before the council in Step 4, the board in Step 6 and the design in Step 7, the estimated cost is stated, then it asks "Do it / Do it light / Leave for later". These steps were not removed. Those left for later enter Phase 0 as tasks. Cost table: `docs/workflow/usage-limits.md`.
|
|
893
|
+
- **Dashboard at the very start** (`/start` Step 0 item 6b): The dashboard is created and opening it in the browser is suggested. Decisions are written to the log the moment they are made, so the dashboard shows them step by step.
|
|
894
|
+
- **Next command on screen after `/clear`:** The session-start hook now shows the next command to the user too (`systemMessage`). Example: `Sıradaki: /build G-004 · ...`, `Devam: /start (adım 4/9)` (tested). `/wrap-up` gives the full command on the last line.
|
|
895
|
+
- **Installable on another computer:** `/start` Step 4 fills in the version file (`.nvmrc` / `.python-version`) and the README's Requirements/Setup section. `/build` updates the README when there is a new dependency. `/release` and the monthly `/maintain` clone into a clean folder and run an install test.
|
|
861
896
|
|
|
862
|
-
###
|
|
863
|
-
- **`/kit-update`
|
|
897
|
+
### Fixed
|
|
898
|
+
- **`/kit-update` did not work:** The command called `kit.mjs guncelle`, but the command is named `update`.
|
|
864
899
|
|
|
865
|
-
###
|
|
866
|
-
- `README.md
|
|
900
|
+
### Adapt by hand
|
|
901
|
+
- The project's `README.md`: add the "System dependencies" line and the lock file note to the Requirements section (template: `kit/project/README.md`).
|
|
867
902
|
|
|
868
903
|
## [3.5.1] - 2026-10-12
|
|
869
904
|
|
|
870
|
-
###
|
|
871
|
-
-
|
|
872
|
-
- `checkpoint.mjs --list --restore X --evet`
|
|
873
|
-
- `freeze-guard.mjs --set x --off`
|
|
874
|
-
- `freeze-guard.mjs --set .`
|
|
875
|
-
-
|
|
876
|
-
-
|
|
877
|
-
-
|
|
878
|
-
-
|
|
879
|
-
-
|
|
880
|
-
-
|
|
905
|
+
### Security
|
|
906
|
+
- **Permission list prefix hole** (found by the commit security review). Permission rules match the start of the command, but the scripts read arguments in any order. Result:
|
|
907
|
+
- `checkpoint.mjs --list --restore X --evet` did a restore without approval.
|
|
908
|
+
- `freeze-guard.mjs --set x --off` removed the edit lock without approval.
|
|
909
|
+
- `freeze-guard.mjs --set .` widened the lock to the whole project.
|
|
910
|
+
- Fix:
|
|
911
|
+
- In both scripts, only the first argument now decides what to do.
|
|
912
|
+
- An open lock can only be narrowed without approval.
|
|
913
|
+
- The permission list has only `freeze-guard --set` and `--status`; `--off` asks for approval.
|
|
914
|
+
- A test was added for each of the two holes.
|
|
915
|
+
- Known: `commit-gate.mjs --approve` stays in the permission list as a self-approval path of the same kind (3.4.0 note). Commit review is off in the Light profile.
|
|
881
916
|
|
|
882
917
|
## [3.5.0] - 2026-10-12
|
|
883
918
|
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
###
|
|
887
|
-
- **`/rollback` (
|
|
888
|
-
- `/build`
|
|
889
|
-
-
|
|
890
|
-
- `.gitignore`
|
|
891
|
-
-
|
|
892
|
-
- **
|
|
893
|
-
- **
|
|
894
|
-
-
|
|
895
|
-
-
|
|
896
|
-
-
|
|
897
|
-
-
|
|
898
|
-
- `/start`
|
|
899
|
-
-
|
|
900
|
-
|
|
901
|
-
###
|
|
902
|
-
- `kit-tests.yml`:
|
|
919
|
+
Last additions before the freeze. The kit is frozen with this release.
|
|
920
|
+
|
|
921
|
+
### Added
|
|
922
|
+
- **`/rollback` (go back to the last working state):** The `checkpoint.mjs` script was added (tested).
|
|
923
|
+
- `/build` and `/wrap-up` put a `calisan/...` tag as a working point when the tests are green.
|
|
924
|
+
- On rollback, unfinished work is stashed first, the files are brought to the target state and a new commit is made. So history is not deleted and the rollback can be undone too.
|
|
925
|
+
- Files in `.gitignore` (`.env`) are not touched. `reset --hard` is not used.
|
|
926
|
+
- The rollback command is not in the permission list; it asks for approval every time.
|
|
927
|
+
- **Narrator mode** (`.claude/output-styles/anlatici.md`): A "What happened?" block after every step (what I did, why, how you see it, a new concept) and plain-language explanations of errors. Asked in `/start` Step 0b; `.claude/settings.local.json` → `outputStyle: anlatici`.
|
|
928
|
+
- **Spend alarm** (`docs/operations/spend-alarms.md`):
|
|
929
|
+
- A table of ceilings and warnings per paid service.
|
|
930
|
+
- Provider settings (Anthropic, OpenAI, Vercel, Supabase, Google Cloud; verified on 2026-10-12).
|
|
931
|
+
- In-app protection: user quota, overall daily budget, the flag turning itself off at 100%.
|
|
932
|
+
- A card in the dashboard's Operations tab; an unset alarm falls into the "Dikkat" (attention) list (tested).
|
|
933
|
+
- `/start` Step 5 fills in the table; `/release` and `/maintain` check it.
|
|
934
|
+
- A **"If you know nothing: step by step"** section was added to the README: accounts, programs, creating a project, first questions, daily use. A short version was added to the guide too.
|
|
935
|
+
|
|
936
|
+
### Fixed
|
|
937
|
+
- `kit-tests.yml`: The job-level `if: hashFiles(...)` condition is not supported on GitHub and gave a "No jobs were run" error on every push. The condition was removed; `kit.mjs install` does not carry this file into the project anyway.
|
|
903
938
|
|
|
904
939
|
## [3.4.0] - 2026-10-12
|
|
905
940
|
|
|
906
|
-
|
|
941
|
+
Result of the first council evaluation: the kit was **frozen** with this release so it can be tried in a real project. From now on only blocking bugs will be fixed in the kit.
|
|
907
942
|
|
|
908
|
-
###
|
|
909
|
-
- **
|
|
910
|
-
-
|
|
911
|
-
- commit
|
|
912
|
-
-
|
|
943
|
+
### Added
|
|
944
|
+
- **Profile** (`/start` Step 0): One of the Light, Standard and Full profiles is chosen. Light is recommended on the Pro plan. The profile decides:
|
|
945
|
+
- which plugins are on
|
|
946
|
+
- commit review
|
|
947
|
+
- which meetings and decisions go to the council
|
|
913
948
|
|
|
914
|
-
|
|
915
|
-
-
|
|
949
|
+
In the Light profile the 6 core plugins stay on, commit review is off and there is no meeting council. The profile is written to the `progress.md` → `**Profil:**` line and shows in the dashboard's Now box.
|
|
950
|
+
- A test that really runs the hook commands with `bash` was added. Earlier tests only looked at the command text and had missed the notification bug below.
|
|
916
951
|
|
|
917
|
-
###
|
|
918
|
-
-
|
|
952
|
+
### Changed
|
|
953
|
+
- The decision council now convenes only for database and auth decisions; in the Full profile, for all one-way decisions. For other one-way decisions the architect's opinion is taken. Measurement: one council used about 12% of the 5-hour limit on the Pro plan.
|
|
919
954
|
|
|
920
|
-
###
|
|
921
|
-
- **
|
|
922
|
-
- **
|
|
923
|
-
- CHANGELOG
|
|
955
|
+
### Fixed
|
|
956
|
+
- **The commit gate kicked in when there was no board.** The `board-chair.md` that comes with the template was counted as a board member; so `/start`'s setup commit stopped, waiting for a board that was not set up yet. Found by: the council (the opus advisor).
|
|
957
|
+
- **The long-job notification never worked.** The quote in the Stop hook command was in the wrong place (`notify.mjs --stop` was read as a single path) and Node crashed with "module not found".
|
|
958
|
+
- The CHANGELOG heading still had the old command name (`/kit-guncelle`).
|
|
924
959
|
|
|
925
|
-
###
|
|
926
|
-
-
|
|
927
|
-
-
|
|
960
|
+
### Known, left open (by the freeze decision)
|
|
961
|
+
- `--approve` in the commit gate stays in the permission list; the agent can open the gate itself. Commit review is already off in the Light profile.
|
|
962
|
+
- In the council count, an ABARTILI vote counts as an objection and a 1-1 tie with 2 votes comes out as "contested". This rule will be reviewed in real use.
|
|
928
963
|
|
|
929
964
|
## [3.3.2] - 2026-10-12
|
|
930
965
|
|
|
931
|
-
###
|
|
932
|
-
- `plugins-sync.mjs`:
|
|
933
|
-
-
|
|
934
|
-
- `claude plugin list --json`
|
|
966
|
+
### Changed
|
|
967
|
+
- `plugins-sync.mjs`: Plugins that are installed but switched off on this machine by a personal preference (settings.local.json or /plugin) are now reported with an info line. The script does not change this preference.
|
|
968
|
+
- Verified by trying: this is not a load error; Claude Code deliberately does not register the plugin.
|
|
969
|
+
- The `enabled` field in the `claude plugin list --json` output is computed from the folder the CLI runs in; `projectEnabled` shows the project setting.
|
|
935
970
|
|
|
936
971
|
## [3.3.1] - 2026-10-12
|
|
937
972
|
|
|
938
|
-
###
|
|
939
|
-
- **
|
|
940
|
-
- Trail of Bits'
|
|
941
|
-
- Remotion
|
|
942
|
-
-
|
|
973
|
+
### Fixed
|
|
974
|
+
- **Plugin load error** (`/reload-plugins`: "1 error during load"). The project setting (`enabledPlugins`) switched plugins on but did not download them.
|
|
975
|
+
- Trail of Bits' 7 plugins and Anthropic's 5 plugins were not in the install record. In a headless session they gave a "not cached" error and did not load.
|
|
976
|
+
- For Remotion, even a `false` value gave the "enabled in project settings but isn't installed" error.
|
|
977
|
+
- In this repo all were installed at project scope and Remotion was left off. The load error count in the debug log went to 0, and the number of loaded skills went from 78 to 90.
|
|
943
978
|
|
|
944
|
-
###
|
|
945
|
-
- `plugins-sync.mjs` (
|
|
946
|
-
- `/start`
|
|
979
|
+
### Added
|
|
980
|
+
- `plugins-sync.mjs` (tested): Syncs the plugins in the project settings with the install record. By default it only lists; with `--kur` it installs missing ones at project scope and installs-then-disables the `false` ones. It does not use a shell (`execFileSync`).
|
|
981
|
+
- It runs with approval in the `/start` environment step, and `/kit-update` runs it when a new plugin arrives.
|
|
947
982
|
|
|
948
983
|
## [3.3.0] - 2026-10-12
|
|
949
984
|
|
|
950
|
-
###
|
|
951
|
-
- **
|
|
952
|
-
- **
|
|
953
|
-
- **
|
|
954
|
-
- `board-chair` (opus)
|
|
955
|
-
-
|
|
956
|
-
-
|
|
985
|
+
### Added
|
|
986
|
+
- **Council (three stages):** An adaptation of Karpathy's llm-council structure for the board (`.claude/board/council.md`).
|
|
987
|
+
- **Meeting council:** Applied in plan, end-of-phase, release and RET end-of-task meetings. Members first give independent opinions. Then each member votes on the others' findings without knowing who wrote them (DOĞRU, ABARTILI or YANLIŞ) and ranks the opinions. Last, the chair decides.
|
|
988
|
+
- **Decision council:** Runs for one-way door decisions and with `/board council <soru>`. 3 `council-advisor`s (haiku, sonnet, opus) answer the same question and rank each other anonymously. `board-chair` makes a recommendation; the "(Recommended)" option in AskUserQuestion comes from the council, and each option gets the council vote and the minority opinion.
|
|
989
|
+
- The `board-chair` (opus) and `council-advisor` agents were added.
|
|
990
|
+
- `council.mjs` was added for counting (tested). It computes the average rank, finding votes, contested findings and consensus in code. The chair cannot drop a contested CRITICAL finding.
|
|
991
|
+
- Minutes are written to the `docs/workflow/council/` folder. A new Council card was added to the dashboard's Board tab: the last decision, consensus, the number of contested and dropped findings, the overall ranking with identities, the last 10 minutes.
|
|
957
992
|
|
|
958
|
-
###
|
|
959
|
-
- `docs/workflow/decision-protocol.md` §2a:
|
|
960
|
-
- `.claude/board/rules.md`:
|
|
961
|
-
-
|
|
993
|
+
### Changed
|
|
994
|
+
- `docs/workflow/decision-protocol.md` §2a: In one-way door decisions, the decision council replaced the earlier single architect opinion. If the limit is red, it goes back to the old method.
|
|
995
|
+
- `.claude/board/rules.md`: Council meetings and step 2b in §4 were added. `council` was added to the `/board` command.
|
|
996
|
+
- The guide, dashboard and README were updated with 3.3.
|
|
962
997
|
|
|
963
998
|
## [3.2.0] - 2026-10-12
|
|
964
999
|
|
|
965
|
-
|
|
1000
|
+
Selections from ecosystem research (stars and maintenance status from the GitHub API, install details from the primary source).
|
|
966
1001
|
|
|
967
|
-
###
|
|
968
|
-
- **Anthropic
|
|
969
|
-
- **LSP:** `typescript-lsp` (web,
|
|
970
|
-
- **Stack
|
|
971
|
-
- **Maestro MCP**
|
|
972
|
-
- **
|
|
973
|
-
- **
|
|
974
|
-
-
|
|
1002
|
+
### Added
|
|
1003
|
+
- **Anthropic official plugins** (`claude-plugins-official`, every type): `security-guidance` (pattern warning while writing + commit review; the end-of-turn review is switched off with `ENABLE_STOP_REVIEW=0` to save quota), `claude-security` (`/findings-security` deep scan), `hookify`, `claude-md-management`, `session-report`.
|
|
1004
|
+
- **LSP:** `typescript-lsp` (web, mobile), `pyright-lsp` (backend). Language server install is in `/start`.
|
|
1005
|
+
- **Stack skills:** Supabase `supabase` + `postgres-best-practices` (web, mobile; postgres in backend), `web-quality-skills` (web), Expo's official `expo` plugin (mobile, Expo MCP included), Vercel `react-best-practices` / `composition-patterns` / `react-native-guidelines` (`/start` copies them with `npx skills`).
|
|
1006
|
+
- **Maestro MCP** in the mobile `.mcp.json`; service MCP catalog `docs/workflow/mcp-catalog.md` (GitHub, Stripe, Vercel, PostHog, Figma, Firebase, Linear).
|
|
1007
|
+
- **Edit lock:** `/freeze <klasör> | off`, the `freeze-guard.mjs` hook (tested).
|
|
1008
|
+
- **Tokens and cost:** `cost.mjs` (ccusage, last 30 days per project) → a new card in the dashboard's Limit and cost tab (tested).
|
|
1009
|
+
- Security rules `.claude/claude-security-guidance.md` and `.claude/security-patterns.json` (service_role on the client, a secret in a public env, personal data in logs).
|
|
975
1010
|
|
|
976
|
-
###
|
|
977
|
-
- `CLAUDE.md`
|
|
978
|
-
- `/fix-bug`:
|
|
979
|
-
-
|
|
980
|
-
- `/retro`
|
|
981
|
-
- `/findings-security`: `claude-security`
|
|
982
|
-
-
|
|
1011
|
+
### Changed
|
|
1012
|
+
- Karpathy's four principles in `CLAUDE.md` rule 7; in the definition of "done", the verification command is run in this turn and its output is shown.
|
|
1013
|
+
- `/fix-bug`: a single variable, refutation evidence, a `/freeze` suggestion once the root cause is found.
|
|
1014
|
+
- Board: The Product member asks for a scope mode in the plan meeting (expand / hold / reduce).
|
|
1015
|
+
- `/retro` and `/wrap-up`: `claude-md-improver`, `/revise-claude-md`, `/hookify` suggestions. `/dashboard` and `/wrap-up` refresh the cost data.
|
|
1016
|
+
- `/findings-security`: `claude-security` scan; the output folder `CLAUDE-SECURITY-*/` is outside git and allowed in the structure map.
|
|
1017
|
+
- The guide, dashboard and README were updated with 3.2.
|
|
983
1018
|
|
|
984
|
-
###
|
|
985
|
-
-
|
|
1019
|
+
### Adapt by hand (existing projects)
|
|
1020
|
+
- Install the language server: `npm i -g typescript-language-server typescript` or `npm i -g pyright`. Maestro CLI for mobile.
|
|
986
1021
|
|
|
987
1022
|
## [3.1.1] - 2026-10-12
|
|
988
1023
|
|
|
989
|
-
###
|
|
990
|
-
-
|
|
991
|
-
-
|
|
992
|
-
- README:
|
|
1024
|
+
### Changed
|
|
1025
|
+
- The guide (`kit/guide.html`) was brought to v3.1: a dashboard with 10 tabs and the notification, the new skill table (source-research, logo-design, ui-motion, motion-video, Trail of Bits), a "Capability packages" section, all protection layers.
|
|
1026
|
+
- Dashboard: Brand pack, promo videos and research notes cards were added to the "Product and technical" tab (`uretimVarliklari`, tested).
|
|
1027
|
+
- README: the notification, the contents of the Product and technical tab; the rule "the guide, dashboard and README are updated" in the release steps.
|
|
993
1028
|
|
|
994
1029
|
## [3.1.0] - 2026-10-12
|
|
995
1030
|
|
|
996
|
-
###
|
|
997
|
-
- **
|
|
998
|
-
- `source-research`:
|
|
999
|
-
- `logo-design`:
|
|
1000
|
-
- `motion-video`: N01ennn'
|
|
1001
|
-
- `ui-motion`:
|
|
1031
|
+
### Added
|
|
1032
|
+
- **The kit's own skills** (`.claude/skills/`, managed by the kit):
|
|
1033
|
+
- `source-research`: Source policy (A-D trust levels, primary source first, cross-checking, date and version), the list of official Turkey sources, `docs/research/` records. Optional Firecrawl setup: the key stays in the user's environment variable.
|
|
1034
|
+
- `logo-design`: Brand brief questions, 4-6 SVG concepts (16 px legibility, one-color version), visual preview, refinement, brand pack (favicon, apple-touch, 192/512, mobile icons), `docs/design/brand.md`.
|
|
1035
|
+
- `motion-video`: Adapted from N01ennn's "UI motion design" prompt. A closed-form spring function (verified with a test), beat map, 4-frame approval, motion blur from 240 fps subframes, loop seam and determinism check. Remotion option.
|
|
1036
|
+
- `ui-motion`: In-app motion rules (duration tokens, spring settings, reduced motion, performance; Motion and Reanimated).
|
|
1002
1037
|
- **MCP:**
|
|
1003
|
-
- Context7
|
|
1004
|
-
- Chrome DevTools MCP web
|
|
1005
|
-
- Playwright
|
|
1006
|
-
- **Trail of Bits
|
|
1007
|
-
- **Remotion
|
|
1008
|
-
- **
|
|
1009
|
-
- **Skill
|
|
1010
|
-
- **
|
|
1038
|
+
- Context7 in every type (remote HTTP).
|
|
1039
|
+
- Chrome DevTools MCP in web.
|
|
1040
|
+
- Playwright and Chrome DevTools versions were pinned (`@latest` removed).
|
|
1041
|
+
- **Trail of Bits security plugins** (7): connected to the security lens and to `security-auditor`.
|
|
1042
|
+
- **Remotion official plugin:** Defined, off by default.
|
|
1043
|
+
- **Notification hook** (`notify.mjs`): A desktop notification arrives when Claude is waiting for a question or approval (Notification) and when a job longer than 90 seconds ends (Stop). Windows, macOS and Linux are supported.
|
|
1044
|
+
- **Skill budget:** In backend projects the interface design plugins come switched off. Budget rules were added to `docs/workflow/skills.md`.
|
|
1045
|
+
- **Structure map:** The `marketing/**` area was added (promo video sources; frames and outputs are outside git).
|
|
1011
1046
|
|
|
1012
1047
|
## [3.0.0] - 2026-10-12
|
|
1013
1048
|
|
|
1014
|
-
|
|
1049
|
+
Professional structure and findings reports. **Breaking change:** file and command names changed, the `.kit.json` format changed; 2.x projects cannot be updated automatically.
|
|
1015
1050
|
|
|
1016
|
-
###
|
|
1017
|
-
- **
|
|
1018
|
-
-
|
|
1019
|
-
- **
|
|
1051
|
+
### Changed
|
|
1052
|
+
- **File and folder names became English kebab-case** (content in Turkish). `docs/` was split into subfolders: `product`, `architecture`, `design`, `decisions`, `quality`, `security`, `legal`, `operations`, `workflow`, `findings`, `archive`.
|
|
1053
|
+
- Examples: `docs/PRD.md` → `docs/product/prd.md`, `docs/ILERLEME.md` → `docs/workflow/progress.md`, `docs/KARARLAR.md` → `docs/decisions/log.md`.
|
|
1054
|
+
- **Commands became English:**
|
|
1020
1055
|
|
|
1021
|
-
|
|
|
1056
|
+
| Old | New | Old | New |
|
|
1022
1057
|
|---|---|---|---|
|
|
1023
1058
|
| `/baslat` | `/start` | `/oturum-sonu` | `/wrap-up` |
|
|
1024
1059
|
| `/planla` | `/plan-task` | `/canliya-al` | `/release` |
|
|
@@ -1028,170 +1063,170 @@ Profesyonel yapı ve bulgu raporları. **Kırıcı değişiklik:** dosya ve komu
|
|
|
1028
1063
|
| `/durum` | `/dashboard` | `/kurul` | `/board` |
|
|
1029
1064
|
| `/kit-guncelle` | `/kit-update` | `/geri-bildirim` | `/user-feedback` |
|
|
1030
1065
|
|
|
1031
|
-
|
|
1032
|
-
- **
|
|
1033
|
-
- **Hook
|
|
1034
|
-
-
|
|
1035
|
-
-
|
|
1036
|
-
- **
|
|
1037
|
-
- **Kit
|
|
1066
|
+
Arguments are in English too: `setup`, `convene`, `first`, `on`/`off`, `weekly`/`monthly`/`quarterly`.
|
|
1067
|
+
- **Agents:** `inceleyici` → `code-reviewer`, `guvenlik-denetcisi` → `security-auditor`, `kurul-*` → `board-*`.
|
|
1068
|
+
- **Hook files:**
|
|
1069
|
+
- They got English names: `dashboard.mjs`, `commit-gate.mjs`, `package-gate.mjs`, `destructive-guard.mjs`, `usage.mjs`, `reminder.mjs`, `status-read.mjs`, `dashboard-data.mjs`.
|
|
1070
|
+
- Runtime state files were gathered under `.claude/state/`.
|
|
1071
|
+
- **Dashboard:** `DURUM.html` → `dashboard.html`. Design previews are under `.previews/`.
|
|
1072
|
+
- **Kit internal structure:**
|
|
1038
1073
|
- `kit/sablon` → `kit/templates`, `mobil` → `mobile`, `ekler` → `addons`.
|
|
1039
1074
|
- `SURUM`/`KAYNAK` → `VERSION`/`SOURCE`, `REHBER.html` → `guide.html`, `testler` → `tests`.
|
|
1040
|
-
-
|
|
1041
|
-
- `kit.mjs`: `kur`/`guncelle` → `install`/`update`, `--tip`/`--ekler`/`--proje` → `--type`/`--addons`/`--project`. `.kit.json`
|
|
1042
|
-
- **
|
|
1043
|
-
|
|
1044
|
-
###
|
|
1045
|
-
- **
|
|
1046
|
-
-
|
|
1047
|
-
- `structure-guard.mjs`:
|
|
1048
|
-
-
|
|
1049
|
-
- `sandbox/` (
|
|
1050
|
-
- **
|
|
1051
|
-
-
|
|
1052
|
-
-
|
|
1053
|
-
-
|
|
1054
|
-
-
|
|
1055
|
-
-
|
|
1056
|
-
- **
|
|
1057
|
-
- **README
|
|
1058
|
-
- **
|
|
1075
|
+
- Special file extensions: `.ekle` → `.append`, `.birlestir.json` → `.merge.json`. Conflict file: `.yeni` → `.kit-new`.
|
|
1076
|
+
- `kit.mjs`: `kur`/`guncelle` → `install`/`update`, `--tip`/`--ekler`/`--proje` → `--type`/`--addons`/`--project`. `.kit.json` fields are in English.
|
|
1077
|
+
- **Detailed decisions moved to ADR files:** `docs/decisions/adr-NNNN-*.md` (template `adr-template.md`). The decision log is `docs/decisions/log.md`.
|
|
1078
|
+
|
|
1079
|
+
### Added
|
|
1080
|
+
- **Protected project structure:**
|
|
1081
|
+
- A feature-based structure map per type (`.claude/structure.json`) and its guide (`docs/architecture/structure.md`).
|
|
1082
|
+
- `structure-guard.mjs`: The user is asked about a new file outside the map; clutter patterns (`*.bak`, `*-old.*`, copies, `temp/`, `deneme*`) are blocked; the whole repo is checked with `--check`.
|
|
1083
|
+
- A `structure` job was added to every type's CI. The board Architect and `/findings-tech` also check the structure.
|
|
1084
|
+
- `sandbox/` (a trial area outside git) and `docs/archive/` were added.
|
|
1085
|
+
- **Findings reports:**
|
|
1086
|
+
- Commands: `/findings-tech`, `/findings-business`, `/findings-security`, `/findings-ux`, `/findings-perf`, `/findings-legal`, `/findings-all`.
|
|
1087
|
+
- A shared protocol (`.claude/findings/protocol.md`), a lens per type (`lenses/`) and a report template.
|
|
1088
|
+
- At most 20 findings; severity score = impact + likelihood + spread + urgency; area health score; comparison with the previous report.
|
|
1089
|
+
- After the report: a fix plan, board opinion and transfer to the roadmap.
|
|
1090
|
+
- The business report derives the industry expert role from the PRD, has the user confirm it and does web research; the settings are kept in `docs/findings/config.md`.
|
|
1091
|
+
- **"Findings" tab in the dashboard:** health score per type and its change, report history; critical findings fall into the "Dikkat" (attention) area.
|
|
1092
|
+
- **README refreshed:** banner (`kit/assets/banner.svg`), badges, Mermaid diagrams.
|
|
1093
|
+
- **The kit's own CI:** `.github/workflows/kit-tests.yml` (not carried into the project).
|
|
1059
1094
|
|
|
1060
1095
|
## [2.3.0] - 2026-10-11
|
|
1061
1096
|
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
###
|
|
1065
|
-
- **
|
|
1066
|
-
- **
|
|
1067
|
-
- **
|
|
1068
|
-
- **
|
|
1069
|
-
- **CI
|
|
1070
|
-
- **
|
|
1071
|
-
- **
|
|
1072
|
-
- **
|
|
1073
|
-
- **
|
|
1074
|
-
- **`docs/METRIKLER.md`:**
|
|
1075
|
-
- **
|
|
1076
|
-
- **
|
|
1077
|
-
- **
|
|
1078
|
-
- **`docs/HESAPLAR.md`:**
|
|
1079
|
-
- **`docs/BAYRAKLAR.md`
|
|
1080
|
-
-
|
|
1081
|
-
- **
|
|
1082
|
-
- **`docs/BIRIM-EKONOMISI.md`:**
|
|
1083
|
-
-
|
|
1084
|
-
- **DURUM
|
|
1085
|
-
-
|
|
1086
|
-
-
|
|
1087
|
-
- "Dikkat"
|
|
1088
|
-
|
|
1089
|
-
###
|
|
1090
|
-
-
|
|
1091
|
-
-
|
|
1092
|
-
-
|
|
1093
|
-
- **
|
|
1097
|
+
15 suggestions based on research.
|
|
1098
|
+
|
|
1099
|
+
### Added
|
|
1100
|
+
- **Security:**
|
|
1101
|
+
- **Package gate** (`paket-kapisi.mjs`): A package the AI wants to install is verified against the registry before install. A nonexistent package is blocked. The user is asked about a package that is too new, little downloaded or very similar to a popular package (against slopsquatting).
|
|
1102
|
+
- **Destructive command shield** (`yikici-kalkan.mjs`): `DROP`, `TRUNCATE`, unconditional `DELETE`, `db reset`, volume deletion and `git clean` are blocked. The user is asked about prod deploy, push to the main branch and a remote database connection. The decision is made in Claude Code's permission layer; the AI cannot bypass it itself.
|
|
1103
|
+
- **Agent configuration protection:** Edits to `CLAUDE.md`, `.claude/`, `.mcp.json` and `.github/workflows/` need user approval. An "AI agent security" section was added to GUVENLIK.md.
|
|
1104
|
+
- **Semgrep in CI** and adversarial tests in TEST-PLANI (IDOR, unauthenticated access, role escalation, XSS, input limit, log injection).
|
|
1105
|
+
- **Quality:**
|
|
1106
|
+
- **Acceptance tests became a living specification:** PRD criteria have ids (`Ö-01.1`), and tests are written red before the code. The dashboard reads the JUnit report and catches the mismatch "marked but has no test / is red".
|
|
1107
|
+
- **Duplicate code check in CI** (jscpd, threshold 5%).
|
|
1108
|
+
- **Context health:** Context fill is shown in the status line. A UserPromptSubmit hook reminds the core rules every 12 messages and suggests `/clear` at the 50%/70% thresholds.
|
|
1109
|
+
- **`docs/METRIKLER.md`:** Task time, fix rate, rollbacks, duplicate code and acceptance rate are recorded monthly; the retro is done with this data.
|
|
1110
|
+
- **Operations:**
|
|
1111
|
+
- **Live monitoring workflow** (web, backend): Critical flows are tried hourly, and an issue is opened if one breaks.
|
|
1112
|
+
- **Cloud agents** (`claude-code-action`): a fix on the PR branch if CI is red (with loop and fork protection) and a weekly maintenance issue. They are switched on with a variable.
|
|
1113
|
+
- **`docs/HESAPLAR.md`:** Service, owner, 2FA and expiry dates; the dashboard warns about those expiring within 30 days.
|
|
1114
|
+
- **`docs/BAYRAKLAR.md` and the flag method in the STACKs:** An emergency switch-off does not need a deploy.
|
|
1115
|
+
- **Product:**
|
|
1116
|
+
- **One-way / two-way door:** A "Kapı" (door) column was added to the decision log. For one-way decisions, a board opinion and a detailed record are mandatory.
|
|
1117
|
+
- **`docs/BIRIM-EKONOMISI.md`:** The dashboard computes contribution margin, the break-even point and profit/loss at the target.
|
|
1118
|
+
- **The `/geri-bildirim` command and `docs/GERI-BILDIRIM.md`:** An inbox, themes and transfer to the roadmap.
|
|
1119
|
+
- **DURUM dashboard:**
|
|
1120
|
+
- A new "Operations" tab: accounts, flags, GitHub (CI, open PRs, live monitoring; with a 5-minute cache if gh is present).
|
|
1121
|
+
- Acceptance test table, metric trend, unit economics, feedback, a context card, a decision door filter.
|
|
1122
|
+
- The "Dikkat" (attention) list is sorted by severity; the first 6 items are shown, the rest opens.
|
|
1123
|
+
|
|
1124
|
+
### Changed
|
|
1125
|
+
- **The `docs/KARARLAR.md` decision log became 8 columns (Kapı).** The dashboard also reads the old 7-column table. *(Adapt by hand: KARARLAR.md table header)*
|
|
1126
|
+
- **A "Süre (dk)" (duration, min) column was added to `docs/MALIYET-GUNLUGU.md`.** *(Adapt by hand)*
|
|
1127
|
+
- **Ids were added to the `docs/PRD.md` acceptance criteria.** *(Adapt by hand)*
|
|
1128
|
+
- **Commands were updated:** `/baslat`, `/planla`, `/gelistir`, `/bakim`, `/retro`, `/canliya-al` and `/oturum-sonu` apply the new rules.
|
|
1094
1129
|
|
|
1095
1130
|
## [2.2.0] - 2026-10-11
|
|
1096
1131
|
|
|
1097
|
-
###
|
|
1098
|
-
- **DURUM.html
|
|
1099
|
-
-
|
|
1100
|
-
-
|
|
1101
|
-
-
|
|
1102
|
-
- 8
|
|
1103
|
-
-
|
|
1104
|
-
- **Stop hook
|
|
1105
|
-
- **`durum-oku.mjs`:**
|
|
1132
|
+
### Changed
|
|
1133
|
+
- **DURUM.html became the project owner's control panel:**
|
|
1134
|
+
- The top part has "Now" (phase, task, next step) and "Needs attention" areas. Here you see board RET, the limit, pending decisions, interrupted work, open issues, a stale ILERLEME and question mode.
|
|
1135
|
+
- Overall health badge: On track / Attention / Blocked.
|
|
1136
|
+
- Summary tiles: tasks, MVP acceptance criteria, decisions, board, the last 7 days of commits, limit.
|
|
1137
|
+
- 8 tabs: Overview, Roadmap (task list, active task highlighted), Decisions (topic filter), Board, Quality (checklists, code health, fix rate, critical flow tests, maintenance), Activity (14-day commit chart and a merged feed), Product and technical (PRD, MVP, stack, design, preview links, CHANGELOG), Limit and cost.
|
|
1138
|
+
- Light and dark theme, automatic refresh every 30 seconds, tab navigation with the keyboard.
|
|
1139
|
+
- **Stop hook:** Refreshes the dashboard after every Claude reply (spends no tokens).
|
|
1140
|
+
- **`durum-oku.mjs`:** Exposes its helper functions; reads task lists and last session info.
|
|
1106
1141
|
|
|
1107
1142
|
## [2.1.0] - 2026-10-11
|
|
1108
1143
|
|
|
1109
|
-
###
|
|
1110
|
-
- **
|
|
1111
|
-
- 10
|
|
1112
|
-
- `/baslat`
|
|
1113
|
-
-
|
|
1114
|
-
-
|
|
1115
|
-
- `/kurul`
|
|
1116
|
-
- **Commit
|
|
1117
|
-
- **Limit
|
|
1118
|
-
- `limit.mjs`
|
|
1119
|
-
- `docs/LIMIT-PLANI.md`:
|
|
1120
|
-
-
|
|
1121
|
-
-
|
|
1122
|
-
- **
|
|
1123
|
-
- **
|
|
1124
|
-
|
|
1125
|
-
###
|
|
1126
|
-
- **
|
|
1127
|
-
- `CLAUDE.md`
|
|
1128
|
-
-
|
|
1129
|
-
- **`/baslat` 9
|
|
1130
|
-
- **`guvenlik-denetcisi`:** `model: sonnet`
|
|
1131
|
-
- **
|
|
1144
|
+
### Added
|
|
1145
|
+
- **Expert board:**
|
|
1146
|
+
- 10 role templates (`.claude/kurul/`): Product, Architect, UX, Performance/SEO, KVKK, QA, DevOps, Mobile, API and AI. `guvenlik-denetcisi` is used as the security member.
|
|
1147
|
+
- In `/baslat` Step 6, a board is suggested by type, approved, and project-specific agents are generated as `.claude/agents/kurul-*.md`.
|
|
1148
|
+
- Meetings: plan, end-of-task, commit (light) and end-of-phase/release.
|
|
1149
|
+
- The board is an advisor; it stops work on a critical finding.
|
|
1150
|
+
- The `/kurul` command and the `docs/KURUL.md` meeting log.
|
|
1151
|
+
- **Commit gate hook** (`commit-kapisi.mjs`): The AI's commit does not pass without a light board review. Exempt only when just docs changed; it can be switched off via `docs/KURUL.md`.
|
|
1152
|
+
- **Limit awareness:**
|
|
1153
|
+
- `limit.mjs` and the status line read Claude Code's `rate_limits` information and cache it. On desktop the `get_usage` tool is used.
|
|
1154
|
+
- `docs/LIMIT-PLANI.md`: thresholds, cost estimate, options at yellow/red level, safe stopping.
|
|
1155
|
+
- Task costs are recorded in `docs/MALIYET-GUNLUGU.md`.
|
|
1156
|
+
- A "Kaldığı yer" (where we left off) section was added to `docs/ILERLEME.md`.
|
|
1157
|
+
- **Code map:** `/baslat` suggests installing codebase-memory-mcp; CLAUDE.md makes it the primary exploration tool.
|
|
1158
|
+
- **Status dashboard and session note:** Limit, board and "where we left off" information were added.
|
|
1159
|
+
|
|
1160
|
+
### Changed
|
|
1161
|
+
- **Startup load dropped from about 8,000 tokens to 1,700 tokens:**
|
|
1162
|
+
- `CLAUDE.md` now imports only `docs/ILERLEME.md`.
|
|
1163
|
+
- Protocol, skill and stack rules stay in CLAUDE.md as summaries; detailed docs are read when needed. *(Adapt by hand: CLAUDE.md)*
|
|
1164
|
+
- **`/baslat` became 9 steps** (new step: Board). *(Adapt by hand: the denominator of the `Başlangıç adımı` line in ILERLEME.md became 9)*
|
|
1165
|
+
- **`guvenlik-denetcisi`:** `model: sonnet` and the board output format were added.
|
|
1166
|
+
- **Commands were updated:** `/planla`, `/gelistir`, `/incele`, `/oturum-sonu`, `/canliya-al` and `/durum` now include board meetings and the limit check.
|
|
1132
1167
|
|
|
1133
1168
|
## [2.0.0] - 2026-10-11
|
|
1134
1169
|
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
###
|
|
1138
|
-
- **
|
|
1139
|
-
-
|
|
1140
|
-
-
|
|
1141
|
-
- **
|
|
1142
|
-
- **
|
|
1143
|
-
- **Skill
|
|
1144
|
-
- Caveman, Impeccable, Taste Skill (
|
|
1145
|
-
-
|
|
1146
|
-
- **
|
|
1147
|
-
-
|
|
1148
|
-
-
|
|
1149
|
-
- `/durum`
|
|
1150
|
-
- **`/baslat`
|
|
1151
|
-
- 8
|
|
1152
|
-
-
|
|
1153
|
-
- **
|
|
1154
|
-
- **
|
|
1155
|
-
-
|
|
1156
|
-
-
|
|
1157
|
-
|
|
1158
|
-
###
|
|
1159
|
-
- **Template
|
|
1160
|
-
-
|
|
1161
|
-
-
|
|
1162
|
-
- `/baslat
|
|
1163
|
-
- **
|
|
1164
|
-
- **
|
|
1165
|
-
- **`TASARIM.md`:**
|
|
1166
|
-
- **
|
|
1167
|
-
- **`/retro`:** Kit
|
|
1170
|
+
Question-driven flow and GitHub template structure. **Breaking change:** 1.x projects cannot be updated automatically (the `.kit.json` format and file layout changed).
|
|
1171
|
+
|
|
1172
|
+
### Added
|
|
1173
|
+
- **Decision protocol** (`docs/KARAR-PROTOKOLU.md`):
|
|
1174
|
+
- Every product, technical, design, content, data, security and cost decision is asked with AskUserQuestion.
|
|
1175
|
+
- The recommended option is first, and when each option is better is explained.
|
|
1176
|
+
- **Question mode:** Switched off and on per topic (`/soru`, or just saying "don't ask on design"). Decisions on a closed topic are recorded as "otomatik" (automatic).
|
|
1177
|
+
- **Visual preview:** Design decisions are asked with examples generated under `.onizleme/`.
|
|
1178
|
+
- **Skill routing** (`docs/SKILLER.md`):
|
|
1179
|
+
- Caveman, Impeccable, Taste Skill (by style direction), UI UX Pro Max, Humanizer, Ponytail, Matt Pocock skills.
|
|
1180
|
+
- These plugins are defined in `.claude/settings.json`; Claude Code suggests installing them when the project is opened.
|
|
1181
|
+
- **Reporting:**
|
|
1182
|
+
- A status block at the end of every answer.
|
|
1183
|
+
- A bottom status line (`statusline.mjs`).
|
|
1184
|
+
- The `/durum` command and the `DURUM.html` dashboard (`durum-panosu.mjs`).
|
|
1185
|
+
- **`/baslat` wizard:**
|
|
1186
|
+
- 8 steps: questioning the idea, project type, setup, technology, architecture, design, roadmap, closing.
|
|
1187
|
+
- It continues from the step where it stopped.
|
|
1188
|
+
- **A "Decision points" catalog in the STACK.md files:** Options for each type and when each is better.
|
|
1189
|
+
- **New commands:** `/tasarim`, `/soru`, `/durum`, `/kit-guncelle`.
|
|
1190
|
+
- **A decision log table in `docs/KARARLAR.md`.**
|
|
1191
|
+
- **New fields in `docs/ILERLEME.md`:** start step, question mode, pending decisions.
|
|
1192
|
+
|
|
1193
|
+
### Changed
|
|
1194
|
+
- **Template structure:**
|
|
1195
|
+
- The repo root is now the shared layer itself.
|
|
1196
|
+
- Types and add-ons are under `kit/sablon/`.
|
|
1197
|
+
- `/baslat` places the type with `node kit/kit.mjs kur` and deletes the `kit/` folder.
|
|
1198
|
+
- **The install tool moved to Node.js** (`kit/kit.mjs`). `kit.ps1` was removed.
|
|
1199
|
+
- **Type layers are applied by merging:** `.gitignore.ekle` and `.claude/settings.birlestir.json` are now merged with the files at the root.
|
|
1200
|
+
- **`TASARIM.md`:** Tokens moved to Impeccable's `DESIGN.md` file. TASARIM.md is now for the chosen direction, the decision log and lasting rules.
|
|
1201
|
+
- **Commands:** `/planla`, `/gelistir`, `/incele`, `/hata-ayikla`, `/canliya-al`, `/bakim`, `/retro` and `/oturum-sonu` were updated with decision-asking and skill steps.
|
|
1202
|
+
- **`/retro`:** Kit suggestions are now prepared as a branch in the kit repo and pushed with approval.
|
|
1168
1203
|
|
|
1169
1204
|
## [1.1.0] - 2026-10-11
|
|
1170
1205
|
|
|
1171
|
-
###
|
|
1172
|
-
- **
|
|
1173
|
-
- Claude Code
|
|
1174
|
-
-
|
|
1175
|
-
- GitHub Actions CI
|
|
1176
|
-
-
|
|
1177
|
-
- `inceleyici`
|
|
1178
|
-
- `/incele`
|
|
1179
|
-
- **
|
|
1180
|
-
- **MCP:** `.mcp.json` (Playwright, Supabase
|
|
1181
|
-
- **
|
|
1182
|
-
- **AI
|
|
1183
|
-
-
|
|
1184
|
-
- **`kit.ps1`:** `yeni`
|
|
1185
|
-
-
|
|
1186
|
-
|
|
1187
|
-
###
|
|
1188
|
-
- `yeni-proje.ps1`
|
|
1189
|
-
-
|
|
1190
|
-
-
|
|
1191
|
-
- Backend
|
|
1192
|
-
-
|
|
1206
|
+
### Added
|
|
1207
|
+
- **Automatic checks**
|
|
1208
|
+
- Claude Code hooks (`.claude/hooks/`): blocking secret writes, file formatting, git and ILERLEME state at session start.
|
|
1209
|
+
- Pre-commit check: husky + lint-staged for web/mobile, pre-commit for backend. Both scan for secrets.
|
|
1210
|
+
- GitHub Actions CI and Dependabot (for every type).
|
|
1211
|
+
- **Review**
|
|
1212
|
+
- The `inceleyici` and `guvenlik-denetcisi` subagents (`.claude/agents/`).
|
|
1213
|
+
- `/incele` now uses these agents.
|
|
1214
|
+
- **Verification:** A "produce evidence" step in `/gelistir`, a "Doğrulama" (verification) section in the STACK.md files, an evidence item in the definition of "done".
|
|
1215
|
+
- **MCP:** `.mcp.json` (Playwright, Supabase read-only, Sentry). `/bakim` can use them.
|
|
1216
|
+
- **New docs:** `docs/SOZLUK.md`, `docs/LANSMAN.md`, `docs/RETRO.md`; `docs/TASARIM.md` for web and mobile.
|
|
1217
|
+
- **AI add-on** (`-Ekler ai`): `docs/AI.md`, `evals/`, `prompts/`, an `.env.example` fragment.
|
|
1218
|
+
- **The `/retro` command:** writes lessons back to the project and the kit.
|
|
1219
|
+
- **`kit.ps1`:** `yeni` and `guncelle` operations. Files are tracked in the project with `.kit.json`; update does not overwrite files the user changed.
|
|
1220
|
+
- Tests: `testler/`.
|
|
1221
|
+
|
|
1222
|
+
### Changed
|
|
1223
|
+
- `yeni-proje.ps1` was removed, replaced by `kit.ps1 yeni`.
|
|
1224
|
+
- Pre-commit + CI (G-004) and SOZLUK/TASARIM (G-007) tasks were added to the roadmap's Phase 0; later task numbers shifted. *(Adapt by hand: YOL-HARITASI.md)*
|
|
1225
|
+
- New docs, hook and agent rules were added to `CLAUDE.md`. *(Adapt by hand)*
|
|
1226
|
+
- Backend dependency scanning became `uv run --with pip-audit pip-audit`. The old `uvx pip-audit` command was scanning its own environment, not the project's. *(Adapt by hand: STACK.md, settings.json)*
|
|
1227
|
+
- CI, branch protection, AI add-on and launch items were added to `CANLIYA-ALMA.md`.
|
|
1193
1228
|
|
|
1194
1229
|
## [1.0.0] - 2026-10-11
|
|
1195
1230
|
|
|
1196
|
-
###
|
|
1197
|
-
-
|
|
1231
|
+
### Added
|
|
1232
|
+
- First release: shared docs, 8 commands, web-saas / mobile / backend templates, `REHBER.html`.
|