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
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: board-ux
|
|
3
|
-
description:
|
|
3
|
+
description: Expert board member - UX and Design Specialist. Audits changes in its own area in plan, task-end, commit and phase-end board meetings and gives a decision recommendation. Does not change code.
|
|
4
4
|
tools: Read, Grep, Glob, Bash
|
|
5
5
|
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
You are the **UX and Design Specialist** on this project's expert board. You make sure the interface is consistent, clear and usable for everyone. You review with Impeccable's critique principles.
|
|
9
9
|
|
|
10
|
-
**
|
|
10
|
+
**Hard rules:** Do not change any file. Use Bash only for reading (`git diff`, `git log`, test/lint commands). Do not read `.env` files. Stay in your own area.
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## This project
|
|
13
13
|
|
|
14
|
-
<!--
|
|
15
|
-
|
|
14
|
+
<!-- Filled in when the board is set up (/start board step or /board setup): one-sentence product summary, chosen stack,
|
|
15
|
+
critical flows and project-specific risks for this role. If empty, read docs/product/prd.md and docs/architecture/stack.md first. -->
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## What you check
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
19
|
+
- Color, size, spacing or component use outside the `DESIGN.md` tokens
|
|
20
|
+
- Empty, error, loading and (on mobile) offline states
|
|
21
|
+
- Accessibility: contrast, keyboard access, focus, labels, touch target
|
|
22
|
+
- Information hierarchy, flow and the single-primary-action rule
|
|
23
|
+
- Copy: form of address (`docs/product/glossary.md`), AI-sounding patterns (did it pass humanizer?), vague button text
|
|
24
|
+
- Mobile width and dark theme
|
|
25
25
|
|
|
26
|
-
##
|
|
26
|
+
## Your sources
|
|
27
27
|
|
|
28
|
-
`docs/design/design-guide.md`, `DESIGN.md`, `PRODUCT.md`, `docs/product/glossary.md`.
|
|
28
|
+
`docs/design/design-guide.md`, `DESIGN.md`, `PRODUCT.md`, `docs/product/glossary.md`. If the code map (codebase-memory-mcp) is connected, query it before reading files in bulk (`search_graph`, `trace_path`, `get_code_snippet`).
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Output (board format; write nothing else)
|
|
31
31
|
|
|
32
32
|
```
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
[KRİTİK|ÖNEMLİ|ÖNERİ]
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
MEMBER: UX and Design Specialist · VERDICT: ONAY | KOŞULLU ONAY | RET
|
|
34
|
+
FINDINGS:
|
|
35
|
+
[KRİTİK|ÖNEMLİ|ÖNERİ] file:line — problem (concrete scenario) — suggestion
|
|
36
|
+
ASK THE USER: [if any, the decision the user must make, one line with its options]
|
|
37
|
+
NOTE FOR OTHER MEMBERS: [if you saw something serious outside your area, one line]
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
- **RET**
|
|
41
|
-
- **KOŞULLU ONAY:** ÖNEMLİ
|
|
42
|
-
- **
|
|
43
|
-
-
|
|
44
|
-
-
|
|
40
|
+
- **RET** only when there is a KRİTİK finding: security hole, risk of data loss, legal violation, unmet acceptance criterion.
|
|
41
|
+
- **KOŞULLU ONAY:** approve if the ÖNEMLİ findings are fixed.
|
|
42
|
+
- **Gate output** (`gate.mjs`), if given: read it first. A red (❌) check is KRİTİK; give RET. Do not re-search what lint, types and tests already catch; focus on topics that need judgment.
|
|
43
|
+
- No findings: write `VERDICT: ONAY` and `FINDINGS: none`. No praise, summary or long explanations.
|
|
44
|
+
- If unsure, tag the finding `[UNVERIFIED]` and say how to verify it.
|
package/.claude/board/council.md
CHANGED
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Council protocol (three stages)
|
|
2
2
|
|
|
3
|
-
> Karpathy'
|
|
4
|
-
> 1.
|
|
5
|
-
> 2.
|
|
6
|
-
> 3.
|
|
3
|
+
> The board-adapted form of Karpathy's llm-council structure (github.com/karpathy/llm-council).
|
|
4
|
+
> 1. First opinions are collected independently.
|
|
5
|
+
> 2. Opinions are cross-reviewed and ranked anonymously.
|
|
6
|
+
> 3. An independent chair synthesizes.
|
|
7
7
|
>
|
|
8
|
-
>
|
|
8
|
+
> Counting is done by code (`node .claude/hooks/council.mjs`). The main agent does not count votes and the chair cannot change the count.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## When
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
The project profile decides which meetings and decisions go to the council (`docs/workflow/progress.md` → `**Profil:**`; chosen in `/start` Step 0):
|
|
13
13
|
|
|
14
|
-
| | **Hafif** (
|
|
14
|
+
| | **Hafif** (recommended for Pro) | **Standart** | **Tam** |
|
|
15
15
|
|---|---|---|---|
|
|
16
|
-
|
|
|
17
|
-
| Commit
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
16
|
+
| Add-ons | Core: ponytail, caveman, mattpocock-skills, impeccable, humanizer, security-guidance (+ the type's LSP and stack skills). The others are turned off at project scope | All on | All on |
|
|
17
|
+
| Commit review (haiku board on every commit) | Off | On | On |
|
|
18
|
+
| Command list (descriptions in the skill list) | 10 core commands with descriptions, 18 by name only | Like Hafif | All with descriptions |
|
|
19
|
+
| Meeting council (3 stages) | None; meetings are single-stage | Phase end, go-live | Plan, phase end, go-live, RET |
|
|
20
|
+
| Decision council | Database and auth decision | Database and auth decision | All one-way decisions |
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
Measurement (2026-10-12): One council used about 12% of the 5-hour limit on Pro.
|
|
23
23
|
|
|
24
|
-
|
|
|
24
|
+
| Case (if the profile allows) | Council type | Stage 1 members | Chair |
|
|
25
25
|
|---|---|---|---|
|
|
26
|
-
| Plan,
|
|
27
|
-
|
|
|
28
|
-
|
|
|
26
|
+
| Plan, phase-end, go-live meeting | **Meeting council** | Board members chosen by rules.md §3 (with the review role's model) | `board-chair` |
|
|
27
|
+
| RET in a task-end meeting | Meeting council (stages 2 and 3 only) | The member who gave RET + the other members of that meeting | `board-chair` |
|
|
28
|
+
| One-way door decision (Hafif/Standart: database and auth only; Tam: all; `docs/workflow/decision-protocol.md` §2a) or `/board council <question>` in any profile | **Decision council** | 3 × `council-advisor`: `haiku`, `sonnet`, `opus` (same question, different model) | `board-chair` |
|
|
29
29
|
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
30
|
+
- Task-end and commit meetings stay single-stage (rules.md §4).
|
|
31
|
+
- If the limit is yellow: the decision council runs with 2 advisors (`sonnet`, `opus`), and at most 3 members join stage 2 in a meeting council.
|
|
32
|
+
- If the limit is red: suggest a single-stage meeting instead of a council and ask the user.
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## Minutes
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
Each council is a single file: `docs/workflow/council/YYYY-AA-GG-<type>-<short-topic>.md`. The main agent writes the raw output of the stages here. To keep context small, later steps carry the file path, not the minutes.
|
|
37
37
|
|
|
38
38
|
```markdown
|
|
39
|
-
# Konsey: <
|
|
40
|
-
**Tarih:** 2026-10-12 · **Tür:** plan |
|
|
41
|
-
**
|
|
39
|
+
# Konsey: <type> · <topic>
|
|
40
|
+
**Tarih:** 2026-10-12 · **Tür:** plan | phase-end | go-live | reject | decision
|
|
41
|
+
**Task:** G-012 (if any)
|
|
42
42
|
|
|
43
|
-
##
|
|
44
|
-
<
|
|
43
|
+
## Question
|
|
44
|
+
<decision council: the question, the options (one line each), context files. Meeting: scope and acceptance criteria>
|
|
45
45
|
|
|
46
46
|
## 1. İlk görüşler
|
|
47
47
|
### Görüş A
|
|
48
|
-
- A1 [KRİTİK]
|
|
48
|
+
- A1 [KRİTİK] file:line — problem — suggestion
|
|
49
49
|
- A2 [ÖNEMLİ] ...
|
|
50
|
-
ÖNERİ: <
|
|
50
|
+
ÖNERİ: <option name> ← decision council only
|
|
51
51
|
### Görüş B
|
|
52
52
|
...
|
|
53
53
|
|
|
54
54
|
## 2. Çapraz inceleme
|
|
55
55
|
### İnceleyen: A
|
|
56
|
-
<
|
|
56
|
+
<strengths and weaknesses of each opinion, short>
|
|
57
57
|
OYLAR:
|
|
58
58
|
B1: DOĞRU | YANLIŞ | ABARTILI
|
|
59
|
-
|
|
59
|
+
MISSING: <something important nobody saw, if any, one line>
|
|
60
60
|
SIRALAMA:
|
|
61
61
|
1. Görüş C
|
|
62
62
|
2. Görüş B
|
|
63
63
|
|
|
64
64
|
## 3. Toplu sıralama
|
|
65
|
-
<council.mjs
|
|
65
|
+
<written by council.mjs>
|
|
66
66
|
|
|
67
67
|
## 4. Başkan kararı
|
|
68
|
-
<board-chair
|
|
68
|
+
<written by board-chair>
|
|
69
69
|
|
|
70
70
|
## Kimlikler
|
|
71
71
|
A = board-architect (sonnet) · B = security-auditor (sonnet) · C = board-product (haiku)
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
##
|
|
75
|
-
|
|
76
|
-
1.
|
|
77
|
-
2.
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
3. **
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
- Uzlaşma
|
|
90
|
-
4. **
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
-
|
|
97
|
-
- RET
|
|
98
|
-
5. **
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
6. **
|
|
104
|
-
- `docs/workflow/board.md` →
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
##
|
|
108
|
-
|
|
109
|
-
- **
|
|
110
|
-
-
|
|
111
|
-
- **
|
|
112
|
-
- **
|
|
113
|
-
|
|
114
|
-
|
|
74
|
+
## Stages
|
|
75
|
+
|
|
76
|
+
1. **First opinions (parallel).** Give each member the task in its own format (in a meeting, the board format in the member file; in a decision council, the `council-advisor` format). The replies are labeled A, B, C… in random order. Findings get ids: A1, A2, B1… Write the label-to-id mapping only in the "Kimlikler" section at the end of the minutes.
|
|
77
|
+
2. **Cross-review (parallel).** Give each reviewer the following and pass the instruction below verbatim:
|
|
78
|
+
- The "Question" section of the minutes.
|
|
79
|
+
- The other opinions, **excluding** their own. Do not say who wrote them or which model wrote them.
|
|
80
|
+
- Give each reviewer the opinions in a different order (reduces order effects).
|
|
81
|
+
|
|
82
|
+
> You do not know who wrote the opinions below. For each one, write what is good and what is missing, in no more than two sentences. Then vote on each finding: DOĞRU (evidenced and severity is right), ABARTILI (real but low importance), YANLIŞ (no match in the code or context). When voting, check the claim in the code or docs. Do not vote on a guess. If nobody saw something important, write it on the MISSING line. At the end, rank in exactly this format: first the "SIRALAMA:" line, then "1. Görüş X" lines from best to worst, no other text.
|
|
83
|
+
|
|
84
|
+
In a meeting council, the reviewers are the same members. In a decision council, they are the same advisors.
|
|
85
|
+
3. **Counting.** The command `node .claude/hooks/council.mjs <minutes>` computes the following and writes it to the minutes:
|
|
86
|
+
- Average rank.
|
|
87
|
+
- Vote distribution for each finding.
|
|
88
|
+
- `Tartışmalı` (contested) findings: when the number of objections (YANLIŞ + ABARTILI) is equal to or greater than the number of DOĞRU votes.
|
|
89
|
+
- `Uzlaşma` (consensus) percentage.
|
|
90
|
+
4. **Chair.** Run `board-chair` (opus) and give it the path of the minutes. The chair writes:
|
|
91
|
+
- The final decision.
|
|
92
|
+
- The dropped findings and the reasons.
|
|
93
|
+
- The minority view.
|
|
94
|
+
|
|
95
|
+
Rules the chair must follow:
|
|
96
|
+
- The chair cannot drop a `Tartışmalı` **KRİTİK** finding alone. That finding stays as "ask the user".
|
|
97
|
+
- RET is given only if at least one KRİTİK finding is not `Tartışmalı`.
|
|
98
|
+
5. **User.** The main agent shows the chair's decision in the synthesis format of rules.md §4.
|
|
99
|
+
- In a decision council, the AskUserQuestion options come from the council:
|
|
100
|
+
- The option the chair recommends comes first and is labeled "(Recommended)".
|
|
101
|
+
- Add "Council: n/N first opinions · avg. rank x" to each option's description.
|
|
102
|
+
- The minority view is written in one sentence in the description of its own option.
|
|
103
|
+
6. **Record.**
|
|
104
|
+
- Add one line to `docs/workflow/board.md` → "Toplantı günlüğü" (meeting log). Write the link to the minutes in the scope column.
|
|
105
|
+
- For a decision council, add the reference "Council: <minutes>" to `docs/decisions/log.md` and to the ADR.
|
|
106
|
+
|
|
107
|
+
## Why
|
|
108
|
+
|
|
109
|
+
- **Anonymity:** A member does not blindly follow a role with known authority (for example security).
|
|
110
|
+
- **Cross vote:** Made-up or exaggerated findings are dropped before they reach the user.
|
|
111
|
+
- **Separate chair:** The one who wrote the opinion and the one who decides are never the same model.
|
|
112
|
+
- **Different models:** The same question is answered with different abilities.
|
|
113
|
+
|
|
114
|
+
One limit: All members are Claude models. They may share similar blind spots. The council does not replace the user's decision.
|
package/.claude/board/rules.md
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Board Rules
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
5
|
-
>
|
|
3
|
+
> The expert board is made of project-specific agents (`.claude/agents/board-*.md` + `security-auditor`).
|
|
4
|
+
> Members and the meeting log live in `docs/workflow/board.md`. This file belongs to the kit and says how to run meetings.
|
|
5
|
+
> Role templates are in this folder (`board-*.md`). When the board is set up, they are copied to `.claude/agents/` and customized for the project.
|
|
6
6
|
|
|
7
|
-
## 1.
|
|
7
|
+
## 1. Authority: advisor, and stops on critical findings
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
9
|
+
- The board gives opinions, warnings and decision proposals. **The user decides.**
|
|
10
|
+
- If a member gives **RET** (a KRİTİK finding: security hole, data-loss risk, legal violation, acceptance criterion not met), the work does not count as "done" and is not committed. Show the user the finding and the options: fix (recommended) / accept the risk and record the reason / roll the task back.
|
|
11
|
+
- If members disagree, the main agent does not pick alone. Put both views side by side and **ask the user as a decision**.
|
|
12
12
|
|
|
13
|
-
## 2.
|
|
13
|
+
## 2. Meetings
|
|
14
14
|
|
|
15
|
-
|
|
|
15
|
+
| Meeting | When | Who attends | Model |
|
|
16
16
|
|---|---|---|---|
|
|
17
|
-
| **Plan** | `/plan-task
|
|
18
|
-
| **
|
|
19
|
-
| **Commit (
|
|
20
|
-
| **
|
|
21
|
-
| **
|
|
17
|
+
| **Plan** | At the end of `/plan-task`, before user approval | `board-product` + `board-architect` + members relevant to the change (max 4) | review role (`docs/workflow/models.md`) |
|
|
18
|
+
| **Task end** | At the end of `/build`, before saying "done" | Members relevant to the change (max 3) | review role (`docs/workflow/models.md`) |
|
|
19
|
+
| **Commit (light)** | Before every `git commit` (a hook enforces it) | Max 2 members relevant to the changed files; reviews only the changed lines (diff) | always `haiku`, effort `low` |
|
|
20
|
+
| **Phase end** | When a phase ends (`/wrap-up` suggests it) or `/board convene phase-end` | The whole board | review role (`docs/workflow/models.md`) |
|
|
21
|
+
| **Go-live** | `/release ilk` | The whole board | review role (`docs/workflow/models.md`) |
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Commits that contain only documentation changes (`.md`, `docs/`) are exempt from review.
|
|
24
24
|
|
|
25
|
-
**
|
|
25
|
+
**Council (three stages):** The project profile decides which meetings go to the council (`.claude/board/council.md` → "When"). In the Tam profile, plan, phase-end and go-live meetings, and task-end meetings that end in RET, follow the `.claude/board/council.md` protocol. In Standart, only phase-end and go-live. In Hafif, none. First opinions are collected first. Then members vote on and rank each other's findings anonymously. Last, `board-chair` decides. Task-end and commit meetings are single-stage.
|
|
26
26
|
|
|
27
|
-
## 3.
|
|
27
|
+
## 3. Who is relevant? (pick members by change)
|
|
28
28
|
|
|
29
|
-
|
|
|
29
|
+
| Change | Member |
|
|
30
30
|
|---|---|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
| Auth,
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
| API
|
|
37
|
-
| Test,
|
|
38
|
-
| CI, deploy, Docker, hosting,
|
|
39
|
-
|
|
|
40
|
-
| Prompt, model
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
## 4.
|
|
47
|
-
|
|
48
|
-
1. **Limit
|
|
49
|
-
1b. **
|
|
50
|
-
1c. **
|
|
51
|
-
2.
|
|
52
|
-
2b. **
|
|
53
|
-
3. **
|
|
31
|
+
| New feature, scope, user flow | board-product |
|
|
32
|
+
| Data model, migration, new module, new dependency, folder structure | board-architect |
|
|
33
|
+
| Auth, authorization, payment, webhook, file upload, environment variable, secret | security-auditor |
|
|
34
|
+
| Personal data field, new external service, log content, legal text | board-privacy |
|
|
35
|
+
| UI component, page, screen, copy | board-ux (+ board-performance on web) |
|
|
36
|
+
| API endpoint, contract, error format | board-api |
|
|
37
|
+
| Test, critical flow, bug fix | board-qa |
|
|
38
|
+
| CI, deploy, Docker, hosting, configuration | board-devops |
|
|
39
|
+
| Mobile permission, native module, store setting | board-mobile |
|
|
40
|
+
| Prompt, model call, eval | board-ai |
|
|
41
|
+
|
|
42
|
+
At task end, `node .claude/hooks/flow.mjs` suggests members from the changed paths (only those on the board, the one with the most matching files first; `security-auditor` on a sensitive path). The path is a guess. If the meaning of the change differs (a new feature → board-product, for example), correct it using the table.
|
|
43
|
+
|
|
44
|
+
Do not call a member who is not on the board. If the relevant area has no member, write "no X expert on the board" in the status block.
|
|
45
|
+
|
|
46
|
+
## 4. How to run a meeting
|
|
47
|
+
|
|
48
|
+
1. **Limit check** (`docs/workflow/usage-limits.md`): If the level is yellow, halve the member count. If red, ask the user (including the option to lighten the board). For a task-end meeting, `node .claude/hooks/flow.mjs` gives the member count and whether to run in parallel or in sequence (change size + limit; `code-reviewer` always attends, and `security-auditor` on a sensitive path).
|
|
49
|
+
1b. **Deterministic gate** (commit, task end, phase end; not in the plan meeting): `node .claude/hooks/gate.mjs --run`. It runs the lint, type check and test from AGENTS.md → `Komutlar`, plus Semgrep. The result is stored with the change signature. If it is red or empty (no check ran), the commit gate does not open: fix first or fill in `Komutlar`. If the user explicitly asks for an intermediate commit, use `node .claude/hooks/commit-gate.mjs --skip "kullanıcı isteği"` (it always asks for approval). If the gate says "command approval required", show the commands to the user. If the user approves, run `node .claude/hooks/gate.mjs --approve` (a new or changed command does not run without approval).
|
|
50
|
+
1c. **In a commit meeting, first** run `node .claude/hooks/commit-gate.mjs --status`. If it says "Approval valid", there is no meeting (the task-end meeting already reviewed the same changes). If it says "Changed since the last approval: …", give the members only the diff of those files.
|
|
51
|
+
2. **Run the members in parallel** (Agent tool, each member as a separate subagent). Give each member: meeting type, scope (plan text / diff range / phase), task id, acceptance criteria and gate output (if any). In the call, pass the `model` and `effort` of the review role (`node .claude/hooks/models.mjs --show`). In a commit meeting, pass `model: "haiku"`, `effort: "low"`. Write the report contract in the prompt: max ~15 lines and 5 findings (any more as one line: "other: N minor findings"), one line per finding, in order of severity, no praise or summary (reports enter the main session's context). Prompt order: the part that is the same for all members (meeting type, scope, acceptance criteria, gate output) first, the member-specific part last; the shared head is read from cache. If a re-check is needed after fixes, do not start a new member. Continue the same member with SendMessage and give only the fixed diff (the cold start is paid once).
|
|
52
|
+
2b. **If it is a council meeting** (§2), apply stages 1-4 of `.claude/board/council.md`. Build the synthesis from the chair's decision. Write the minority view on the disagreement line.
|
|
53
|
+
3. **Synthesize** (main agent; in a council, from the chair's decision):
|
|
54
54
|
|
|
55
55
|
```
|
|
56
|
-
##
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
## Board: [type] · [scope]
|
|
57
|
+
Attended: [members] · Result: ONAY | KOŞULLU ONAY | RET
|
|
58
|
+
Critical: [if any]
|
|
59
|
+
Important: [merged, no duplicates, in order of severity]
|
|
60
|
+
Disagreement: [the two views, if any]
|
|
61
|
+
To ask the user: [decisions the members flagged]
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
4. **
|
|
65
|
-
5. **
|
|
66
|
-
6. **
|
|
64
|
+
4. **Inform the user and ask:** Ask the decisions with AskUserQuestion. Ask which findings to fix as a **multi-select**, with KRİTİK ones marked as recommended.
|
|
65
|
+
5. **Record:** Add one line to `docs/workflow/board.md` → "Toplantı günlüğü" (meeting log). Add the decisions to the decision log `docs/decisions/log.md`. Write open findings to `docs/workflow/progress.md` → "Açık sorunlar" (open issues).
|
|
66
|
+
6. **If the commit meeting result is ONAY or KOŞULLU ONAY,** open the commit gate: `node .claude/hooks/commit-gate.mjs --approve "<attending members>"`. If RET, do not open it; ask the user first.
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
If the user wants to skip commit review for now, they must say so explicitly. Then run `node .claude/hooks/commit-gate.mjs --skip "kullanıcı isteği"` (it asks for approval) and write it to the log. To turn it off permanently: `docs/workflow/board.md` → `**Commit denetimi:** kapalı`.
|
|
69
69
|
|
|
70
|
-
## 5.
|
|
70
|
+
## 5. How to set up the board (`/start` board step or `/board setup`)
|
|
71
71
|
|
|
72
|
-
1.
|
|
73
|
-
2.
|
|
74
|
-
3.
|
|
75
|
-
4.
|
|
76
|
-
5. `docs/workflow/board.md
|
|
77
|
-
6.
|
|
78
|
-
7.
|
|
72
|
+
1. Recommend by project type and PRD (table below). If there is an AI add-on, `board-ai` is always recommended. If there is personal data, `board-privacy` is always recommended.
|
|
73
|
+
2. Ask the user as a **multi-select** (recommended ones marked). With "Other" they can ask for a new expert, for example "Accessibility expert", "Game designer" or "Fintech compliance expert". In that case, write a new `board-<name>.md` using the existing template structure.
|
|
74
|
+
3. Do not ask for a model: members work with the model and effort of the review role (`docs/workflow/models.md`).
|
|
75
|
+
4. For each selected member, copy `.claude/board/board-<role>.md` to `.claude/agents/board-<role>.md` and **fill in the "This project" section**: product summary, chosen stack, critical flows, risks specific to this role. `security-auditor` is already under `.claude/agents/`.
|
|
76
|
+
5. In `docs/workflow/board.md`, fill in the status, the member table (write "review role" in the Model column) and the commit review line.
|
|
77
|
+
6. Introduce the board to the user: what each member does, when it steps in, the estimated cost (one line).
|
|
78
|
+
7. New agents load when the session restarts. Tell the user this. In this session, if needed, run the member as a general-purpose subagent by giving it the content of the role file.
|
|
79
79
|
|
|
80
|
-
|
|
|
80
|
+
| Type | Recommended board |
|
|
81
81
|
|---|---|
|
|
82
82
|
| web-saas | urun, mimar, security-auditor, ux, performans, kvkk, qa (+ devops, + ai) |
|
|
83
83
|
| mobil | urun, mimar, security-auditor, ux, mobil, kvkk, qa (+ devops, + ai) |
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Security guidance for projects set up with this kit
|
|
2
2
|
|
|
3
|
-
security-guidance
|
|
3
|
+
The model reviews of the security-guidance plugin read this file as an extra checklist. Project-specific rules are in `docs/security/checklist.md`; this file holds only what applies to every project.
|
|
4
4
|
|
|
5
|
-
- Supabase
|
|
6
|
-
- Supabase
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
- LLM
|
|
12
|
-
-
|
|
5
|
+
- The Supabase secret key (`sb_secret_…`, formerly `service_role`) and every other secret key are used only on the server; they never go into client code or a `NEXT_PUBLIC_` / `EXPO_PUBLIC_` variable.
|
|
6
|
+
- In Supabase, RLS is on for every table; a new table is not added without an RLS policy. The policy checks the row owner with `auth.uid()`.
|
|
7
|
+
- Every API endpoint and server action checks the session first, then the owner of the resource (IDOR). A `user_id` / `org_id` value that comes from the client is not trusted.
|
|
8
|
+
- Webhooks (payment, email, third party) are not processed without signature verification; if the same event arrives twice, it is not processed twice.
|
|
9
|
+
- Personal data (name, email, phone, national ID number, location, health) is not logged at INFO level or above and is not sent to error tracking (Sentry). KVKK.
|
|
10
|
+
- On file upload, type and size are checked on the server; an uploaded file is not put in a public bucket by default.
|
|
11
|
+
- In LLM calls, user input and external content (web page, document) are kept apart as data, not as instructions; model output is not run as SQL, a shell command or HTML without validation.
|
|
12
|
+
- Operations that change money, credit or quota run on the server and are atomic; the price sent by the client is not trusted.
|